├── .editorconfig ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── STRUCTURE.md └── pages ├── 01.guides ├── 01.mixplay │ ├── 01.Introduction │ │ ├── design.pdf │ │ ├── doc.md │ │ ├── link-demo.gif │ │ └── studio │ │ │ ├── PublishProcess.svg │ │ │ ├── controls.png │ │ │ ├── createNewProject.png │ │ │ ├── editorTabs.png │ │ │ ├── editors │ │ │ ├── add.png │ │ │ ├── button.png │ │ │ └── list.png │ │ │ ├── grid_with_controls.png │ │ │ ├── scenes.png │ │ │ └── share │ │ │ ├── explicitSharing.png │ │ │ ├── shareButton.jpg │ │ │ ├── shareButton.png │ │ │ └── shareCode.png │ ├── 02.interactive-overview │ │ ├── HighLevelOverview.svg │ │ ├── InteractiveHierarchy.svg │ │ └── doc.md │ ├── 03.Controls │ │ ├── 01.Button │ │ │ ├── button.png │ │ │ └── doc.md │ │ ├── 02.Joystick │ │ │ ├── doc.md │ │ │ ├── joystick.png │ │ │ └── joystickCoordinates.svg │ │ ├── 03.Label │ │ │ ├── doc.md │ │ │ └── label.png │ │ ├── 04.textboxes │ │ │ ├── doc.md │ │ │ └── textbox.png │ │ ├── 05.Mouse │ │ │ ├── coordinates.svg │ │ │ └── doc.md │ │ └── doc.md │ ├── 04.CustomControls │ │ ├── 01.Introduction │ │ │ ├── doc.md │ │ │ └── project-heirarchy.svg │ │ ├── 02.GettingStartedWithHTML │ │ │ ├── cdkHTML.png │ │ │ └── doc.md │ │ ├── 03.GettingStartedWithPreact │ │ │ ├── cdkPreact.png │ │ │ └── doc.md │ │ ├── 04.BestPractices │ │ │ └── doc.md │ │ ├── 05.GameClients │ │ │ └── doc.md │ │ ├── 06.Workflow │ │ │ ├── cdkOverview.png │ │ │ └── doc.md │ │ ├── 07.WritingSDKs │ │ │ └── doc.md │ │ ├── cdkStartScreen.png │ │ └── doc.md │ ├── 05.managing-project-access │ │ ├── doc.md │ │ ├── editors │ │ │ ├── add.png │ │ │ ├── button.png │ │ │ └── list.png │ │ ├── explicitSharing.png │ │ ├── shareButton.png │ │ └── shareCode.png │ ├── 06.sparks │ │ ├── TransactionLifecycle.svg │ │ └── doc.md │ ├── 07.Protocol │ │ ├── 01.Overview │ │ │ └── doc.md │ │ ├── 02.Specification │ │ │ ├── doc.md │ │ │ ├── simplified-oauth.monopic │ │ │ ├── simplified-oauth.svg │ │ │ ├── state-diagram.monopic │ │ │ └── state-diagram.svg │ │ └── doc.md │ └── landing.md ├── 02.chat │ ├── 01.Introduction │ │ └── doc.md │ ├── 02.ChatBot │ │ └── doc.md │ ├── 03.TroubleShooting │ │ └── doc.md │ ├── 04.Emotes │ │ ├── doc.md │ │ └── exampleEmote.png │ └── landing.md ├── 03.core │ ├── 01.Introduction │ │ └── doc.md │ ├── 02.BasicTutorial │ │ ├── doc.md │ │ └── runconfig.png │ ├── 03.LiveUpdatesGuides │ │ ├── 01.LiveUpdatesTutorial │ │ │ └── doc.md │ │ ├── 02.PatchingModelsGuide │ │ │ └── doc.md │ │ └── doc.md │ ├── 04.AdBreaks │ │ └── doc.md │ ├── 05.RateLimits │ │ └── doc.md │ ├── 06.ContinuationTokens │ │ └── doc.md │ ├── 07.WhatsV2 │ │ └── doc.md │ ├── 08.ApplicationIdentification │ │ └── doc.md │ ├── 09.FAQ │ │ └── doc.md │ └── landing.md ├── 04.test-streams │ ├── 01.introduction │ │ ├── doc.md │ │ └── enable.png │ ├── 02.FAQ │ │ └── doc.md │ └── doc.md ├── 05.embeds │ ├── 01.introduction │ │ └── doc.md │ ├── 02.FAQ │ │ └── doc.md │ └── doc.md ├── 06.season2 │ ├── 01.introduction │ │ └── doc.md │ ├── 02.faq │ │ └── doc.md │ ├── 04.embers │ │ ├── attribution.png │ │ ├── doc.md │ │ └── sticker.gif │ ├── 05.leaderboards │ │ └── doc.md │ ├── 07.Channel Progression │ │ ├── badges.png │ │ └── doc.md │ └── landing.md └── landing.md ├── 02.reference ├── 01.chat │ ├── 01.introduction │ │ └── doc.md │ ├── 02.connection │ │ └── doc.md │ ├── 03.methods │ │ ├── 01.auth │ │ │ └── doc.md │ │ ├── 02.msg │ │ │ └── doc.md │ │ ├── 03.whisper │ │ │ └── doc.md │ │ ├── 04.vote-choose │ │ │ └── doc.md │ │ ├── 05.vote-start │ │ │ └── doc.md │ │ ├── 06.timeout │ │ │ └── doc.md │ │ ├── 07.purge │ │ │ └── doc.md │ │ ├── 08.deleteMessage │ │ │ └── doc.md │ │ ├── 09.clearMessages │ │ │ └── doc.md │ │ ├── 10.history │ │ │ └── doc.md │ │ ├── 11.giveawaystart │ │ │ └── doc.md │ │ ├── 12.ping │ │ │ └── doc.md │ │ ├── 14.cancelSkill │ │ │ └── doc.md │ │ ├── 14.optOutEvents │ │ │ └── doc.md │ │ └── landing.md │ ├── 04.events │ │ ├── 01.WelcomeEvent │ │ │ └── doc.md │ │ ├── 02.ChatMessage │ │ │ └── doc.md │ │ ├── 03.UserJoin │ │ │ └── doc.md │ │ ├── 04.UserLeave │ │ │ └── doc.md │ │ ├── 05.PollStart │ │ │ └── doc.md │ │ ├── 06.PollEnd │ │ │ └── doc.md │ │ ├── 07.DeleteMessage │ │ │ └── doc.md │ │ ├── 08.PurgeMessage │ │ │ └── doc.md │ │ ├── 09.ClearMessages │ │ │ └── doc.md │ │ ├── 10.UserUpdate │ │ │ └── doc.md │ │ ├── 11.UserTimeout │ │ │ └── doc.md │ │ ├── 12.SkillAttribution │ │ │ └── doc.md │ │ ├── 13.DeleteSkillAtribution │ │ │ └── doc.md │ │ └── landing.md │ ├── 05.ChatChattersList │ │ └── doc.md │ ├── 06.errors │ │ └── doc.md │ └── landing.md ├── 02.constellation │ ├── 01.introduction │ │ └── doc.md │ ├── 02.methods │ │ ├── 01.livesubscribe │ │ │ └── doc.md │ │ ├── 02.liveunsubscribe │ │ │ └── doc.md │ │ ├── 03.ping │ │ │ └── doc.md │ │ └── doc.md │ ├── 03.events │ │ ├── 01.hello │ │ │ └── doc.md │ │ ├── 02.live │ │ │ ├── 01.Announcement │ │ │ │ └── doc.md │ │ │ ├── 02.Channel Followed │ │ │ │ └── doc.md │ │ │ ├── 03.Channel Hosted │ │ │ │ └── doc.md │ │ │ ├── 04.Channel Unhosted │ │ │ │ └── doc.md │ │ │ ├── 05.Channel Subscribed │ │ │ │ └── doc.md │ │ │ ├── 06.Channel Resubscribed │ │ │ │ └── doc.md │ │ │ ├── 07.Channel Resubshared │ │ │ │ └── doc.md │ │ │ ├── 08.Channel Directpurchased │ │ │ │ └── doc.md │ │ │ ├── 09.Channel Update │ │ │ │ └── doc.md │ │ │ ├── 10.Costream Update │ │ │ │ └── doc.md │ │ │ ├── 11.Interactive Connect │ │ │ │ └── doc.md │ │ │ ├── 12.Interactive Disconnect │ │ │ │ └── doc.md │ │ │ ├── 13.Team Deleted │ │ │ │ └── doc.md │ │ │ ├── 14.Team Memberaccepted │ │ │ │ └── doc.md │ │ │ ├── 15.Team Memberinvited │ │ │ │ └── doc.md │ │ │ ├── 16.Team Memberremoved │ │ │ │ └── doc.md │ │ │ ├── 17.Team Ownerchanged │ │ │ │ └── doc.md │ │ │ ├── 18.User Achievement │ │ │ │ └── doc.md │ │ │ ├── 19.User Followed │ │ │ │ └── doc.md │ │ │ ├── 20.User Notify │ │ │ │ └── doc.md │ │ │ ├── 21.User Subscribed │ │ │ │ └── doc.md │ │ │ ├── 22.User Resubscribed │ │ │ │ └── doc.md │ │ │ ├── 23.User Teamaccepted │ │ │ │ └── doc.md │ │ │ ├── 24.User Teaminvited │ │ │ │ └── doc.md │ │ │ ├── 25.User Teamremoved │ │ │ │ └── doc.md │ │ │ ├── 26.User Update │ │ │ │ └── doc.md │ │ │ ├── 27.Channel Skill │ │ │ │ └── doc.md │ │ │ ├── 28.Patronage Update │ │ │ │ └── doc.md │ │ │ ├── 29.Channel Subscription Gifted │ │ │ │ └── doc.md │ │ │ ├── 30.User Subscription Gifted │ │ │ │ └── doc.md │ │ │ ├── 31.Progression LevelUp │ │ │ │ └── doc.md │ │ │ └── doc.md │ │ └── doc.md │ └── landing.md ├── 04.webhooks │ └── landing.md ├── 05.oauth │ ├── 01.QuickDetails │ │ └── doc.md │ ├── 02.ShortCodeAuth │ │ ├── demo.gif │ │ └── doc.md │ ├── 03.scopes │ │ └── doc.md │ └── landing.md ├── 06.rest │ └── doc.md └── default.md ├── 03.blog ├── 01.angular-lazy-loading │ ├── blog-item.md │ ├── bundle-error.png │ └── splash.png ├── 02.shortcode-sdks │ ├── blog-item.md │ └── demo.gif ├── 03.ChatListDeprecations │ └── blog-item.md ├── 05.OAuthActing │ └── blog-item.md ├── 06.ChannelProgression │ └── blog-item.md ├── 07.SparkCostChanges │ └── blog-item.md ├── 08.NewChatRestrictions │ ├── blog-item.md │ └── img │ │ ├── catbotlevels.png │ │ └── channelProgressionLevels.png ├── 09.streamer-review │ └── blog-item.md ├── 10.mavenchanges │ └── blog-item.md ├── 11.MixPlaySDKChanges │ └── blog-item.md ├── 12.AutoHostingAndMore │ └── blog-item.md ├── 13.MarchChanges │ └── blog-item.md ├── _bios │ ├── copeet │ │ └── bio.md │ └── probableprime │ │ ├── bio.md │ │ └── logo.png └── blog.md ├── 03.resources ├── 02.case-studies │ ├── bethesda │ │ ├── default.md │ │ └── showcase-bethesda.png │ ├── case-studies.md │ ├── control-the-show.png │ ├── showcase-bethesda.png │ ├── showcase-curseinnkeeper.png │ ├── showcase-devolver.png │ ├── showcase-fortnite.png │ └── showcase-masteroverwatch.png ├── 03.youtube │ └── default.md ├── 04.typography │ └── default.md ├── default.en.md └── default.md ├── 04.downloads └── default.md ├── 05.dev-show ├── dev-show-e1.png ├── dev-show-e10.png ├── dev-show-e11.png ├── dev-show-e12.png ├── dev-show-e13.png ├── dev-show-e14.png ├── dev-show-e15.png ├── dev-show-e2.png ├── dev-show-e3.png ├── dev-show-e4.png ├── dev-show-e5.png ├── dev-show-e6.png ├── dev-show-e7.png ├── dev-show-e8.png ├── dev-show-e9.png ├── dev-show.md ├── e1 │ └── default.md ├── e10 │ └── default.md ├── e11 │ └── default.md ├── e12 │ └── default.md ├── e13 │ └── default.md ├── e14 │ └── default.md ├── e15 │ └── default.md ├── e2 │ └── default.md ├── e3 │ └── default.md ├── e4 │ └── default.md ├── e5 │ └── default.md ├── e6 │ └── default.md ├── e7 │ └── default.md ├── e8 │ └── default.md └── e9 │ └── default.md ├── 05.legal ├── attributions │ └── default.md ├── default.md └── developer-agreement │ └── default.md ├── developer-account └── default.md ├── feed └── docs.md ├── footer └── default.md ├── home ├── devbot.png └── home.md ├── oauthreturn └── doc.md └── tags └── tags.md /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.md] 2 | indent_style = space 3 | indent_size = 4 4 | end_of_line = lf 5 | trim_trailing_whitespace = true 6 | insert_final_newline = true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Sass 2 | .sass-cache 3 | 4 | # Grav Specific 5 | data/* 6 | accounts/ 7 | assets/ 8 | blueprints.yaml 9 | blueprints 10 | plugins/* 11 | themes/* 12 | trilby.test/ 13 | screenshot.jpg 14 | config.bak/ 15 | config/ 16 | data/ 17 | localhost/ 18 | CHANGELOG.md 19 | CODEOFCONDUCT.md 20 | LICENSE 21 | .dependencies 22 | # JS 23 | themes/mixer-dev/node_modules 24 | 25 | # OS Generated 26 | .DS_Store* 27 | thumbs.db 28 | Icon? 29 | Thumbs.db 30 | *.swp 31 | 32 | # phpstorm 33 | .idea/* 34 | 35 | /config/security.yaml 36 | node_modules/ 37 | interactive_next/ 38 | old/ 39 | package-lock.json -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Mixer's Developer Documentation 2 | 3 | Welcome, and thank you for your interest in contributing to our Documentation! Contributions of any size are welcome! 4 | 5 | Contributing is easy, but we'd like you to follow some steps to ensure that you have the best possible time in helping us out. 6 | 7 | ## Before Contributing 8 | 9 | As Mixer is part of Microsoft, you'll need to sign Microsoft Contributor Level Agreement. You can read more about this agreement [here](https://cla.opensource.microsoft.com/). 10 | 11 | If you don't do this first then we'll be unable to merge your contribution onto our site. 12 | 13 | ## 1. Consider making an Issue First 14 | 15 | If the contribution you have in mind is large or complex please make an issue first. Someone else might be working on the same item and we'd hate for you to duplicate work with someone else. 16 | 17 | Once you've made this issue: 18 | * The team will review it 19 | * We'll let you know if anyone else is looking into this issue 20 | * If no one is working on it, we'll assign you to the issue and let you know to feel free to start work. 21 | 22 | You can now move on to actually contributing. 23 | 24 | ## 2. Get Setup 25 | 26 | 1. Our documentation is written in [Markdown](https://daringfireball.net/projects/markdown/). So make sure your familiar with it before you begin. 27 | 2. [Fork](https://guides.github.com/activities/forking) the repository to your account. This let's you edit it. If you're within the Mixer team you can skip this step :) 28 | 3. Create a branch for you to work on. This keeps your changes organized. 29 | 30 | ## 3. Make your Changes 31 | 32 | 1. Find the page you want to change. You can read more about how the documentation is structured on our [Structure page](STRUCTURE.md) 33 | 1. Make your changes: 34 | 1. You can do this by cloning the repository and editing locally. We recommend VSCode for MarkDown Editing. Use `CTRL + K, V` to open a Markdown Preview. 35 | 1. [Or directly in github](https://help.github.com/articles/editing-files-in-your-repository/) 36 | 1. Commit your changes, please use a descriptive commit message. 37 | 38 | ## 4. Make a Pull Request 39 | 40 | 2. Open a [Pull Request](https://github.com/mixer/developer-docs/compare) 41 | 3. If your Pull Request Addresses an open issue, please add a line in your PR's description that says Fixes: #123, where #123 is the number of the issue you're fixing. 42 | 43 | Once you've filed the PR: 44 | * Some automated checks may run to ensure that you've signed the Microsoft CLA and that your documentation does not break our site. 45 | * Our team will use GitHub's review feature to review your PR. 46 | * We may ask for changes, if so please edit your changes and then ask us for another review. 47 | * If your PR gets accepted our team will merge it into the `master` branch. After this your documentation change will go live on the Site. 48 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Microsoft Corporation 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Developer Documentation 2 | 3 | The Mixer Developer Site uses these Markdown files to generate the content on the site. 4 | 5 | You can checkout the Mixer Developer site at: dev.mixer.com. 6 | 7 | ## How to Contribute 8 | 9 | Checkout our [CONTRIBUTING](CONTRIBUTING.md) guide. 10 | 11 | ## Asking Questions 12 | 13 | If you have a question, feel free to open an [issue](https://github.com/mixer/developer-docs/issues/new), or contacting us on [Gitter](https://gitter.im/Mixer/developers) 14 | 15 | ## How to Report an Error in our Documentation 16 | 17 | If you run into an error in our documentation: 18 | * [Open an Issue](https://github.com/mixer/developer-docs/issues/new) 19 | * Include as many details as possible. 20 | * Make sure to include a link to the page on dev.mixer.com 21 | 22 | Once it's filed: 23 | 24 | * The team will review your issue 25 | * If the team can locate the error, it will be assigned to a team member 26 | * They will fix the issue and then let you know when it is fixed by replying to the issue 27 | -------------------------------------------------------------------------------- /STRUCTURE.md: -------------------------------------------------------------------------------- 1 | # Structure Information 2 | 3 | ## Areas 4 | 5 | We have 2 main types of content on the Developer Site and they are for different audiences: 6 | - Guides - Tutorials and Information meant to guide a reader through a topic. 7 | - Reference - Technical reference, designed to give a reader exactly what they need. Designed for users who already know what they are looking for. 8 | 9 | ## Folder Structure 10 | 11 | The Mixer Developer Site uses Grav to generate the site. 12 | 13 | Grav uses folders for page titles. This allows supplementary files such as images to be placed neatly with the content which it supports. 14 | 15 | When creating a new article or page, always start by making a folder. Always give this folder a numeric prefix as this allows us to order the folders later in the admin panel. For example `01.coolstuff`. 16 | 17 | The file within the folder should usually be `doc.md`. `doc` is the name of the template that Grav will use to render the file. `doc` is usually the correct template but there are exceptions. If you need to use a different template it will be picked up in a PR. 18 | 19 | ## Content Structure 20 | 21 | The main content for the developer site is written in [Markdown](https://daringfireball.net/projects/markdown/) and usually makes up the body of a page. 22 | 23 | Some HTML tags can be used but these should be limited wherever possible. 24 | 25 | We also have some custom markdown processing that enables us to add extra features. Examples of these can be found on the [Hidden Typography page](https://dev.mixer.com/resources/typography) of the site. This page is a scratch pad that we use to test our rendering. 26 | 27 | ## File Headers 28 | 29 | The top portion of each file is a block of [YAML](https://yaml.org/) this controls various settings about the pages. Be sure that this is valid YAML before committing. For possible values check out Grav's Documentation: https://learn.getgrav.org/content. 30 | 31 | We'll be adding some tests to ensure valid yaml is used before PRs can be merged in due course. 32 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/design.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/design.pdf -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/link-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/link-demo.gif -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/controls.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/createNewProject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/createNewProject.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/editorTabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/editorTabs.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/editors/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/editors/add.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/editors/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/editors/button.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/editors/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/editors/list.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/grid_with_controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/grid_with_controls.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/scenes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/scenes.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/share/explicitSharing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/share/explicitSharing.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/share/shareButton.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/share/shareButton.jpg -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/share/shareButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/share/shareButton.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/01.Introduction/studio/share/shareCode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/01.Introduction/studio/share/shareCode.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/01.Button/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/03.Controls/01.Button/button.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/01.Button/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Button' 3 | --- 4 | # Button 5 | 6 | A button is a rectangular, interactive control within a scene. [Game Clients](/guides/mixplay/interactive-overview#the-game-client) receive events when participants interact with a button. 7 | 8 | 9 | - `mousedown` event is sent when a button is pressed by a participant 10 | - `mouseup` event is sent when a button is released by a participant 11 | - `keydown` event is sent when the key (specified via key code on the button) is pressed by a participant 12 | - `keyup` event is sent when the key (specified via key code on the button) is released by a participant 13 | 14 | ![Sample button control which costs the participant one spark if they click on it.](./button.png?classes=caption "Sample button control which costs the participant one spark if they click on it.") 15 | 16 | Developers can use buttons to enable participants to vote, cause in-game actions to happen, or control in-game entities. 17 | 18 | Buttons are highly customizable. These button properties can be edited from both the Interactive Studio and a Game Client: 19 | 1. Text displayed on the button 20 | 2. Spark cost (For more info about sparks, see [What are sparks?](/guides/mixplay/sparks#what-are-sparks)) 21 | 3. Width of the progress bar, which is displayed at the bottom of a button 22 | 4. Disabled state - Buttons which are disabled cannot be interacted with 23 | 5. Cooldown duration - Prevents interaction until it expires 24 | 6. Key code - A keyboard key assignment to a button 25 | 7. Tooltip displayed when hovering over the button 26 | 8. Color of the background on the button 27 | 9. Color of the border on the button 28 | 10. Accent color applied to the cooldown spinner and progress bar 29 | 11. Focus Color applied to the border when focusing 30 | 12. Color of the text display on the button 31 | 13. Size of the text display on the button 32 | 14. The background image of the button 33 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/02.Joystick/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'JoyStick' 3 | --- 4 | # JoyStick 5 | 6 | Joysticks are circular controls positioned within a scene that participants can click and drag. Moving a joystick sends an input event down to the Game Client with the coordinates of the joystick relative to its center. Joystick coordinates range between `-1 and 1`. 7 | 8 | ![A joystick display to a participant.](./joystick.png?classes=caption "An idle joystick displayed to a participant. Its coordinates are `0, 0`.") 9 | 10 | ![An illustration of the coordinate system for joysticks.](./joystickCoordinates.svg?classes=caption "An illustration of the coordinate system for joysticks. The top left is `-1, -1` and the bottom right is `1, 1`.") 11 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/02.Joystick/joystick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/03.Controls/02.Joystick/joystick.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/03.Label/doc.md: -------------------------------------------------------------------------------- 1 | # Labels 2 | 3 | Labels are controls which can be used to display instructions and visually group controls together. As an example, a scene with buttons that either hurt or heal the player can have each section clearly labeled respectively above the buttons. 4 | 5 | ![Sample label control that is bold and italicized.](./label.png?classes=caption "Sample label control that is bold and italicized.") 6 | 7 | Labels are customizable. These label properties can be edited from both the Interactive Studio and a Game Client: 8 | 1. Text displayed in the label 9 | 1. Size of the text in the label 10 | 1. Color of the text in the label 11 | 1. Whether the label is underlined 12 | 1. Whether the label is italicized 13 | 1. Whether the label is bold 14 | 15 | 16 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/03.Label/label.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/03.Controls/03.Label/label.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/04.textboxes/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Text Boxes' 3 | --- 4 | 5 | # TextBoxes 6 | 7 | TextBoxes are controls which can be used to get text input from participants. [Game Clients](/guides/mixplay/interactive-overview#the-game-client) receive events when participants either type or submit the text. 8 | 9 | 10 | - `change` event is sent when the participant types in the textbox (This is not sent if the button has a submit button) 11 | - `submit` event is sent when the participant submits the textbox 12 | 13 | ![Sample textbox control asking participants to enter their pet\'s name, costing 10 sparks to submit.](./textbox.png?classes=caption "Sample textbox control asking participants to enter their pet's name, costing 10 sparks to submit.") 14 | 15 | Textboxes are customizable. These textbox properties can be edited from both the Interactive Studio and a Game Client: 16 | 17 | 1. Placeholder text display inside the textbox 18 | 1. Text displayed in the submit button associated with the textbox 19 | 1. Whether the textbox is multiline 20 | 1. Whether the textbox has a submit button 21 | 1. Disabled state - Textboxes which are disabled cannot be interacted with 22 | 1. Cooldown duration - Prevents interaction until it expires 23 | 1. Spark cost (For more info about sparks, see [What are Sparks?](/guides/mixplay/sparks#what-are-sparks)) 24 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/04.textboxes/textbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/03.Controls/04.textboxes/textbox.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/05.Mouse/doc.md: -------------------------------------------------------------------------------- 1 | # Mouse 2 | 3 | ! The Mouse control cannot be used in the same Scene as other controls including Buttons. Ensure you create a scene exclusively for it. 4 | 5 | Mouse input allows you to get mouse events over video. When a Mouse control is added to a scene it will create a rectangle that covers the video. When a Participant moves their mouse over the video events can be sent down to your Game or Application. 6 | 7 | This control is useful for drawing or pointer style experiences. 8 | 9 | ## Properties 10 | 11 | The Mouse control has a number of properties that change its behavior: 12 | 13 | - Send Move Events 14 | - `mousedown` (default) - this will only send mouse move events during a mousedown event 15 | - `always` mouse move events are sent on hover and during mousedown 16 | - `never` never send mouse move events. You will still receive click events. 17 | - Move Throttle - Will throttle movement events sent to the game client. The default is 50ms. 18 | - Send Mouse Down Event - When checked it will send mouse down events 19 | - Send Mouse Up Event - When checked it will send mouse up events 20 | 21 | ## Placement 22 | 23 | The mouse control is unique in that you cannot place the mouse control on a grid. This is because when it is added to a scene it loads over the video and is automatically sized to match the size of the video. 24 | 25 | ## Coordinates 26 | 27 | Regardless of device or screen size, screen controls operates on a coordinate system where the bottom left of the video is X: 0, Y: 0 and the top right is X: 1, X: 1. The middle of the video is 0.5 in both axises. 28 | 29 | ![Image showing coordinate system for MixPlay Joysticks](./coordinates.svg) 30 | 31 | ## Translating Coordinates to your Application / Game 32 | 33 | When you receive coordinates from a mouse event you will usually need to translate this to a location within your Game or Application world. Doing this is quite easy. 34 | 35 | First make sure that you're using the same coordinate system as us. The Origin should be at the bottom left of your window. 36 | 37 | Then you can apply the following to each coordinate to translate them into your coordinate space: 38 | 39 | - For X - take the width of your Game / Application's window and multiply it by the X coordinate 40 | - For Y - take the height of your Game / Application's window and multiply it by the Y coordinate 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/03.Controls/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Controls 3 | process: 4 | markdown: true 5 | twig: true 6 | twig_first: true 7 | --- 8 | 9 | # Controls 10 | A control is an interactive element in a user interface within a MixPlay scene. [Participants](/guides/mixplay/interactive-overview#participants) can interact with the control using touch, keyboard, mouse, or controller. 11 | 12 | Mixer has a variety of controls available to use out of the box and we're always looking to add more in the future. Each control has its own page here on the dev site so that we can provide as much detail as possible. 13 | 14 | ## Control Types 15 | 16 | {% for p in page.children %} 17 | - [{{p.title}}]({{p.url}}) 18 | {% endfor %} 19 | 20 | 21 | ## Custom Controls 22 | 23 | If you're looking for more customization and more options for your interactive controls then checkout our new [Custom Controls](/guides/mixplay/customcontrols/introduction) feature. It lets you create awesome experiences that are 100% custom and written in HTML, JavaScript and CSS. 24 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/04.CustomControls/02.GettingStartedWithHTML/cdkHTML.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/04.CustomControls/02.GettingStartedWithHTML/cdkHTML.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/04.CustomControls/03.GettingStartedWithPreact/cdkPreact.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/04.CustomControls/03.GettingStartedWithPreact/cdkPreact.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/04.CustomControls/04.BestPractices/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Best Practices' 3 | --- 4 | # Best Practices 5 | 6 | ## Test Across Platforms 7 | 8 | With desktop computers as the primary development tools, it's easy to forget that most viewers aren't on desktop. Xbox and mobile viewers account for large chunks of the streaming audience. The CDK provides some tools to test on various screen sizes and resolutions, and we recommend that you also test using different browsers and different devices once your private bundle is uploaded to Mixer. 9 | 10 | For more information about the testing and development process, see our [Workflow Guide](/guides/mixplay/customcontrols/workflow). 11 | 12 | ## Use Internationalization 13 | Most people don't speak your native language, so most of your potential viewers or players won't either! Internationalizing your controls is an easy win to help reach the largest possible audience. 14 | 15 | If you're using our Preact Starter, then Internationalization is already built in. [Check out the guide for that over on the Preact page](/guides/mixplay/customcontrols/gettingstartedwithpreact#internationalization). 16 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/04.CustomControls/06.Workflow/cdkOverview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/04.CustomControls/06.Workflow/cdkOverview.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/04.CustomControls/cdkStartScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/04.CustomControls/cdkStartScreen.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/04.CustomControls/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Custom Controls' 3 | redirect: 'guides/mixplay/customcontrols/introduction' 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/05.managing-project-access/editors/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/05.managing-project-access/editors/add.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/05.managing-project-access/editors/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/05.managing-project-access/editors/button.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/05.managing-project-access/editors/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/05.managing-project-access/editors/list.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/05.managing-project-access/explicitSharing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/05.managing-project-access/explicitSharing.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/05.managing-project-access/shareButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/05.managing-project-access/shareButton.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/05.managing-project-access/shareCode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/05.managing-project-access/shareCode.png -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/07.Protocol/01.Overview/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Protocol Overview' 3 | process: 4 | twig: true 5 | --- 6 | 7 | ## MixPlay Protocol Overview 8 | 9 | Mixer's Interactive protocol is defined in a separate [document](/guides/mixplay/protocol/specification) that has precise implementation details. This section provides an introduction to the protocol. 10 | 11 | ### Wire Format 12 | The Interactive Service communicates using a protocol similar to [JSON-RPC](https://jsonrpc.org/historical/json-rpc-1-2-proposal.html), except that it is bi-directional. Clients and Servers can both call and respond to methods. 13 | 14 | The protocol operates over a standard WebSocket connection. Both [Participants](/guides/mixplay/interactive-overview#participants) and [Game Clients](/guides/mixplay/interactive-overview#the-game-client) use the same protocol definition, but different subsets of methods are available to each. 15 | 16 | ### Packets 17 | The protocol contains two types of packets: `methods` and `replies`. 18 | 19 | #### Method 20 | A method is a request for a connected entity to perform an operation. Methods are sent by both the client and the server. When a method is received, it is processed and acknowledged by the recipient, who can then reply to the method with a result or an error. 21 | 22 | A method can contain parameters which get provided to the recipient. 23 | 24 | Methods contain an additional property called `discard`, which when `true`, indicates that the recipient can choose not to respond. Methods that can be treated as events have the `discard` property set to `true`. 25 | 26 | #### Reply 27 | A reply is sent from a recipient back to the caller informing them about the result after executing the method that was sent. It can contain a `result` or an `error`, which indicates what went wrong. 28 | 29 | For full packet implementation details, please refer to the protocol specification, which you can download [here](/guides/mixplay/protocol/specification). 30 | 31 | ### Compression 32 | By default, packets on the wire are transmitted as plain text, but the Game Client can opt to use [GZIP](https://tools.ietf.org/html/rfc1952) or [LZ4](https://lz4.github.io/lz4/) compression. To do this, the Game Client must call a method providing its supported compression formats. The server will then respond with its chosen compression format. 33 | 34 | ### Authentication 35 | A Game Client needs to authenticate as a Mixer user when establishing an interactive session. There are two authentication methods available. 36 | 37 | #### OAuth 2.0 38 | Mixer supports [OAuth 2.0](https://tools.ietf.org/html/rfc6749) flows, which enable you to get a valid [OAuth 2.0 Bearer](https://tools.ietf.org/html/rfc6750) token. Tokens can be passed in the `Authorization` header when you initiate a connection to the interactive service. 39 | 40 | The only required scope for an interactive connection is `interactive:robot:self`. For more information about Mixer's OAuth, go to [OAuth reference page](/reference/oauth). 41 | 42 | #### XToken 43 | You can provide a Xbox Live XToken in the `Authorization` header when you initiate a connection to the interactive service. This authentication method is useful for Universal Windows Platform (UWP) applications that are Xbox Live enabled, as well as games on Xbox One. 44 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/07.Protocol/02.Specification/simplified-oauth.monopic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/07.Protocol/02.Specification/simplified-oauth.monopic -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/07.Protocol/02.Specification/state-diagram.monopic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/01.mixplay/07.Protocol/02.Specification/state-diagram.monopic -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/07.Protocol/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Protocol' 3 | redirect: 'guides/mixplay/protocol/overview' 4 | --- 5 | -------------------------------------------------------------------------------- /pages/01.guides/01.mixplay/landing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: MixPlay 3 | redirect: guides/mixplay/introduction 4 | icon: MixerSparksSolid 5 | icon_bg: gold 6 | --- 7 | 8 | # BOO 9 | 10 | This should redirect 11 | -------------------------------------------------------------------------------- /pages/01.guides/02.chat/01.Introduction/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Introduction' 3 | --- 4 | 5 | # Introduction 6 | 7 | On Mixer, when you visit a channel page you can send messages to the channel that all the viewers and the channel owner can read. With FTL this allows a streamer to react in near real-time to chat messages as they come in. 8 | 9 | Chat also fully supports developers, you can use our Chat APIs to get in on this action and contribute in a ton of meaningful ways to the chat experience. 10 | 11 | ## Tutorials 12 | 13 | We currently have one chat tutorial, it shows you how to setup a basic chat bot and can be found [here](/guides/chat/chatbot). Try it out. If you'd like to know how to do other things with out Chat API then [please open an issue](https://github.com/mixer/developer-docs/issues/new) and let us know! 14 | 15 | ## Reference Material 16 | 17 | If you'd like to jump in and get started you can also checkout our [Chat Reference material](/reference/chat) which details how you can write your own SDK implementation. 18 | 19 | 20 | -------------------------------------------------------------------------------- /pages/01.guides/02.chat/03.TroubleShooting/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Troubleshooting' 3 | --- 4 | # Troubleshooting 5 | 6 | ## Getting `UNOTFOUND` a lot? 7 | 8 | This error means that the chat server you're connecting to can't find a record of you when you try to authenticate. This can be caused by a number of reasons so make sure to check the following things: 9 | 10 | - That you're not confusing channelIds and userIds. These are two different numbers. 11 | - That the channel you're trying to connect to is valid and has not been suspended or banned. 12 | - That the **userId** you're passing in to the first argument of `auth` is the user that you have an OAuth token for and that it is **NOT** the User ID of the Channel you are trying to connect to. 13 | - That you've retrieved an authentication key from the `GET /chats/{channelId}` endpoint recently. Authentication keys expire after a short period. 14 | - That you're calling the auth method with 3 arguments that are not null in the following order: 15 | - The **channel** id of the channel you wish to chat in encoded as a **Number**. 16 | - The **user** id of the user you wish to chat as encoded as a **Number**. 17 | - An **authentication** key retrieved from `GET /chats/{channelId}`, where channelId matches the first argument. It should be encoded as a **String**. 18 | -------------------------------------------------------------------------------- /pages/01.guides/02.chat/04.Emotes/exampleEmote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/02.chat/04.Emotes/exampleEmote.png -------------------------------------------------------------------------------- /pages/01.guides/02.chat/landing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Chat 3 | icon: MixerChatSolid 4 | redirect: guides/chat/introduction 5 | icon_bg: blue 6 | --- 7 | # Chat 8 | 9 | Chat allows you to chat! 10 | 11 | -------------------------------------------------------------------------------- /pages/01.guides/03.core/02.BasicTutorial/runconfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/03.core/02.BasicTutorial/runconfig.png -------------------------------------------------------------------------------- /pages/01.guides/03.core/03.LiveUpdatesGuides/02.PatchingModelsGuide/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Patching Models from Live Updates 3 | --- 4 | # Patching Models from Live Updates 5 | 6 | With LiveUpdate events via Constellation it is common for the event payload to not contain the entire resource/model's properties. 7 | 8 | For example when a channel goes online you will get a `channel::update` event that has a payload similar to this: 9 | ```json 10 | { 11 | "online":true 12 | } 13 | ``` 14 | 15 | This is because this event is meant to be treated like a patch operation on an existing model. 16 | 17 | ## Handling Patches 18 | 19 | With this in mind to handle a patch-style event your application/code should do the following: 20 | 1. Use Mixer's REST API to fetch the Model in it's current state and cache this within Memory 21 | 2. Listen for Update events on this Model 22 | 3. When an update event comes in for the model, patch the properties onto the existing cached model. 23 | 24 | For example let's say you had Mixer's Channel in a cache: 25 | ```json 26 | { 27 | "id":123, 28 | "token":"Mixer", 29 | "online":false, 30 | .... rest of model 31 | } 32 | ``` 33 | 34 | When the above channel update event comes in you would merge the properties into Mixer's Channel Object. 35 | 36 | ```json 37 | { 38 | "id":123, 39 | "token":"Mixer", 40 | "online":false, => true 41 | .... rest of model 42 | } 43 | ``` 44 | Which would result in the new updated Channel Model: 45 | 46 | ```json 47 | { 48 | "id":123, 49 | "token":"Mixer", 50 | "online":true 51 | .... rest of model 52 | } 53 | ``` 54 | 55 | Additionally, the same can be said for any sub-objects within a Model, these should be merged across to, from the update payload. 56 | 57 | In many programming languages this is known as a deep merge. 58 | 59 | -------------------------------------------------------------------------------- /pages/01.guides/03.core/03.LiveUpdatesGuides/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Live Updates Guides 3 | process: 4 | markdown: true 5 | twig: true 6 | twig_first: true 7 | --- 8 | 9 | # Live Updates Guides 10 | 11 | Mixer's Core API has a Live Updates component which will send you events when certain items happen or change within Mixer's systems. You can use these to ensure your application is always up to date on what's happening on Mixer. 12 | 13 | ## Live Updates guides 14 | 15 | Below please find our Live Updates Guides and Tutorials: 16 | 17 | {% for p in page.children %} 18 | - [{{p.title}}]({{p.url}}) 19 | {% endfor %} 20 | 21 | 22 | ## More Information 23 | 24 | If you're looking for more information check out our [reference material](/reference/constellation/introduction). 25 | -------------------------------------------------------------------------------- /pages/01.guides/03.core/04.AdBreaks/doc.md: -------------------------------------------------------------------------------- 1 | # Ad-Break Trigger API (Beta) 2 | 3 | **Trigger an ad-break on a channel.** Ad-break includes a single ad up to 30s long. Ad-break can be triggered up to 2 times every 15 minutes (see errors below). Ad-Break can only be run on an online channel. Ad-Break is not supported during co-streams or while hosting a channel. 4 | 5 | ## Endpoint 6 | 7 | POST `/api/v2/ads/channels/{channelId}` 8 | 9 | ### Authentication 10 | 11 | OAuth required for scope `chat:ad_break` 12 | 13 | ### Request Body 14 | 15 | ```json 16 | { 17 | "requestId": "00000000-0000-0000-0000-000000000000" 18 | } 19 | ``` 20 | 21 | - `requestId` is any random GUID. 22 | 23 | ### Response 24 | 25 | | Response | Description | Example | 26 | | ----------- | ----------- | ----------- | 27 | | 200 | Success | `{ "id": {ChannelID}}` | 28 | | 400 | Bad Request (see chart below for error codes) | `{"errorCode": code, "errorMessage": "string"}` | 29 | | 401 | Unauthorized | N/A | 30 | | 403 | No permission to run ad | `{"errorCode": 42023, "errorMessage": "[Debug] The OAuth token is missing the chat:ad_break scope."}` | 31 | | 404 | Empty Response Body | N/A | 32 | | 429 | Throttled due to ad limit (2 every 15 minutes) | N/A | 33 | 34 | #### 400s Error Code Breakdown 35 | 36 | | Error Code | Description | String | 37 | | ----------- | ----------- | ----------- | 38 | | 42020 | Channel offline | "[Debug] Oops! You can't run ads while offline." | 39 | | 42002 | Channel not found | "[Debug] Channel not found." | 40 | | 42008 | Channel is co-streaming | "[Debug] Oops! You can't run ads while co-streaming." | 41 | | 42007 | Channel is hosting someone else| "[Debug] Oops! You can't run ads while hosting." | 42 | | 42004 | Feature not supported for channel | "[Debug] Oops! The ad break feature is not enabled for this channel." | 43 | | 42018 | Deserialization Failure | "[Debug] Invalid channelId in path" | 44 | | 42012 | Invalid Path Variable | "[Debug] The request body is invalid."| 45 | -------------------------------------------------------------------------------- /pages/01.guides/03.core/05.RateLimits/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Rate Limits' 3 | --- 4 | 5 | # Rate Limits 6 | 7 | Mixer's Core API has rate limiting in place to ensure service and platform stability. When making requests you should keep these limits in mind. The rate limits are structured into buckets. Each Bucket has its own limit and your requests contribute to the matching bucket for that endpoint. 8 | 9 | ## Buckets 10 | 11 | | Name | Request Count | Time Interval (in Seconds) | 12 | | ------------------ | ------------- | -------------------------- | 13 | | analytics | 100 | 60 | 14 | | channel-follow | 100 | 60 | 15 | | channel-read | 1000 | 300 | 16 | | channel-search | 20 | 5 | 17 | | channel-write | 250 | 300 | 18 | | chats | 500 | 60 | 19 | | contact | 3 | 60 | 20 | | global | 1000 | 60 | 21 | | ingest | 5 | 60 | 22 | | mail-subscribe | 3 | 60 | 23 | | notification-read | 100 | 60 | 24 | | report | 10 | 60 | 25 | | upload | 5 | 600 | 26 | | upload-interactive | 15 | 300 | 27 | | user-email | 2 | 86400 | 28 | | user-login | 50 | 60 | 29 | | user-login-failed | 8 | 900 | 30 | | user-read | 500 | 60 | 31 | | user-write | 100 | 60 | 32 | 33 | 34 | Endpoints within each Bucket can be called `Request Count` times per `Time Interval`. 35 | 36 | 37 | ## Exceeding Rate Limits 38 | 39 | When you exceed a rate limit you will see a `429 Too Many Requests`. 40 | 41 | If you are regularly exceeding our rate limits, first ensure that your calling pattern is optimized. Here are some things to try: 42 | - Adjust the interval at which you make requests. 43 | - Instead of polling, try using [Constellation for live updates](/guides/core/introduction#live-updates-via-constellation) 44 | 45 | 46 | ## Rate Limit Exceptions 47 | 48 | If your use case is unique or you'd like to discuss getting a rate limit exception, please reach out to our [Developer Inquiry Address](mailto:mixerdevinfo@microsoft.com). Fair warning though, we rarely grant these at this time. 49 | -------------------------------------------------------------------------------- /pages/01.guides/03.core/06.ContinuationTokens/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Continuation Tokens' 3 | --- 4 | 5 | # Continuation Tokens 6 | 7 | Continuation tokens are a method used for pagination in endpoints starting with V2. 8 | 9 | When you make a request to an endpoint that supports continuation tokens you will get the response and a continuation token back. This is usually found in the headers and often included in a link header. 10 | 11 | ## Example 12 | 13 | ```HTTP 14 | GET /api/v2/people HTTP/1.1 15 | Accept: application/json, */* 16 | Host: mixer.com 17 | link: ; rel="next" 18 | [ 19 | { 20 | "name":"Katie" 21 | }, 22 | { 23 | "name":"John" 24 | } 25 | ] 26 | ``` 27 | 28 | ## Pagination with Continuation Tokens 29 | 30 | To paginate with a continuation token, make the same request again but include the continuation token. The service will respond with the result and an additional continuation token. 31 | 32 | Keep making requests using the new continuation token that is returned until the response no longer has a continuation token. 33 | 34 | In Pseudocode: 35 | 36 | ``` 37 | FETCH THE ENDPOINT 38 | IF HTTP STATUS 200 39 | PROCESS THE RESPONSE BODY 40 | IF CONTINUATION TOKEN PRESENT 41 | FETCH ENDPOINT WITH NEW CONTINUATION TOKEN 42 | REPEAT 43 | ``` 44 | 45 | ## Link Headers 46 | Link headers are a standard header format defined in [RFC5988](https://tools.ietf.org/html/rfc5988). They're used to communicate various linking opportunities that a developer may have from a request that has just been made. In the above examples you'll see the `rel` property being set to "next" this means that the next page can be found with the preceding link. 47 | 48 | We recommend using software libraries or packages for your environment to parse these instead of rolling your own. You should treat these headers as opaque entities. 49 | 50 | A few examples of packages can be found below: 51 | - Node.js - [parse-link-header](https://www.npmjs.com/package/parse-link-header) 52 | - Java - There's a Parser in [`javax.ws.rs.core`](https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Link.html) 53 | - Do you know of More? [Make a PR to add them!](https://github.com/mixer/developer-docs) 54 | -------------------------------------------------------------------------------- /pages/01.guides/03.core/07.WhatsV2/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Whats V2?' 3 | --- 4 | 5 | # What's V2? 6 | 7 | With Season 2, You might have noticed some V2 endpoints appearing around Skills and Sparks Patronage. 8 | 9 | These endpoints are appearing as we adjust and add Mixer features as we grow. Usually when a V2 endpoint is announced it means that the V1 Endpoint is coming to the end of its life and that we'd like you to get onto the new endpoints as soon as you can. 10 | 11 | In all cases we'll be doing our best to ensure that developers have the appropriate time and documentation to ensure a smooth transition. 12 | 13 | With the launch of our new Developer Site you'll be able to read about Deprecations on our [Developer Orientated Blog](/content/blog). 14 | 15 | For now here's a list of questions you might have and some answers. If you have more [drop us a line](mailto:mixerdevinfo@microsoft.com). 16 | 17 | ## Is V2 tied to Season 2? 18 | 19 | No. Season 2 represented a lot of new work on the Mixer team and as a lot of this work was brand new we decided to write Season 2 endpoints in V2 to start with. 20 | 21 | ## Are all endpoints being Deprecated? 22 | 23 | No, this will be a gradual process. If a V2 endpoint is not available please continue to use the V1 path. 24 | 25 | ## Where are V2 Endpoints Located? 26 | 27 | V2 endpoints are located at exactly the same url as V1 endpoints. Just swap `v1` with `v2`. 28 | 29 | E.g. `https://mixer.com/api/v2/potato` 30 | 31 | ## What do I do if I have a question ? 32 | If you have any additional questions about V2 of our endpoints please feel free to [contact us](mailto:mixerdevinfo@microsoft.com). 33 | -------------------------------------------------------------------------------- /pages/01.guides/03.core/08.ApplicationIdentification/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Application Identification' 3 | --- 4 | # Application Identification 5 | 6 | Many applications and developers consume Mixer's APIs daily. To assist us in locating information about potential issues you may have we advise that you identify your application or platform to us through Application Identification. 7 | 8 | To do this you need to include some form of Identification with your requests / connections. In some cases these are required by the service or endpoint due to the scenario you are using, for example OAuth Authentication, but in other cases this is an **optional** enhancement which will enable us to help you better. 9 | 10 | In the future Mixer's APIs may change and require you to include these and as such it is our recommendation that you add these identifiers wherever possible whenever you can. Should these become required in the future we will notify you before this happens. 11 | 12 | 13 | For each area of Mixer there is a slightly different recommendation, please see the items below for guidance on each area: 14 | 15 | ## REST, Chat & Constellation 16 | 17 | For REST, Chat and Constellation the identification method is the same: 18 | 1. Include a standard `User-Agent` header with a value that matches your Application / Company name. For example Mixer might use "Mixer Mobile App / 1.2.3" for version 1.2.3 of its mobile application. You can read more about User-Agent headers [here](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent?target=_blank). This can be used for us to help you identify what area of your products or services are experiencing issues. 19 | 1. If you're using OAuth you can specify a `Client-ID` header with a value that matches your OAuth Application's Client ID. This will identify to us who you are as we can lookup your OAuth Application information from your Client ID. 20 | 21 | 22 | ## MixPlay 23 | Due to the nature of how MixPlay works there is no need to carry out any additional steps to identify a MixPlay Application. A standard connection will provide us with all of the information about your application that we require. 24 | -------------------------------------------------------------------------------- /pages/01.guides/03.core/09.FAQ/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FAQ 3 | --- 4 | 5 | # Frequently Asked Questions 6 | 7 | ## How do I get a list of channels playing a game? 8 | 9 | On Mixer the game a channel is playing is called a "type" this is because we have non-gaming listings within our site such as IRL and Art. 10 | 11 | To find a list of channels playing a game first find its typeId using the [query parameter of the types endpoint](https://dev.mixer.com/rest/index.html#types_get?target=_blank). 12 | 13 | Once you have its id use it to filter the channels list using the [channels endpoint's `where` parameter](https://dev.mixer.com/rest/index.html#channels_get?target=_blank). 14 | 15 | Here's a final example url for Minecraft: `https://mixer.com/api/v1/channels?where=typeId:eq:127929` 16 | 17 | ## How do I find out if someone is following a channel? 18 | 19 | Use the [relationship endpoint](https://dev.mixer.com/rest/index.html#channels__channelId__relationship_get?target=_blank) to find the follow state and roles of a user for a channel. 20 | 21 | ## Why am I getting a CSRF Token Error? 22 | 23 | CSRF(Cross-Site Request Forgery) is an attack that can force you to perform actions on a site, CSRF Tokens prevent this. Mixer.com handles CSRF Tokens automatically but as a Mixer Developer you should not be seeing this message. If you're receiving it then check the following: 24 | - If you're authenticating with this request check that you're formatting the header correctly: 25 | - The Authorization header is `Authorization` not `Auth` or `Authentication` 26 | - The Header value should be `Bearer ` 27 | - If you're not authenticating, ensure that you're **Not** providing an Authentication header. 28 | -------------------------------------------------------------------------------- /pages/01.guides/03.core/landing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Core 3 | icon: News 4 | icon_bg: pink 5 | redirect: guides/core/introduction 6 | --- 7 | -------------------------------------------------------------------------------- /pages/01.guides/04.test-streams/01.introduction/enable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/04.test-streams/01.introduction/enable.png -------------------------------------------------------------------------------- /pages/01.guides/04.test-streams/02.FAQ/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'FAQ' 3 | --- 4 | 5 | # Frequently Asked Questions 6 | 7 | ### What does Mixer's Test Streaming protect? 8 | 9 | Whilst enabled, Test Streaming will protect the following items whilst it is enabled: 10 | - Your Channel's Video Broadcast 11 | - Your Channel's Chat Activity 12 | 13 | ### Which platforms support Test Streams? 14 | 15 | Test Streams are currently supported on: 16 | - Desktop Web 17 | - Mobile Web 18 | - Xbox 19 | 20 | ### Does Test Streaming work with Native Broadcasting on Windows 10 and Xbox? 21 | 22 | Yes! 23 | 24 | ### Do Test Streams work with Co-Streaming? 25 | 26 | Not at this time. 27 | 28 | ### How does Test Streaming work with Xbox Developer Accounts / Developer Kits? 29 | 30 | To test with accounts from your sandbox, you can add this query parameter: `sandbox=` to the URL. For instance: `https://mixer.com/?sandbox=XDKS.1` 31 | 32 | **IMPORTANT: Sandbox IDs are case sensitive!** Note: the uppercase in "XDKS.1". "xdks.1" will not work! 33 | 34 | This will allow you to log into Mixer with your Xbox Live test accounts. 35 | 36 | To log in: 37 | 38 | 1. Click the Login button in the upper, right. 39 | 1. In the dialog, click the Log in with your Microsoft account button. 40 | 1. This will show a second dialog where you can enter your credentials for your Xbox Live test account. 41 | 42 | If you encounter this error message `There was an error logging you in: Content isolation not authorized.` make sure you are not logged into Mixer in another tab or browser with a non-sandbox account. The easiest way to get around this is to open an in-private browser session. 43 | 44 | If your Xbox Account is **not** in the following Sandboxes: 45 | 46 | - RETAIL 47 | - MSFT.1 48 | - MSFT.DEBUG 49 | - WJPTRC.0 50 | 51 | Then when broadcasting your account will automatically be put into test stream mode. This will protect your project. 52 | 53 | ### Can I use Test Streaming for a Private or Ticketed Event/Conference/Presentation? 54 | 55 | No, this is not supported. Mixer is not a platform for Private content. 56 | 57 | ### I'm a Mixer Partner can I use Test Streaming? 58 | 59 | Yes, read [this article for more information](https://watchbeam.zendesk.com/hc/en-us/articles/360000169791-Test-Streams-for-Partners). 60 | 61 | 62 | ### Can the link to access the test stream be generated before I go Live? 63 | 64 | No, this is unfortunately not possible. 65 | -------------------------------------------------------------------------------- /pages/01.guides/04.test-streams/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Test Streams' 3 | icon: MixerSettingsSolid 4 | icon_bg: red 5 | redirect: 'guides/test-streams/introduction' 6 | --- 7 | 8 | -------------------------------------------------------------------------------- /pages/01.guides/05.embeds/01.introduction/doc.md: -------------------------------------------------------------------------------- 1 | # Embeds 2 | 3 | Mixer provides a set of embeddable components so that you can bring parts of the Mixer platform to your website. 4 | 5 | The parts included are: 6 | - The Video Player 7 | - Chat 8 | 9 | ## Getting an Embed URL 10 | 11 | To get the embed URL for a channel simply add the Channel's name to the following URLS where it says ``: 12 | - For the Video Player: https://mixer.com/embed/player/ 13 | - For Chat: https://mixer.com/embed/chat/ 14 | 15 | ## Adding the Embed 16 | 17 | Once you have a URL just create a HTML `iframe` with the `src` property set to the url. For example: 18 | ```html 19 | 20 | ``` 21 | Would embed the Mixer Channel's Video Player. 22 | 23 | ## Video Options 24 | 25 | For the video player you can provide extra query parameters on the URL to control various settings of the embed: 26 | - `disableCostream` - Set this to true to prevent the Embed from displaying CoStreams. 27 | - `disableLowLatency` - Set this to true to disable FTL Playback. This will make the video playback in HLS instead. 28 | - `muted` - Set this to true to mute the video player on load. 29 | - `vod` - Provide a VOD Id here to Embed a VOD. 30 | - `t` - Provide a time here to skip to this time within the vod. 31 | - `disableLinks` - Set this to true to prevent links within the Embed. 32 | - `hideChannel` - Set this to true to hide the channel/"Watch on Mixer" link for this embed. 33 | 34 | 35 | # Chat Options 36 | 37 | For the Chat Embed you can provide extra query parameters on the URL to control various settings of the embed: 38 | - `composer` - Set this to false to hide the composition/text entry part of chat. This also hides the viewer count. 39 | 40 | 41 | # Embed Styling & Sizing 42 | As our embeds are just iframes you can style them using CSS. Give them an HTML class or ID and then write rules for them. If you set the IFrame's size the embed will automatically adjust to reflect the new size. A good set of standard styling is: 43 | 44 | ```css 45 | iframe { 46 | border: 0px; 47 | overflow: hidden; 48 | } 49 | ``` 50 | This removes the default grey border most browsers will give iframes and prevent any scrollbars from appearing which can look unsightly. 51 | -------------------------------------------------------------------------------- /pages/01.guides/05.embeds/02.FAQ/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title:'FAQ' 3 | --- 4 | 5 | # FAQ 6 | 7 | ## I'm having trouble getting Embeds working with my Android App, What can I do? 8 | 9 | Assuming you're using a standard Android WebView try enabling domStorage on it, as our embed uses localstorage to remember some settings. 10 | 11 | To do this set the `domStorageEnabled` property on your webview's settings object to true. E.g.: 12 | ```Java 13 | myWebView.settings.domStorageEnabled = true 14 | ``` 15 | -------------------------------------------------------------------------------- /pages/01.guides/05.embeds/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Embeds' 3 | icon: MixerOnDemandVideo 4 | icon_bg: rose 5 | redirect: '/guides/embeds/introduction' 6 | --- 7 | 8 | -------------------------------------------------------------------------------- /pages/01.guides/06.season2/02.faq/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Frequently Asked Questions' 3 | --- 4 | 5 | # FAQ 6 | 7 | ## Can I make my Own Skills? 8 | 9 | We're reviewing how to make this a possibility, stand by for further news. 10 | 11 | ## Does MixPlay count to Spark Patronage? 12 | 13 | YES!! 14 | 15 | ## What's V2? 16 | 17 | Take a look at [our guide](/guides/core/whatsv2). 18 | -------------------------------------------------------------------------------- /pages/01.guides/06.season2/04.embers/attribution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/06.season2/04.embers/attribution.png -------------------------------------------------------------------------------- /pages/01.guides/06.season2/04.embers/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Embers 3 | --- 4 | 5 | # Embers 6 | 7 | ![](https://static.mixer.com/img/design/ui/embers/ember_48_4x.png?classes=centered) 8 | 9 | !!! If you haven't already we suggest reading our [blog post](https://blog.mixer.com) first. 10 | 11 | Back in November 2018 we introduced the first phase of [Season 2](https://blog.mixer.com/2018/11/01/season-2/) and now we're launching the next phase with Embers. 12 | 13 | Embers are Mixer's new paid virtual currency. Users can purchase embers and then use them on Premium Skills on partnered channels on Mixer. As with the launch of Season 2, we understand that **developers** may have questions and we'll be answering them on this page. 14 | 15 | ## Skills 16 | 17 | With the launch of embers we've added a new collection of Premium Skills. These Skills cost a varying amount of embers and are visually different from Spark based Skills. 18 | 19 | ### Attribution 20 | 21 | One of the key changes with embers is that the use of an Ember's Skill can be accompanied by a message from the user that purchased the Ember Skill. This allows users to send a short message to the streamer with their Ember Skill. This message is shown in chat for the whole audience to see. 22 | 23 | Higher priced ember skills are more noticeable in chat. 24 | 25 | ![](./attribution.png) 26 | 27 | 28 | ### Effects 29 | 30 | Ember effects have the ability to be drawn over the channel page's video area which give them a lot more space to animate over. 31 | 32 | As with Spark Effects, Ember Effects generate a ["SkillAttribution"](/reference/chat/events/skillattribution) Chat Event. This event indicates that the currency is "Embers" within the skill object. 33 | 34 | ### Stickers 35 | 36 | Ember Stickers come in two varieties: 37 | 38 | - Holographic - These stickers shine and shimmer within chat 39 | - Animated - These stickers are fully animated. 40 | 41 | ![](./sticker.gif) 42 | 43 | Ember Stickers are sent through Chat as a [ChatMessage](/reference/chat/events/chatmessage). You can identify an Ember sticker by looking at the "skill" property within the message meta data. If the currency is "Embers" then the sticker is an ember sticker. 44 | 45 | Ember stickers will also have a regular message fragment within the message array. This message is passed through CATBot before being sent. 46 | 47 | ## Moderation 48 | 49 | Ember Skills can be moderated identically to regular skills with: 50 | [cancelSkill](/reference/chat/methods/cancelskill). 51 | 52 | ## FAQ 53 | 54 | ### Can I use Embers within MixPlay? 55 | 56 | Not today, we're looking for ways to make this a possibility in the future though. Standby for updates. 57 | 58 | ### Can I use Embers within my Third Party Product? 59 | 60 | Not today, we're looking for ways to make this a possibility in the future though. Standby for updates. 61 | 62 | ### What do I do if I have more questions? 63 | 64 | If you have **developer** related questions please [drop us a line](mailto:mixerdevinfo@microsoft.com). For **all** other queries. [mixer.com/contact](https://mixer.com/contact). 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /pages/01.guides/06.season2/04.embers/sticker.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/06.season2/04.embers/sticker.gif -------------------------------------------------------------------------------- /pages/01.guides/06.season2/05.leaderboards/doc.md: -------------------------------------------------------------------------------- 1 | # Leader Boards 2 | 3 | Formal REST documentation for Spark and Ember leader boards is coming soon but we've noticed some developers using them in their products and tools so we wanted to provide some preliminary documentation to help you out. 4 | 5 | ## Endpoint 6 | 7 | GET `/api/v2/leaderboards/{type}/channels/{channelId}` 8 | 9 | You can pass a query paramter of `limit` to determine how many entries to return. The default is `10` and the maximum is `100`. 10 | 11 | Type must be one of the leader board types as specified below: 12 | 13 | ### Leader Board Types 14 | 15 | - Sparks 16 | - `sparks-weekly` - Users ranked by the sparks they have given this week. 17 | - `sparks-monthly` - Users ranked by the sparks they have given this month. 18 | - `sparks-yearly` - Users ranked by the sparks they have given this Year. 19 | - `sparks-alltime` - Users ranked by the sparks they have given since Leaderboards Launched. 20 | - Embers 21 | - `embers-weekly` - Users ranked by the embers they have given this week. 22 | - `embers-monthly` - Users ranked by the embers they have given this month. 23 | - `embers-yearly` - Users ranked by the embers they have given this year. 24 | - `embers-alltime` - Users ranked by the embers they have given since the launch of Embers. 25 | 26 | ### Response 27 | 28 | The response is an array of leaderboard entries with the following fields: 29 | 30 | - `userId` - The UserId of the person in the leaderboard 31 | - `username` - Username of the person in the leaderboard 32 | - `statValue` - The amount of sparks or embers the user has contributed. 33 | - `avatarUrl` - A link to the user's avatar. 34 | 35 | ### Example 36 | 37 | ```json 38 | [ 39 | { 40 | "userId":"1234567", 41 | "username":"Connor", 42 | "statValue":9001, 43 | "avatarUrl":"https://uploads.beam.pro/avatar/asg4whr9-146.jpg" 44 | }, 45 | .... 46 | ] 47 | ``` 48 | -------------------------------------------------------------------------------- /pages/01.guides/06.season2/07.Channel Progression/badges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/01.guides/06.season2/07.Channel Progression/badges.png -------------------------------------------------------------------------------- /pages/01.guides/06.season2/landing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Season 2' 3 | icon: MixerSparksSolid 4 | icon_bg: gold 5 | redirect: '/guides/season2/introduction' 6 | --- 7 | 8 | -------------------------------------------------------------------------------- /pages/01.guides/landing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Guides 3 | routable: false 4 | --- 5 | 6 | # Guides 7 | 8 | Mixer Interactive enables viewers, also known as participants, to directly control the environment in and around streamer’s broadcasts by interacting with user interface controls. When a broadcast has interactivity enabled, controls appear beneath the video on the viewer’s screen. These controls dynamically change according to live events and update in response to different situations that occur within the broadcast. 9 | 10 | Developers and producers can create interactive experiences which can run as a part of a game, entirely as a standalone application, or as a tool. These experiences are then used by broadcasters to make their broadcasts interactive. 11 | 12 | When a viewer interacts with the controls, their input is sent directly to the experience, allowing the developers to see exactly who is interacting and what they are doing. This level of engagement allows for the creation of truly unique and interactive experiences that let viewers and broadcasters experience Mixer broadcasts on a whole new level. 13 | 14 | ## Introduction 15 | 16 | Mixer Interactive enables viewers, also known as participants, to directly control the environment in and around streamer’s broadcasts by interacting with user interface controls. When a broadcast has interactivity enabled, controls appear beneath the video on the viewer’s screen. These controls dynamically change according to live events and update in response to different situations that occur within the broadcast. 17 | 18 | Developers and producers can create interactive experiences which can run as a part of a game, entirely as a standalone application, or as a tool. These experiences are then used by broadcasters to make their broadcasts interactive. 19 | 20 | When a viewer interacts with the controls, their input is sent directly to the experience, allowing the developers to see exactly who is interacting and what they are doing. This level of engagement allows for the creation of truly unique and interactive experiences that let viewers and broadcasters experience Mixer broadcasts on a whole new level. -------------------------------------------------------------------------------- /pages/02.reference/01.chat/01.introduction/doc.md: -------------------------------------------------------------------------------- 1 | # Chat 2 | 3 | ## Introduction 4 | 5 | Our chat servers use a standard secure websocket protocol `wss://`. For each channel that you connect to, you will need a separate WebSocket as each WebSocket can only receive and send messages to one channel. 6 | 7 | Messages are sent and received asynchronously in standard JSON in the form of packets. 8 | 9 | ## Packets 10 | There are 3 types of packets sent over the socket: [method](methods), [reply](methods), and [event](events) packets. The former two are typical RPC-style packets; think of sending them as calling a function or method and getting a return value back, but over the network. 11 | 12 | We go into more detail below, but a typical exchange between the server and client might look like this: 13 | ``` 14 | Client: {"type":"method","method":"auth","arguments":[1,1,"fc3f865c156f32cac0755cde007654a8"],"id":0} 15 | Server: {"type":"reply","error":null,"id":0,"data":{"authenticated":true,"roles":["Owner"]}} 16 | Client: {"type":"method","method":"msg","arguments":["Hello world :)"],"id":2} 17 | Server: {"type":"reply","error":null,"id":2,"data":{"channel":1,"id":"6351f9e0-3bf2-11e6-a3b3-bdc62094c158","user_name":"connor","user_id":1,"user_roles":["Owner"],"message":{"message":[{"type":"text","data":"Hello world ","text":"Hello world!"}],"meta":{}}}} 18 | Server: {"type":"event","event":"ChatMessage","data":{"channel":1,"id":"6351f9e0-3bf2-11e6-a3b3-bdc62094c158","user_name":"connor","user_id":1,"user_roles":["Owner"],"message":{"message":[{"type":"text","data":"Hello world ","text":"Hello world!"}],"meta":{}}}} 19 | ``` 20 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/02.connection/doc.md: -------------------------------------------------------------------------------- 1 | # Connection 2 | Connecting to Chat for a Mixer Channel currently requires one WebSocket Connection per Mixer Channel. 3 | 4 | ## Prerequisites 5 | To connect to chat for a single channel, you'll first need to retrieve some connection details from our REST API. You can do this by calling the `GET /chats/{channelId}` REST endpoint where channelId is the channel id of the channel you wish to join and chat in. 6 | 7 | You can find your channel id by going to `https://mixer.com/api/v1/channels/?fields=id` in your browser, replacing username with your Mixer username. 8 | 9 | When requesting the channel connection details if you provide a source of Authentication, such as an OAuth Access Token, you will receive an `authkey`, the authkey is a short lived token which should only be used once to immediate call the Chat [`auth`](/reference/chat/methods/auth) method when you open the websocket connection. It should only be used for chat and is invalid for any other API. 10 | 11 | This is what a typical **authenticated** response from the `GET /chats/{channelId}` endpoint looks like: 12 | 13 | ``` 14 | HTTP/1.1 200 OK 15 | Connection: keep-alive 16 | Content-Type: application/json; charset=utf-8 17 | Date: Sun, 26 Jun 2016 22:50:41 GMT 18 | 19 | { 20 | "authkey": "b41e9ae6b14df18c59f415419b1f827c", 21 | "endpoints": [ 22 | "wss://chat.mixer.com:443" 23 | ], 24 | "permissions": [ 25 | "chat", 26 | "connect", 27 | "poll_vote" 28 | ] 29 | } 30 | ``` 31 | 32 | 33 | This is what a typical **unauthenticated** response from the `GET /chats/{channelId}` endpoint looks like, you'll notice the `authkey` is missing: 34 | 35 | ``` 36 | HTTP/1.1 200 OK 37 | Connection: keep-alive 38 | Content-Type: application/json; charset=utf-8 39 | Date: Sun, 26 Jun 2016 22:50:41 GMT 40 | 41 | { 42 | "endpoints": [ 43 | "wss://chat.mixer.com:443" 44 | ], 45 | "permissions": [ 46 | "chat", 47 | "connect", 48 | "poll_vote" 49 | ] 50 | } 51 | ``` 52 | 53 | If you want to speak in chat you will need to ensure you have `authkey`. 54 | 55 | 56 | ## Opening a Connection 57 | Once you have the details, you'll need to use them to connect to a chat server. 58 | 59 | The response's endpoints array contains a list of chat servers. You should connect to the first element in the array and if this fails fallback to subsequent elements if they are available. Once an address is selected, open a websocket connection to the address that is chosen. 60 | 61 | When connecting to the chat socket, please pass your OAuth application's Client ID within the Client-ID header (or as a query parameter). 62 | 63 | Our official SDKs add this header for you; please refer to our Chat Tutorials for more information. 64 | 65 | ## Participating in Chat 66 | 67 | After connecting to a server you must call the [auth](/reference/chat/methods/auth) method. You can call this with authentication details or anonymously its up to you. 68 | 69 | But to participate and send messages in chat you must provide an `authkey` from the request mentioned above. 70 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/01.auth/doc.md: -------------------------------------------------------------------------------- 1 | # Auth 2 | 3 | Authenticate as an active user in a specified channel. Arguments are `channelId`, `userId`, `key`. You can connect anonymously by supplying just the `channnelId` as an argument, but if you do this you will not be able to send messages or participate in chat. This can be useful for creating chat overlays. 4 | 5 | # Arguments 6 | 7 | 1. The **channel ID** of the channel you are joining. 8 | 1. The **user ID** of the user you are connecting as. This can be omitted if you are connecting anonymously. 9 | 1. The **authorization key** retrieved from a request to our REST API, as explained in the [Connection](/reference/chat/connection) section. This can be omitted if you are connecting anonymously. 10 | 1. The **test stream access key** used to join the channel. This final argument is completely optional, and should only be provided if you wish to join a channel actively in a Test Stream. 11 | 12 | ## Examples 13 | 14 | ### Authenticating Successfully 15 | 16 | #### Request 17 | 18 | ```json 19 | { 20 | "type": "method", 21 | "method": "auth", 22 | "arguments": [12345, 54321, "key"], 23 | "id": 0 24 | } 25 | ``` 26 | 27 | #### Response 28 | 29 | ```json 30 | { 31 | "type": "reply", 32 | "error": null, 33 | "id": 0, 34 | "data": { 35 | "authenticated": true, 36 | "roles": ["Owner"] 37 | } 38 | } 39 | ``` 40 | 41 | ### Authenticating Anonymously 42 | 43 | #### Request 44 | 45 | ```json 46 | { 47 | "type": "method", 48 | "method": "auth", 49 | "arguments": [12345], 50 | "id": 0 51 | } 52 | ``` 53 | 54 | #### Response 55 | 56 | ```json 57 | { 58 | "authenticated": false, 59 | "roles": [] 60 | } 61 | ``` 62 | 63 | ### An Unsuccessful Authentication Attempt 64 | 65 | #### Request 66 | 67 | ```json 68 | { 69 | "type": "method", 70 | "method": "auth", 71 | "arguments": [12345, 12345, "Not an AuthKey"], 72 | "id": 0 73 | } 74 | ``` 75 | 76 | #### Response 77 | 78 | ```json 79 | { 80 | "type": "reply", 81 | "error": "UNOTFOUND", 82 | "id": 0 83 | } 84 | ``` 85 | 86 | ### Test Streams 87 | 88 | Attempting to join a channel currently in Test Stream mode with an invalid or missing access key. 89 | 90 | #### Request 91 | 92 | ```json 93 | { 94 | "type": "method", 95 | "method": "auth", 96 | "arguments": [12345, 12345, "authkey"], 97 | "id": 0 98 | } 99 | ``` 100 | 101 | #### Response 102 | 103 | ```json 104 | { 105 | "type": "reply", 106 | "error": "UACCESS", 107 | "id": 0 108 | } 109 | ``` 110 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/02.msg/doc.md: -------------------------------------------------------------------------------- 1 | # MSG 2 | 3 | Send a chat message to the server. The server will reply with data identical to a [ChatMessage](#chat__events__) event. 4 | 5 | ## Permissions 6 | 7 | To send a chat message you must use a valid OAuth token with the `chat:chat` scope. 8 | 9 | ## Arguments 10 | 11 | 1. The message to send, as a string. 12 | 13 | ## Examples 14 | 15 | ### Request 16 | 17 | ```json 18 | { 19 | "type": "method", 20 | "method": "msg", 21 | "arguments": ["Hello World!"], 22 | "id": 2 23 | } 24 | ``` 25 | 26 | ### Response 27 | 28 | ```json 29 | { 30 | "type": "reply", 31 | "error": null, 32 | "id": 2, 33 | "data": { 34 | "channel": 12345, 35 | "id": "06cba8a0-3a4a-11e6-b410-e9a72fcede64", 36 | "user_name": "username", 37 | "user_id": 12345, 38 | "user_level": 5, 39 | "user_avatar": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 40 | "user_roles": ["User"], 41 | "message": { 42 | "message": [ 43 | { 44 | "type": "text", 45 | "data": "Hello World!", 46 | "text": "Hello World!" 47 | } 48 | ], 49 | "meta": {} 50 | } 51 | } 52 | ``` 53 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/03.whisper/doc.md: -------------------------------------------------------------------------------- 1 | # Whisper 2 | 3 | Send a whisper to another user in the chat. 4 | 5 | ## Permissions 6 | 7 | To send a chat whisper you must use a valid OAuth token with the `chat:whisper` scope. 8 | 9 | ## Arguments 10 | 11 | 1. The username of the user that the whisper will be sent to. 12 | 1. The whisper's message. 13 | 14 | ## Examples 15 | 16 | ### Request 17 | 18 | ```json 19 | { 20 | "type": "method", 21 | "method": "whisper", 22 | "arguments": ["targetUsername", "message"], 23 | "id": 5 24 | } 25 | ``` 26 | 27 | ### Response 28 | 29 | ```json 30 | { 31 | "type": "reply", 32 | "error": null, 33 | "id": 5, 34 | "data": { 35 | "channel": 12345, 36 | "id": "077e31c0-3a34-11e6-89dd-6363b2f3be15", 37 | "user_name": "username", 38 | "user_id": 12345, 39 | "user_roles": ["User"], 40 | "user_level": 5, 41 | "user_avatar": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 42 | "message": { 43 | "message": [ 44 | { 45 | "type": "text", 46 | "data": "hi", 47 | "text": "hi" 48 | } 49 | ], 50 | "meta": { 51 | "whisper": true 52 | } 53 | }, 54 | "target": "username" 55 | } 56 | } 57 | } 58 | ``` 59 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/04.vote-choose/doc.md: -------------------------------------------------------------------------------- 1 | # vote:choose 2 | 3 | Cast a vote in the current poll. 4 | 5 | ## Permissions 6 | 7 | To vote on a poll you must use a valid OAuth token with the `chat:poll_vote` scope. 8 | 9 | ## Arguments 10 | 11 | 1. The numerical index of the option that the vote is being cast for. 12 | 13 | ## Examples 14 | 15 | ### Request 16 | 17 | ```json 18 | { 19 | "type": "method", 20 | "method": "vote:choose", 21 | "arguments": [0], 22 | "id": 3 23 | } 24 | ``` 25 | 26 | ### Response 27 | 28 | ```json 29 | { 30 | "type": "reply", 31 | "error": null, 32 | "id": 3, 33 | "data": true 34 | } 35 | ``` 36 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/05.vote-start/doc.md: -------------------------------------------------------------------------------- 1 | # vote:start 2 | 3 | Start a poll in the channel. 4 | 5 | ## Permissions 6 | 7 | To vote on a poll you must use a valid OAuth token with the `chat:poll_vote` scope. 8 | 9 | ## Arguments 10 | 11 | 1. The poll's question. 12 | 1. An array of possible options. 13 | 1. The duration of the poll, in seconds. 14 | 15 | ## Examples 16 | 17 | ### Request 18 | 19 | ```json 20 | { 21 | "type": "method", 22 | "method": "vote:start", 23 | "arguments": ["Turkey or Ham?", ["Turkey", "Ham"], 30], 24 | "id": 3 25 | } 26 | ``` 27 | 28 | ### Response 29 | 30 | ```json 31 | { 32 | "type": "reply", 33 | "error": null, 34 | "id": 3, 35 | "data": "Poll started." 36 | } 37 | ``` 38 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/06.timeout/doc.md: -------------------------------------------------------------------------------- 1 | # Timeout 2 | 3 | Time a user out and purge their chat messages. They cannot send messages until the duration is over. The user being timed out must be in the channel. 4 | 5 | ## Permissions 6 | 7 | To time a user out you must use a valid OAuth token with the `chat:timeout` scope. 8 | 9 | ## Arguments 10 | 11 | 1. The username of the user who will be timed out. 12 | 1. The duration for which the user will be unable to send messages. A human-readable duration with units can be provided (such as `30s` or `1m15s`), or providing no unit will result in the value being taken as seconds. You can also use the string `clear` to clear a timeout. 13 | 14 | ## Examples 15 | 16 | ### Request 17 | 18 | ```json 19 | { 20 | "type": "method", 21 | "method": "timeout", 22 | "arguments": ["username", "30s"], 23 | "id": 4 24 | } 25 | ``` 26 | 27 | ### Response 28 | 29 | ```json 30 | { 31 | "type": "reply", 32 | "error": null, 33 | "id": 4, 34 | "data": "username has been timed out for 30s." 35 | } 36 | ``` 37 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/07.purge/doc.md: -------------------------------------------------------------------------------- 1 | # Purge 2 | 3 | Purge a user's messages from that chat without timing them out. 4 | 5 | ## Permissions 6 | 7 | To purge a user out you must use a valid OAuth token with the `chat:purge` scope. 8 | 9 | ## Arguments 10 | 11 | 1. The username of the user to purge. 12 | 13 | ## Examples 14 | 15 | ### Request 16 | 17 | ```json 18 | { 19 | "type": "method", 20 | "method": "purge", 21 | "arguments": ["connor123"], 22 | "id": 5 23 | } 24 | ``` 25 | 26 | ### Response 27 | 28 | ```json 29 | { 30 | "type": "reply", 31 | "error": null, 32 | "id": 5 33 | } 34 | ``` 35 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/08.deleteMessage/doc.md: -------------------------------------------------------------------------------- 1 | # Delete Message 2 | 3 | Delete a message from chat. 4 | 5 | ## Permissions 6 | 7 | To delete a chat message you must use a valid OAuth token with the `chat:remove_message` scope. 8 | 9 | ## Arguments 10 | 11 | 1. The `id` property of the message to delete. 12 | 13 | ## Examples 14 | 15 | ### Request 16 | 17 | ```json 18 | { 19 | "type": "method", 20 | "method": "deleteMessage", 21 | "arguments": ["8e07a0b0-3a2e-11e6-a9ef-0b7037d1fbdd"], 22 | "id": 10 23 | } 24 | ``` 25 | 26 | ### Response 27 | 28 | ```json 29 | { 30 | "type": "reply", 31 | "error": null, 32 | "id": 10, 33 | "data": "Message deleted." 34 | } 35 | ``` 36 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/09.clearMessages/doc.md: -------------------------------------------------------------------------------- 1 | # ClearMessages 2 | 3 | Clear all chat messages in the channel. 4 | 5 | ## Permissions 6 | 7 | To clear all chat messages in a channel you must use an OAuth token with the `chat:clear_messages` scope. 8 | 9 | ## Arguments 10 | 11 | ## Examples 12 | 13 | ### Request 14 | 15 | ```json 16 | { "type": "method", "method": "clearMessages", "arguments": [], "id": 11 } 17 | ``` 18 | 19 | ### Response 20 | 21 | ```json 22 | { "type": "reply", "error": null, "id": 11, "data": "Messages cleared." } 23 | ``` 24 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/10.history/doc.md: -------------------------------------------------------------------------------- 1 | # History 2 | 3 | Request previous messages from this chat from before you joined. 4 | 5 | ## Arguments 6 | 7 | 1. The number of messages to request. The maximum value is `100`. 8 | 9 | ## Examples 10 | 11 | ### Request 12 | 13 | ```json 14 | { "type": "method", "method": "history", "arguments": [1], "id": 1 } 15 | ``` 16 | 17 | ### Response 18 | 19 | ```json 20 | { 21 | "type": "reply", 22 | "error": null, 23 | "id": 1, 24 | "data": [ 25 | { 26 | "channel": 12345, 27 | "id": "8e07a0b0-3a2e-11e6-a9ef-0b7037d1fbdd", 28 | "user_name": "username", 29 | "user_id": 186526, 30 | "user_roles": ["User"], 31 | "message": { 32 | "message": [ 33 | { 34 | "type": "text", 35 | "data": "historic message", 36 | "text": "historic message" 37 | } 38 | ], 39 | "meta": {} 40 | } 41 | } 42 | ] 43 | } 44 | ``` 45 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/11.giveawaystart/doc.md: -------------------------------------------------------------------------------- 1 | # giveaway:start 2 | 3 | Start a giveaway in the channel. After sending this method, the 'HypeBot' user will publicly announce the winner of the giveaway, who will be randomly selected. 4 | 5 | ## Permissions 6 | 7 | To start a giveaway you must use an OAuth token with the `chat:giveaway_start` scope. 8 | 9 | ## Examples 10 | 11 | ### Request 12 | 13 | ```json 14 | { "type": "method", "method": "giveaway:start", "arguments": [], "id": 11 } 15 | ``` 16 | 17 | ### Response 18 | 19 | ```json 20 | { "type": "reply", "error": null, "id": 11, "data": "Starting a giveaway" } 21 | ``` 22 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/12.ping/doc.md: -------------------------------------------------------------------------------- 1 | # ping 2 | 3 | A ping method. This should be used in environments that do not support Native WebSocket Pings. An example of this is Chat implementations in with a web browser. 4 | 5 | ## Example 6 | 7 | ### Request 8 | 9 | ```json 10 | { "type": "method", "method": "ping", "arguments": [], "id": 12 } 11 | ``` 12 | 13 | ### Response 14 | 15 | ```json 16 | { "type": "reply", "error": null, "id": 12 } 17 | ``` 18 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/14.cancelSkill/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Cancel Skill' 3 | --- 4 | 5 | # Cancel Skill 6 | 7 | Calling this chat Method with an active Skill Execution ID will cancel the skill. For example, in the case of beach ball it will halt the beach ball game. Sparks are **not** refunded to the user who triggered the Skill. 8 | 9 | ## Permissions 10 | 11 | You will need a valid OAuth token with the `chat:cancel_skill` Scope to cancel a skill. 12 | 13 | ## Arguments 14 | 15 | 1. `executionId` - The Execution id that you'd like to cancel, you can get this from the [`SkillAttribution`](/reference/chat/events/skillattribution) event when a skill is activated. 16 | 17 | ## Examples 18 | 19 | ### Request 20 | 21 | ```json 22 | { 23 | "type": "method", 24 | "method": "cancelSkill", 25 | "arguments": ["8e07a0b0-3a2e-11e6-a9ef-0b7037d1fbdd"], 26 | "id": 10 27 | } 28 | ``` 29 | 30 | ### Response 31 | 32 | ```json 33 | { 34 | "type": "reply", 35 | "error": null, 36 | "id": 10, 37 | "data": "Skill execution cancelled." 38 | } 39 | ``` 40 | 41 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/14.optOutEvents/doc.md: -------------------------------------------------------------------------------- 1 | # optOutEvents 2 | 3 | Request to opt out from receiving certain events from chat socket. 4 | 5 | ## Arguments 6 | 7 | 1. An array of events to opt out from. For ex. UserJoin, UserLeave. Reference: [event](/reference/chat/events) 8 | 9 | ## Examples 10 | 11 | ### Request 12 | 13 | ```json 14 | { "type": "method", "method": "optOutEvents", "arguments": ["UserJoin", "UserLeave"], "id": 0 } 15 | ``` 16 | 17 | ### Response 18 | 19 | ```json 20 | { 21 | "type": "reply", 22 | "error": null, 23 | "id": 0, 24 | "data": {} 25 | } 26 | ``` 27 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/03.methods/landing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Methods' 3 | process: 4 | twig: true 5 | twig_first: true 6 | --- 7 | 8 | # Methods 9 | 10 | A method is sent to the chat server the server will respond with a Reply packet. 11 | 12 | | Property | Description | 13 | | --------- | --------------------------------------------------------------------------------------------------------------------------- | 14 | | type | Must be method. | 15 | | method | The method name to execute. | 16 | | arguments | An array of arguments, specific per method type. | 17 | | id | Must be a unique numeric ID. If the method you sent has a reply, the numeric ID will be sent back down in the Reply packet. | 18 | 19 | # Reply 20 | A reply is received from the server in response to a Method packet. 21 | 22 | | Property | Description | 23 | | -------- | ------------------------------------------------------------------------------------------------------------------ | 24 | | type | Must be reply. | 25 | | error | If an error has not occurred null, otherwise an error message. | 26 | | data | Associated event data - may be of any type, specific to the event. | 27 | | id | Must be a unique numeric ID. The ID will match the ID sent in the Method packet that this reply is in response to. | 28 | 29 | 30 | # Methods 31 | 32 | {% for p in page.children %} 33 | - [{{p.title}}]({{p.url}}) 34 | {% endfor %} 35 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/01.WelcomeEvent/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'WelcomeEvent' 3 | --- 4 | # WelcomeEvent 5 | 6 | Sent by the server once you're fully connected to chat. 7 | 8 | ## Examples 9 | ```json 10 | { 11 | "type": "event", 12 | "event": "WelcomeEvent", 13 | "data": { 14 | "server": "cb4fce87-cd05-44db-830e-cccc53a33fab" 15 | } 16 | } 17 | ``` 18 | 19 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/03.UserJoin/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'UserJoin' 3 | --- 4 | # UserJoin 5 | 6 | Sent when a user joins the chat. This is not emitted for unauthenticated users. 7 | 8 | ## Examples 9 | ```json 10 | 11 | { 12 | "type": "event", 13 | "event": "UserJoin", 14 | "data": { 15 | "originatingChannel": 1, 16 | "username": "USERNAME", 17 | "roles": [ 18 | "User" 19 | ], 20 | "id": 12345 21 | } 22 | } 23 | ``` 24 | 25 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/04.UserLeave/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'UserLeave' 3 | --- 4 | # UserLeave 5 | 6 | Sent when a user leaves the chat. This is not emitted for unauthenticated users. 7 | 8 | ## Examples 9 | ```json 10 | { 11 | "type": "event", 12 | "event": "UserLeave", 13 | "data": { 14 | "originatingChannel": 1, 15 | "username": "USERNAME", 16 | "id": 12345 17 | } 18 | } 19 | ``` 20 | 21 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/05.PollStart/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'PollStart' 3 | --- 4 | # PollStart 5 | 6 | Initially sent when a new poll is started. Then, over the course of a poll, it is re-sent with information about the poll's progress. 7 | 8 | ## Examples 9 | ```json 10 | { 11 | "type": "event", 12 | "event": "PollStart", 13 | "data": { 14 | "originatingChannel": 1, 15 | "q": "How's the weather?", 16 | "answers": [ 17 | "Good.", 18 | "Bad." 19 | ], 20 | "author": { 21 | "user_name": "USERNAME", 22 | "user_id": 12345, 23 | "user_roles": [ 24 | "Mod" 25 | ] 26 | }, 27 | "duration": 29996, 28 | "endsAt": 1465533783407, 29 | "voters": 0, 30 | "responses": { 31 | "Good.": 0, 32 | "Bad.": 0 33 | } 34 | } 35 | } 36 | ``` 37 | 38 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/06.PollEnd/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'PollEnd' 3 | --- 4 | # PollEnd 5 | 6 | Sent when a poll has ended. 7 | 8 | ## Examples 9 | ```json 10 | { 11 | "type": "event", 12 | "event": "PollEnd", 13 | "data": { 14 | "originatingChannel": 1, 15 | "q": "How's the weather?", 16 | "answers": [ 17 | "Good.", 18 | "Bad." 19 | ], 20 | "author": { 21 | "user_name": "USERNAME", 22 | "user_id": 12345, 23 | "user_roles": [ 24 | "Mod" 25 | ] 26 | }, 27 | "duration": 29996, 28 | "endsAt": 1465533783407, 29 | "voters": 5, 30 | "responses": { 31 | "Good.": 2, 32 | "Bad.": 3 33 | } 34 | } 35 | } 36 | ``` 37 | 38 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/07.DeleteMessage/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'DeleteMessage' 3 | --- 4 | # DeleteMessage 5 | 6 | Sent when a message has been deleted from chat. 7 | 8 | ## Examples 9 | ```json 10 | { 11 | "type": "event", 12 | "event": "DeleteMessage", 13 | "data": { 14 | "moderator": { 15 | "user_name": "USERNAME", 16 | "user_id": 12345, 17 | "user_roles": [ 18 | "Mod", 19 | "User" 20 | ], 21 | "user_level": 12 22 | }, 23 | "id": "b6661250-3a31-11e6-830a-a1d867c5621f" 24 | } 25 | } 26 | ``` 27 | 28 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/08.PurgeMessage/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'PurgeMessage' 3 | --- 4 | # PurgeMessage 5 | 6 | Sent when a user's messages are purged. Note: `cause.type` can either be `ban`, `timeout`, or `globaltimeout`. If `cause.type` is `timeout` or `globaltimeout` then `cause.durationString` will exist, and is the raw value that was passed from the moderator. 7 | 8 | ## Examples 9 | ```json 10 | { 11 | "type": "event", 12 | "event": "PurgeMessage", 13 | "data": { 14 | "moderator": { 15 | "user_name": "USERNAME", 16 | "user_id": 12345, 17 | "user_roles": [ 18 | "Mod", 19 | "User" 20 | ], 21 | "user_level": 12 22 | }, 23 | "user_id": 12345, 24 | "cause": { 25 | "type": "timeout", 26 | "durationString": "5m" 27 | } 28 | } 29 | } 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/09.ClearMessages/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'ClearMessages' 3 | --- 4 | # ClearMessages 5 | 6 | Sent when the server clears all messages in chat. 7 | 8 | ## Examples 9 | ```json 10 | { 11 | "type": "event", 12 | "event": "ClearMessages", 13 | "data": { 14 | "clearer": { 15 | "user_name": "USERNAME", 16 | "user_id": 12345, 17 | "user_roles": [ 18 | "Mod", 19 | "User" 20 | ], 21 | "user_level": 12 22 | } 23 | } 24 | } 25 | ``` 26 | 27 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/10.UserUpdate/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'UserUpdate' 3 | --- 4 | # UserUpdate 5 | 6 | Sent when a user is updated, usually on status change. E.g. Modding, Subscribing, Banning. 7 | 8 | ## Examples 9 | ```json 10 | { 11 | "type": "event", 12 | "event": "UserUpdate", 13 | "data": { 14 | "user": 12345, 15 | "roles": [ 16 | "Banned", 17 | "Pro", 18 | "User" 19 | ], 20 | } 21 | } 22 | ``` 23 | 24 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/11.UserTimeout/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'UserTimeout' 3 | --- 4 | # UserTimeout 5 | 6 | Sent only to a user when they are timed out. The duration provided is measured in milliseconds. 7 | 8 | ## Examples 9 | ```json 10 | { 11 | "type": "event", 12 | "event": "UserTimeout", 13 | "data": { 14 | "user": { 15 | "user_name": "username", 16 | "user_id": 102534, 17 | "user_roles": [ 18 | "Pro", 19 | "User" 20 | ] 21 | }, 22 | "duration": 59998 23 | } 24 | } 25 | ``` 26 | 27 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/12.SkillAttribution/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Skill Attribution' 3 | --- 4 | 5 | # Skill Attribution 6 | 7 | Sent from the server when a skill execution has been triggered by a user. 8 | 9 | Within the data object's skill object you can see the currency and priced used to use this Skill. 10 | 11 | For currencies: 12 | - Embers - Indicates the skill used Embers 13 | - Sparks - Indicates the skill used Sparks 14 | 15 | ## Examples 16 | 17 | ```json 18 | { 19 | "type": "event", 20 | "event": "SkillAttribution", 21 | "data": { 22 | "id": "c2059394-fe40-11e8-8eb2-f2801f1b9fd1", 23 | "skill": { 24 | "skill_id": "d314fb50-70e9-4f59-96f8-98a5f24737ef", 25 | "skill_name": "Sticker", 26 | "execution_id": "f319fb50-70e9-4f59-96f8-98a5f24737ef", 27 | "icon_url": "https://mixer.com/skill.png", 28 | "cost": 100, 29 | "currency": "Sparks" 30 | }, 31 | "user_name": "USERNAME", 32 | "user_id": 12345, 33 | "user_roles": [ 34 | "User" 35 | ], 36 | "user_level": 12, 37 | "user_avatar": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 38 | "message": { 39 | "message": [ 40 | { 41 | "type": "text", 42 | "data": "Hello! ", 43 | "text": "Hello! " 44 | }, 45 | { 46 | "type": "emoticon", 47 | "source": "builtin", 48 | "pack": "default", 49 | "coords": { 50 | "x": 96, 51 | "y": 0, 52 | "width": 24, 53 | "height": 24 54 | }, 55 | "text": ":)" 56 | }, 57 | { 58 | "type": "text", 59 | "data": " ", 60 | "text": " " 61 | }, 62 | { 63 | "type": "link", 64 | "url": "https://mixer.com/mixer", 65 | "text": "mixer.com/mixer" 66 | }, 67 | { 68 | "type": "emoticon", 69 | "source": "external", 70 | "pack": "https://uploads.mixer.com/emoticons/x.png", 71 | "coords": { 72 | "x": 24, 73 | "y": 48, 74 | "width": 24, 75 | "height": 24 76 | }, 77 | "text": ":coolpartneremote" 78 | }, 79 | { 80 | "type": "image", 81 | "text": "image_name", 82 | "url": "https://mixer.com/image.png" 83 | } 84 | ], 85 | "meta": {} 86 | } 87 | } 88 | } 89 | ``` 90 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/13.DeleteSkillAtribution/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Delete Skill Attribution' 3 | --- 4 | # Delete Skill Attribution 5 | 6 | Sent when a skill has been cancelled from chat. 7 | 8 | ## Examples 9 | 10 | ```json 11 | { 12 | "type": "event", 13 | "event": "DeleteSkillAttribution", 14 | "data": { 15 | "moderator": { 16 | "user_name": "USERNAME", 17 | "user_id": 12345, 18 | "user_roles": [ 19 | "Mod", 20 | "User" 21 | ], 22 | "user_level": 12 23 | }, 24 | "execution_id": "b6661250-3a31-11e6-830a-a1d867c5621f" 25 | } 26 | } 27 | 28 | ``` 29 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/04.events/landing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Events' 3 | process: 4 | twig: true 5 | twig_first: true 6 | --- 7 | 8 | # Event 9 | An event is received from the chat server when an event occurs in the channel's chat. This includes chat messages themselves, polls, and role changes. The full list can be found in the Events section below. 10 | 11 | | Property | Description | 12 | | -------- | ------------------------------------------------------------------ | 13 | | type | Must be event. | 14 | | event | The event name. | 15 | | data | Associated event data - may be of any type, specific to the event. | 16 | 17 | 18 | ## Events 19 | {% for p in page.children %} 20 | - [{{p.title}}]({{p.url}}) 21 | {% endfor %} 22 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/05.ChatChattersList/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Chat Chatters List' 3 | --- 4 | 5 | # Chat Chatters List V2 Endpoints 6 | 7 | ## GET /api/v2/chats/{channelId}/users 8 | 9 | Returns a list of users connected to this Channel's chat. 10 | 11 | ### Request 12 | 13 | #### URI Parameters 14 | * channelId: uint - The ID of the channel you wish to chat in. 15 | 16 | #### Query Parameters 17 | 18 | * limit: uint? [1≤integer≤100] - Amount of items per page. 19 | * showLurkers: boolean? - Show lurkers in the channel for staff user (Authed API and requires JWT Token) 20 | * continuationToken: string? - An opaque token. ContinuationToken to paginate through all chat users in the channel. See [Continuation Tokens](/guides/core/continuationtokens) for more info on how these work. We recommend using the link header provided on the response. 21 | * username: string? - Name fragment to search users by. 22 | 23 | 24 | ### Response 25 | 26 | **Success Http Code**: 200 OK 27 | 28 | #### Headers 29 | 30 | * link: string - [RFC5988](https://tools.ietf.org/html/rfc5988) links, which contains links next page. Example: `; rel="next"` 31 | 32 | #### Body 33 | 34 | **Media Type**: application/json 35 | 36 | **Data Type**: Array<[ChatUser](#ChatUserType)> 37 | 38 | ## GET /api/v2/chats/{channelId}/users/{userId} 39 | 40 | Returns a specific user by their ID from the Chatters list. If they are not in the channel you will recieve a 404. 41 | 42 | ### Request 43 | 44 | #### URI Parameters: 45 | 46 | * channelId: uint - The ID of the channel you wish to chat in. 47 | * userId: uint - The user ID that this chat user belongs to. 48 | 49 | ### Response 50 | 51 | **Success Http Code**: 200 OK 52 | 53 | ### Body 54 | 55 | **Media Type:** application/json 56 | 57 | **Data Type:** ChatUser 58 | 59 | ### ChatUser Type 60 | 61 | Represents a user within chat for a channel and provides details about their status within the channel. 62 | 63 | #### Properties 64 | 65 | * userId: uint - The user ID that this chat user belongs to. 66 | * username: string - The username. 67 | * userRoles: Array<[Role](https://dev.mixer.com/rest/index.html#Role)> - The roles the user has in this chat. 68 | 69 | ## Rate limiting 70 | Follows the same rate limiting bucket for chats as [here](https://dev.mixer.com/guides/core/ratelimits) 71 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/06.errors/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Chat Error List' 3 | --- 4 | # Chat Error List 5 | 6 | Below is listed a table of errors which chat may generate in response to your actions which you should ensure your application is able to handle. If you notice an error that is missing, please [Reach Out](mailto:mixerdevinfo@microsoft.com). 7 | 8 | | Error | Description | Recommendation | 9 | | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | 10 | | `UNOTFOUND` | `UNOTFOUND` is returned in response to an `auth` method call when the `userId` and `authkey` combination used could not be matched together. This usually means that the user that you requested an authkey for is not the same as the user you're trying to authenticate as. | We have a dedicated section on another page to cover this [here](/guides/chat/troubleshooting). | 11 | | `UNOTJSON`| This error means that your packet sent to the Chat server was not determined to be valid JSON.| Please ensure that you're sending valid JSON and try again.| 12 | |`UACCESS`| This error means you don't have access to that channel, it could be from a number of reasons including you being banned from the channel or the channel being in test stream mode.| Verify you have access to the Channel's chat and that you are not banned and that if it is in test stream mode that you have the permission to view it.| 13 | -------------------------------------------------------------------------------- /pages/02.reference/01.chat/landing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Chat 3 | media_order: "" 4 | body_classes: "" 5 | order_by: "" 6 | order_manual: "" 7 | redirect: reference/chat/introduction 8 | --- 9 | 10 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/02.methods/01.livesubscribe/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Live Subscribe 3 | --- 4 | 5 | # livesubscribe 6 | 7 | A livesubscribe method allows users to subscribe to [liveloading events](/reference/constellation/events/live). The number of events you can subscribe to is limited; please see [liveloading limits](/reference/constellation#limits) for more information. 8 | 9 | ```json 10 | {"type": "method", "method": "livesubscribe", "params": {"events": ["user:1:update", "channel:1:followed"]}, "id": 42} 11 | ``` 12 | * `events` is an array of events to subscribe to. Note that either all events are successfully subscribed to, or a failure occurs and no events are subscribed to. Either do or do not, there is no try. 13 | 14 | A livesubscribe reply looks like one of the following: 15 | * A successful reply: 16 | ```json 17 | {"type": "reply", "result": null, "error": null, "id": 42} 18 | ``` 19 | * A reply with an invalid event: 20 | ```json 21 | {"type": "reply", "result": null, "error": {"code": 4106, "message": "Unknown event \"my silly event\" "}, "id": 42} 22 | ``` 23 | * A reply for an event you do not have permission to see: 24 | ```json 25 | {"type": "reply", "result": null, "error": {"code": 4107, "message": "You do not have permission to subscribe to \"user:1:secrets\""}, "id": 42}') 26 | ``` 27 | 28 | * A reply for an event you are already subscribed to: 29 | ```json 30 | {"type": "reply", "result": null, "error": {"code": 4108, "message": "Attempt to duplicate subscription to \"user:1:update\""}, "id": 42}') 31 | ``` 32 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/02.methods/02.liveunsubscribe/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Live UnSubscribe 3 | --- 4 | 5 | # liveunsubscribe 6 | 7 | A liveunsubscribe method can be used to stop listening to previously-subscribed-to events: 8 | 9 | ```json 10 | {"type": "method", "method": "liveunsubscribe", "params": {"events": ["user:1:update", "channel:1:followed"]}, "id": 42} 11 | ``` 12 | 13 | * events is an array of events to unsubscribe from. Note that if you are not subscribed to one or more of the events, no error is returned. 14 | 15 | A liveunsubscribe reply looks like the following: 16 | ```json 17 | {"type": "reply", "result": null, "error": null, "id": 42} 18 | ``` 19 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/02.methods/03.ping/doc.md: -------------------------------------------------------------------------------- 1 | # ping 2 | 3 | A ping method should only be used in environments where websocket implementations do not natively support pings, such as browsers. 4 | 5 | ```json 6 | {"id":1,"type":"method","method":"ping","params":null} 7 | ``` 8 | 9 | A ping reply is a blank reply packet with a matching id. 10 | 11 | ```json 12 | {"id":1,"type":"reply","result":{},"error":null} 13 | ``` 14 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/02.methods/doc.md: -------------------------------------------------------------------------------- 1 | # Methods 2 | 3 | Method packets are sent from the client in a way very similar to JSON-RPC. This is the only packet the client may send to the server. A method may look like the following: 4 | 5 | `{"type": "method", "method": "divide", "params": {"numerator": 16, "denominator": 4}, "id": 123}` 6 | 7 | * `type` is always set to "method" 8 | * `method` should be the name of the method to call 9 | * `params` should be an object, not an array, of named arguments to pass into the method. 10 | * `id` may be any `uint32`. It’s included in the reply packet and used to correlate replies from the socket. You should ensure that each request has a unique id within your session. 11 | 12 | 13 | ## Reply 14 | 15 | Reply packets are sent in response to method packets. Replies are always sent in response to methods unless the socket closes before they may be sent. Some reply packets may look like the following: 16 | 17 | `{"type": "reply", "result": 4, "error": null, "id": 123}` 18 | 19 | `{"type": "reply", "result": null, "error": {"code": 1000, "message": "Cannot divide by zero"}, "id": 124}` 20 | 21 | * `type` is always set to "reply" 22 | * `id` is set to the id passed in the corresponding method packet 23 | * `result` is the unstructured result of the method, or null 24 | * `error` is an error which occurred, or null. If present it will always contain a "code" and an associated "message" 25 | 26 | Note that if fatal errors occur as a result of a method call, a websocket close frame will be sent instead of a reply. The close frame’s code and associated message will be the same as that which otherwise would have been sent in reply.error. 27 | 28 | ## Error Codes 29 | Constellation uses the 4xxx error code range reserved for use by applications in addition to the standard 1xxx codes. The following codes are in use: 30 | 31 | * `1011` - Sent in a close or method reply if an unknown internal error occurs. 32 | * `1012` - Sent in a close frame when we deploy or restart Constellation; clients should attempt to reconnect. 33 | * `4006` - Error parsing payload as JSON 34 | * `4007` - Error decompressing a supposedly-gzipped payload 35 | * `4008` - Unknown packet type 36 | * `4009` - Unknown method name call 37 | * `4010` - Error parsing method arguments (not the right type or structure) 38 | * `4011` - The user session has expired; if using a cookie, they should log in again, or get a bearer auth token if using an authorization header. 39 | * `4106` - Unknown event used in a livesubscribe call 40 | * `4107` - You do not have access to subscribe to that livesubscribe event 41 | * `4108` - You are already subscribed to that livesubscribe event (during livesubscribe) 42 | * `4109` - You are not subscribed to that livesubscribe event (in response to a liveunsubscribe method) 43 | * `4110` - You cannot make more subscriptions (in response to a livesubscribe method). See liveloading limits. 44 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/01.hello/doc.md: -------------------------------------------------------------------------------- 1 | # hello 2 | A hello event is sent down to the client when they first connect. 3 | 4 | ```json 5 | {"type": "event", "event": "hello", "data": {"authenticated": true}} 6 | ``` 7 | `authenticated` is `true` if the session is authenticated as a user. 8 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/01.Announcement/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | event: ⁠⁠⁠announcement:announce 3 | --- 4 | # ⁠⁠⁠⁠announcement:announce 5 | Sent when there is a site-wide announcement. The message property of the body contains the announcement text. Other fields affect how the announcement is displayed on mixer.com. 6 | 7 | ## Payload 8 | |Type|Description| 9 | |----|-----------| 10 | |[Announcement](/rest/index.html#Announcement)|The site-wide announcement that has been sent.| 11 | 12 | ## Example 13 | ```json 14 | { 15 | "message": "This is an announcement message." 16 | } 17 | ``` 18 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/02.Channel Followed/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:followed 2 | 3 | Sent when a user follows or unfollows a channel. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |following|[boolean](/rest/index.html#boolean)|Whether the user just followed the channel (`true` if this was a follow and `false` if this was an unfollow).| 9 | |user|[User](/rest/index.html#User)|The user who followed the channel. This also includes the channel object as `channel`.| 10 | 11 | ## Example 12 | ```json 13 | { 14 | "user": { 15 | "level": 5, 16 | "social": {}, 17 | "id": 696, 18 | "username": "HypeBot", 19 | "verified": true, 20 | "experience": 72, 21 | "sparks": 1620, 22 | "avatarUrl": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 23 | "bio": "", 24 | "primaryTeam": null, 25 | "createdAt": "2015-02-19T17:43:07.000Z", 26 | "updatedAt": "2017-05-25T16:26:14.000Z", 27 | "deletedAt": null, 28 | "channel": { 29 | "featured": false, 30 | "id": 588, 31 | "userId": 696, 32 | "token": "HypeBot", 33 | "online": false, 34 | "featureLevel": 0, 35 | "partnered": false, 36 | "transcodingProfileId": 1, 37 | "suspended": false, 38 | "name": "HypeBot's Channel", 39 | "audience": "teen", 40 | "viewersTotal": 100, 41 | "viewersCurrent": 0, 42 | "numFollowers": 1000, 43 | "description": "

Hi! I'm HypeBot. Nice to meet you!

\n", 44 | "typeId": null, 45 | "interactive": false, 46 | "interactiveGameId": null, 47 | "ftl": 0, 48 | "hasVod": false, 49 | "languageId": null, 50 | "coverId": null, 51 | "thumbnailId": null, 52 | "badgeId": null, 53 | "bannerUrl": null, 54 | "hosteeId": null, 55 | "hasTranscodes": true, 56 | "vodsEnabled": true, 57 | "costreamId": null, 58 | "createdAt": "2015-04-09T07:37:51.000Z", 59 | "updatedAt": "2017-07-11T19:49:26.000Z", 60 | "deletedAt": null 61 | } 62 | }, 63 | "following": true 64 | } 65 | ``` 66 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/03.Channel Hosted/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:hosted 2 | 3 | Sent when another user hosts or auto-hosts the channel with the provided `id`. Note that this event is not subject to the spam prevention that the chat message is. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |hosterId|[uint](/rest/index.html#uint)|The channel ID who just hosted the channel.| 9 | |hoster|[Channel](/rest/index.html#Channel)|The channel object who just hosted the channel.| 10 | |auto|[boolean](/rest/index.html#boolean)|Whether it was an auto-host or normal host.| 11 | 12 | ## Example 13 | ```json 14 | { 15 | "hosterId": 588, 16 | "hoster": { 17 | "featured": false, 18 | "id": 588, 19 | "userId": 696, 20 | "token": "HypeBot", 21 | "online": false, 22 | "featureLevel": 0, 23 | "partnered": false, 24 | "transcodingProfileId": 1, 25 | "suspended": false, 26 | "name": "HypeBot's Channel", 27 | "audience": "teen", 28 | "viewersTotal": 100, 29 | "viewersCurrent": 0, 30 | "numFollowers": 1000, 31 | "description": "

Hi! I'm HypeBot. Nice to meet you!

\n", 32 | "typeId": null, 33 | "interactive": false, 34 | "interactiveGameId": null, 35 | "ftl": 0, 36 | "hasVod": false, 37 | "languageId": null, 38 | "coverId": null, 39 | "thumbnailId": null, 40 | "badgeId": null, 41 | "bannerUrl": null, 42 | "hosteeId": null, 43 | "hasTranscodes": true, 44 | "vodsEnabled": true, 45 | "costreamId": null, 46 | "createdAt": "2015-04-09T07:37:51.000Z", 47 | "updatedAt": "2017-07-11T19:49:26.000Z", 48 | "deletedAt": null 49 | }, 50 | "auto": true 51 | } 52 | ``` 53 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/04.Channel Unhosted/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:unhosted 2 | 3 | Sent when another user finishes hosting the channel with the provided `id`. Note that this event is not subject to the spam prevention that the chat message is. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |hosterId|[uint](/rest/index.html#uint)|The channel ID who just unhosted the channel.| 9 | |hoster|[Channel](/rest/index.html#Channel)|The channel object who just unhosted the channel.| 10 | 11 | ## Example 12 | ```json 13 | { 14 | "hosterId": 588, 15 | "hoster": { 16 | "featured": false, 17 | "id": 588, 18 | "userId": 696, 19 | "token": "HypeBot", 20 | "online": false, 21 | "featureLevel": 0, 22 | "partnered": false, 23 | "transcodingProfileId": 1, 24 | "suspended": false, 25 | "name": "HypeBot's Channel", 26 | "audience": "teen", 27 | "viewersTotal": 100, 28 | "viewersCurrent": 0, 29 | "numFollowers": 1000, 30 | "description": "

Hi! I'm HypeBot. Nice to meet you!

\n", 31 | "typeId": null, 32 | "interactive": false, 33 | "interactiveGameId": null, 34 | "ftl": 0, 35 | "hasVod": false, 36 | "languageId": null, 37 | "coverId": null, 38 | "thumbnailId": null, 39 | "badgeId": null, 40 | "bannerUrl": null, 41 | "hosteeId": null, 42 | "hasTranscodes": true, 43 | "vodsEnabled": true, 44 | "costreamId": null, 45 | "createdAt": "2015-04-09T07:37:51.000Z", 46 | "updatedAt": "2017-07-11T19:49:26.000Z", 47 | "deletedAt": null 48 | } 49 | } 50 | ``` 51 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/05.Channel Subscribed/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:subscribed 2 | 3 | Sent when a user subscribes to the channel. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |user|[User](/rest/index.html#User)|The user who just subscribed to the channel.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "user": { 14 | "level": 5, 15 | "social": {}, 16 | "id": 696, 17 | "username": "HypeBot", 18 | "verified": true, 19 | "experience": 72, 20 | "sparks": 1620, 21 | "avatarUrl": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 22 | "bio": "", 23 | "primaryTeam": null, 24 | "createdAt": "2015-02-19T17:43:07.000Z", 25 | "updatedAt": "2017-05-25T16:26:14.000Z", 26 | "deletedAt": null 27 | } 28 | } 29 | ``` 30 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/06.Channel Resubscribed/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:resubscribed 2 | 3 | Sent when an automatic resubscription to a channel happens. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |user|[User](/rest/index.html#User)|The user who just subscribed to the channel.| 9 | |since|[IsoDate](/rest/index.html#IsoDate)|The date for when the user first subscribed, from the start of the recurring billing period.| 10 | |until|[IsoDate](/rest/index.html#IsoDate)|The date for when the subscription expires.| 11 | |totalMonths|[uint](/rest/index.html#uint)|The number of months the user has been subscribed since the beginning of time.| 12 | 13 | ## Example 14 | ```json 15 | { 16 | "user": { 17 | "level": 5, 18 | "social": {}, 19 | "id": 696, 20 | "username": "HypeBot", 21 | "verified": true, 22 | "experience": 72, 23 | "sparks": 1620, 24 | "avatarUrl": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 25 | "bio": "", 26 | "primaryTeam": null, 27 | "createdAt": "2015-02-19T17:43:07.000Z", 28 | "updatedAt": "2017-05-25T16:26:14.000Z", 29 | "deletedAt": null 30 | }, 31 | "since": "2017-09-25T11:00:00.000Z", 32 | "until": "2017-12-25T11:00:00.000Z", 33 | "totalMonths": 3 34 | } 35 | ``` 36 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/07.Channel Resubshared/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:resubShared 2 | 3 | Sent when a user who has recently resubscribed to the channel chooses to 'share' their resubscription, by clicking the 'Share' button within the site chat. This event is preferred to the `channel:{id}:resubscribed` event if your integration reacts with some form of celebration, but you should be aware that this event will not fire at all for a resubscription if the user does not choose to share it. The body is identical to that of the `channel:{id}:resubscribed` event. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |user|[User](/rest/index.html#User)|The user who just subscribed to the channel.| 9 | |since|[IsoDate](/rest/index.html#IsoDate)|The date for when the user first subscribed, from the start of the recurring billing period.| 10 | |until|[IsoDate](/rest/index.html#IsoDate)|The date for when the subscription expires.| 11 | |totalMonths|[uint](/rest/index.html#uint)|The number of months the user has been subscribed since the beginning of time.| 12 | |currentStreak|[uint](/rest/index.html#uint)|The number of consecutive months the user has been subscribed.| 13 | 14 | ## Example 15 | ```json 16 | { 17 | "user": { 18 | "level": 5, 19 | "social": {}, 20 | "id": 696, 21 | "username": "HypeBot", 22 | "verified": true, 23 | "experience": 72, 24 | "sparks": 1620, 25 | "avatarUrl": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 26 | "bio": "", 27 | "primaryTeam": null, 28 | "createdAt": "2015-02-19T17:43:07.000Z", 29 | "updatedAt": "2017-05-25T16:26:14.000Z", 30 | "deletedAt": null 31 | }, 32 | "since": "2017-09-25T11:00:00.000Z", 33 | "until": "2017-12-25T11:00:00.000Z", 34 | "totalMonths": 3, 35 | "currentStreak": 2 36 | } 37 | ``` 38 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/08.Channel Directpurchased/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:directPurchased 2 | 3 | Sent when a user uses direct purchase to buy a title on a Streamer's Channel. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |gameTitle|[string](/rest/index.html#string)|The title of the game sold| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "gameTitle": "Dark Souls III" 14 | } 15 | ``` 16 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/09.Channel Update/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:update 2 | 3 | Sent when the channel model is changed. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[Channel](/rest/index.html#Channel)|Contains changes to the channel model. Please note this event may not necessarily include the entire channel resource. For example, when a channel goes online, an event with the key `online` going to `true` is sent. These payloads are intended to be treated as a patch for an existing model. For more information please see our page on [Patching Models from Live Updates](/guides/core/liveupdatesguides/patchingmodelsguide)| 9 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/10.Costream Update/doc.md: -------------------------------------------------------------------------------- 1 | # costream:{id}:update 2 | 3 | Sent when a costream model is changed (e.g. when a streamer joins/leaves the costream, or when the costream's settings have been changed). 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[Costream](/rest/index.html#Costream)|The full costream model after the costream has been changed.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "channels": [ 14 | { 15 | "id": 588, 16 | "token": "HypeBot", 17 | "userId": 696 18 | }, 19 | { 20 | "id": 314, 21 | "token": "Mixer", 22 | "userId": 344 23 | } 24 | ], 25 | "capacity": 4, 26 | "layout": { 27 | "name": "grid", 28 | "order": [ 29 | 588, 30 | 314 31 | ] 32 | }, 33 | "startedAt": "2017-07-13T16:44:15.684Z", 34 | "id": "2e86ca56-671f-4690-9fdb-1050d3c8e90d" 35 | } 36 | ``` 37 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/11.Interactive Connect/doc.md: -------------------------------------------------------------------------------- 1 | # interactive:{id}:connect 2 | 3 | Sent when an interactive app connects to this channel. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[string](/rest/index.html#string)|The address of the interactive server the application has connected to.| 9 | 10 | ## Example 11 | ```json 12 | "wss://interactive1-dal.mixer.com" 13 | ``` 14 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/12.Interactive Disconnect/doc.md: -------------------------------------------------------------------------------- 1 | # interactive:{id}:disconnect 2 | 3 | Sent when an interactive app disconnects from this channel. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[string](/rest/index.html#string)|The address of the interactive server the application has connected to.| 9 | 10 | ## Example 11 | ```json 12 | "wss://interactive1-dal.mixer.com" 13 | ``` 14 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/13.Team Deleted/doc.md: -------------------------------------------------------------------------------- 1 | # team:{id}:deleted 2 | 3 | Sent when a team is deleted. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |team|[Team](/rest/index.html#Team)|The team's record prior to deletion.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "team": { 14 | "id": 7, 15 | "ownerId": 696, 16 | "token": "mixer", 17 | "name": "Mixer Team", 18 | "description": "

Mixer team streamers!

\n", 19 | "logoUrl": "https://uploads.mixer.com/team/logo/p0857ky5-7.png", 20 | "backgroundUrl": "https://uploads.mixer.com/team/background/7k5tsbnx-7.jpg", 21 | "totalViewersCurrent": 0, 22 | "createdAt": "2016-04-21T03:22:10.000Z", 23 | "updatedAt": "2017-06-05T16:38:10.000Z" 24 | } 25 | } 26 | ``` 27 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/14.Team Memberaccepted/doc.md: -------------------------------------------------------------------------------- 1 | # team:{id}:memberAccepted 2 | 3 | Sent when an invitee accepts their team invitation. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[User](/rest/index.html#User)|The user who accepted their invitation.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "level": 5, 14 | "social": {}, 15 | "id": 696, 16 | "username": "HypeBot", 17 | "verified": true, 18 | "experience": 72, 19 | "sparks": 1620, 20 | "avatarUrl": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 21 | "bio": "", 22 | "primaryTeam": null, 23 | "createdAt": "2015-02-19T17:43:07.000Z", 24 | "updatedAt": "2017-05-25T16:26:14.000Z", 25 | "deletedAt": null 26 | } 27 | ``` 28 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/15.Team Memberinvited/doc.md: -------------------------------------------------------------------------------- 1 | # team:{id}:memberInvited 2 | 3 | Sent when a member is invited to a team. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[User](/rest/index.html#User)|The user who was sent an invitation.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "level": 5, 14 | "social": {}, 15 | "id": 696, 16 | "username": "HypeBot", 17 | "verified": true, 18 | "experience": 72, 19 | "sparks": 1620, 20 | "avatarUrl": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 21 | "bio": "", 22 | "primaryTeam": null, 23 | "createdAt": "2015-02-19T17:43:07.000Z", 24 | "updatedAt": "2017-05-25T16:26:14.000Z", 25 | "deletedAt": null 26 | } 27 | ``` 28 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/16.Team Memberremoved/doc.md: -------------------------------------------------------------------------------- 1 | # team:{id}:memberRemoved 2 | 3 | Sent when a team member leaves or invitee rejects their invite. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[User](/rest/index.html#User)|The member who left the team.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "level": 5, 14 | "social": {}, 15 | "id": 696, 16 | "username": "HypeBot", 17 | "verified": true, 18 | "experience": 72, 19 | "sparks": 1620, 20 | "avatarUrl": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 21 | "bio": "", 22 | "primaryTeam": null, 23 | "createdAt": "2015-02-19T17:43:07.000Z", 24 | "updatedAt": "2017-05-25T16:26:14.000Z", 25 | "deletedAt": null 26 | } 27 | ``` 28 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/17.Team Ownerchanged/doc.md: -------------------------------------------------------------------------------- 1 | # team:{id}:ownerChanged 2 | 3 | Sent when a team's ownership changes. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[User](/rest/index.html#User)|The new team owner.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "level": 5, 14 | "social": {}, 15 | "id": 696, 16 | "username": "HypeBot", 17 | "verified": true, 18 | "experience": 72, 19 | "sparks": 1620, 20 | "avatarUrl": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 21 | "bio": "", 22 | "primaryTeam": null, 23 | "createdAt": "2015-02-19T17:43:07.000Z", 24 | "updatedAt": "2017-05-25T16:26:14.000Z", 25 | "deletedAt": null 26 | } 27 | ``` 28 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/18.User Achievement/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:achievement 2 | 3 | Sent when a user achievement earning is updated. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[AchievementEarning](/rest/index.html#AchievementEarning)|The updated achievement.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "id": 70155, 14 | "earned": false, 15 | "progress": 0.2703, 16 | "createdAt": "2016-02-09T09:59:30.000Z", 17 | "updatedAt": "2017-07-13T16:39:27.000Z", 18 | "achievement": "followers-plat", 19 | "user": 696, 20 | "Achievement": { 21 | "slug": "followers-plat", 22 | "name": "Followers Platinum", 23 | "description": "Have at least ten thousand followers.", 24 | "sparks": 0 25 | } 26 | } 27 | ``` 28 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/19.User Followed/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:followed 2 | 3 | Sent when a user follows or unfollows a channel. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |following|[boolean](/rest/index.html#boolean)|Whether the user just followed the channel (`true` if this was a follow and `false` if this was an unfollow).| 9 | |channel|[Channel](/rest/index.html#Channel)|The channel that the user just followed.| 10 | 11 | ## Example 12 | ```json 13 | { 14 | "following": true, 15 | "channel": { 16 | "featured": false, 17 | "id": 588, 18 | "userId": 696, 19 | "token": "HypeBot", 20 | "online": false, 21 | "featureLevel": 0, 22 | "partnered": false, 23 | "transcodingProfileId": 1, 24 | "suspended": false, 25 | "name": "HypeBot's Channel", 26 | "audience": "teen", 27 | "viewersTotal": 100, 28 | "viewersCurrent": 0, 29 | "numFollowers": 1000, 30 | "description": "

Hi! I'm HypeBot. Nice to meet you!

\n", 31 | "typeId": null, 32 | "interactive": false, 33 | "interactiveGameId": null, 34 | "ftl": 0, 35 | "hasVod": false, 36 | "languageId": null, 37 | "coverId": null, 38 | "thumbnailId": null, 39 | "badgeId": null, 40 | "bannerUrl": null, 41 | "hosteeId": null, 42 | "hasTranscodes": true, 43 | "vodsEnabled": true, 44 | "costreamId": null, 45 | "createdAt": "2015-04-09T07:37:51.000Z", 46 | "updatedAt": "2017-07-11T19:49:26.000Z", 47 | "deletedAt": null 48 | } 49 | } 50 | ``` 51 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/20.User Notify/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:notify 2 | 3 | Sent when the user receives a new notification. Notifications of the same type will always follow the same structure. This event requires authentication. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[Notification](/rest/index.html#Notification)|The new notification.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "id": "2e86ca56-671f-4690-9fdb-1050d3c8e90d", 14 | "userId": 696, 15 | "trigger": "", 16 | "type": "follow", 17 | "sentAt": "2017-07-13T16:21:09.294270964Z", 18 | "payload": { 19 | "type": "follow", 20 | "channelOwnerId": 588, 21 | "triggeringUser": { 22 | "level": 12, 23 | "social": {}, 24 | "id": 314, 25 | "username": "Mixer", 26 | "verified": true, 27 | "experience": 182251, 28 | "sparks": 204863, 29 | "avatarUrl": "https://uploads.mixer.com/avatar/yc9q94zf-344.jpg", 30 | "bio": null, 31 | "primaryTeam": null, 32 | "createdAt": "2016-07-20T17:26:50.000Z", 33 | "updatedAt": "2016-08-17T18:21:07.000Z", 34 | "deletedAt": null 35 | } 36 | } 37 | } 38 | ``` 39 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/21.User Subscribed/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:subscribed 2 | 3 | Sent when the user subscribes to another channel. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |channel|[uint](/rest/index.html#uint)|The ID of the channel the user subscribed to.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "channel": 588 14 | } 15 | ``` 16 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/22.User Resubscribed/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:resubscribed 2 | 3 | Sent when an automatic resubscription to a channel happens. 4 | 5 | ## Payload 6 | |Name|Type|Description| 7 | |----|----|-----------| 8 | |channel|[uint](/rest/index.html#uint)|The ID of the channel the user subscribed to.| 9 | |since|[IsoDate](/rest/index.html#IsoDate)|The date for when the user first subscribed, from the start of the recurring billing period.| 10 | |until|[IsoDate](/rest/index.html#IsoDate)|The date for when the subscription expires.| 11 | |totalMonths|[uint](/rest/index.html#uint)|The number of months the user has been subscribed since the beginning of time.| 12 | 13 | ## Example 14 | ```json 15 | { 16 | "channel": 588, 17 | "since": "2017-09-25T11:00:00.000Z", 18 | "until": "2017-12-25T11:00:00.000Z", 19 | "totalMonths": 3 20 | } 21 | ``` 22 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/23.User Teamaccepted/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:teamAccepted 2 | 3 | Sent when a user accepts their invite to a team. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[Team](/rest/index.html#Team)|The team the user accepted the invitation for.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "id": 7, 14 | "ownerId": 696, 15 | "token": "mixer", 16 | "name": "Mixer Team", 17 | "description": "

Mixer team streamers!

\n", 18 | "logoUrl": "https://uploads.mixer.com/team/logo/p0857ky5-7.png", 19 | "backgroundUrl": "https://uploads.mixer.com/team/background/7k5tsbnx-7.jpg", 20 | "totalViewersCurrent": 0, 21 | "createdAt": "2016-04-21T03:22:10.000Z", 22 | "updatedAt": "2017-06-05T16:38:10.000Z" 23 | } 24 | ``` 25 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/24.User Teaminvited/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:teamInvited 2 | 3 | Sent when a user is invited to a team. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[Team](/rest/index.html#Team)|The team the user was invited to. This includes the team owner's user object as `owner`.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "id": 7, 14 | "ownerId": 696, 15 | "token": "mixer", 16 | "name": "Mixer Team", 17 | "description": "

Mixer team streamers!

\n", 18 | "logoUrl": "https://uploads.mixer.com/team/logo/p0857ky5-7.png", 19 | "backgroundUrl": "https://uploads.mixer.com/team/background/7k5tsbnx-7.jpg", 20 | "totalViewersCurrent": 0, 21 | "createdAt": "2016-04-21T03:22:10.000Z", 22 | "updatedAt": "2017-06-05T16:38:10.000Z", 23 | "owner": { 24 | "level": 5, 25 | "social": {}, 26 | "id": 696, 27 | "username": "HypeBot", 28 | "verified": true, 29 | "experience": 72, 30 | "sparks": 1620, 31 | "avatarUrl": "https://uploads.mixer.com/avatar/ed47s4h5-696.jpg", 32 | "bio": "", 33 | "primaryTeam": null, 34 | "createdAt": "2015-02-19T17:43:07.000Z", 35 | "updatedAt": "2017-05-25T16:26:14.000Z", 36 | "deletedAt": null 37 | } 38 | } 39 | ``` 40 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/25.User Teamremoved/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:teamRemoved 2 | 3 | Sent when a user leaves a team or rejects its invite. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[Team](/rest/index.html#Team)|The team the user left.| 9 | 10 | ## Example 11 | ```json 12 | { 13 | "id": 7, 14 | "ownerId": 696, 15 | "token": "mixer", 16 | "name": "Mixer Team", 17 | "description": "

Mixer team streamers!

\n", 18 | "logoUrl": "https://uploads.mixer.com/team/logo/p0857ky5-7.png", 19 | "backgroundUrl": "https://uploads.mixer.com/team/background/7k5tsbnx-7.jpg", 20 | "totalViewersCurrent": 0, 21 | "createdAt": "2016-04-21T03:22:10.000Z", 22 | "updatedAt": "2017-06-05T16:38:10.000Z" 23 | } 24 | ``` 25 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/26.User Update/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:update 2 | 3 | Sent when the user model is changed. 4 | 5 | ## Payload 6 | |Type|Description| 7 | |----|-----------| 8 | |[User](/rest/index.html#User)|Contains changes to the user model. Please note this event may not necessarily include the entire user resource. These payloads are intended to be treated as a patch for an existing model. For more information please see our page on [Patching Models from Live Updates](/guides/core/liveupdatesguides/patchingmodelsguide)| 9 | 10 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/27.Channel Skill/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:skill 2 | 3 | Sent when a skill is executed on a channel. **Stickers are unfortunately not included in this event**. 4 | 5 | The payload varies depending on the Skill being executed. As we add new Skills check back here for updated payloads. 6 | 7 | | Property | Type | Description | 8 | | ---------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------- | 9 | | channelId | uint | Channel Id the Skills is being executed on | 10 | | skillId | GUID | Unique identifier for the Skill | 11 | | executionId | GUID | Id for this execution of the Skill. Can be used to cancel. | 12 | | manifest | Object | An object containing technical details on how to execute the Skill including Skill resources. Updated documentation coming soon! | 13 | | parameter | Object | Any parameters asociated with the Skill | 14 | | socketUrl | string | Used to provide a socket for users to connect to when the Skill is a rally e.g. Beachball | 15 | | triggeringUserId | uint | User Id of the user who executed this skill | 16 | | currencyType | string | Currency (None, Sparks, or Embers) of the executed skill | 17 | | price | uint | The cost of the executed skill | 18 | 19 | 20 | ## Examples 21 | 22 | ```json 23 | { 24 | "channelId": 53411, 25 | "skillId": "f3598535-7fcd-4287-9ad4-b915f418af0a", 26 | "executionId": "538f43b7-ba88-47bf-885c-80a76dd86845", 27 | "manifest": {}, 28 | "parameters": {}, 29 | "socketUrl": null, 30 | "triggeringUserId": 46205, 31 | "currencyType": "Sparks", 32 | "price": 125 33 | } 34 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/28.Patronage Update/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:patronageUpdate 2 | 3 | Sent when a channel's patronage is updated. This happens as the result of a Skill or MixPlay action that costs Sparks. 4 | 5 | | Property | Type | Description | 6 | | ----------------------- | ---- | -------------------------------------------------------------------------- | 7 | | patronagePeriodId | GUID | An ID for the patronage period this event contributes to | 8 | | currentMilestoneGroupId | uint | The current group within this patronage period that this channel is in | 9 | | currentMilestoneId | uint | The current Milestone within this patronage period that this channel is in | 10 | | patronageEarned | uint | The total amount of patronage earnt for this period. Measured in Sparks. | 11 | 12 | ## Examples 13 | 14 | ```json 15 | { 16 | "patronagePeriodId": "eb69c18d-8a3b-44cd-a78f-bec3b8d8914e", 17 | "currentMilestoneGroupId": 2, 18 | "currentMilestoneId": 1, 19 | "patronageEarned": 1721700 20 | } 21 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/29.Channel Subscription Gifted/doc.md: -------------------------------------------------------------------------------- 1 | # channel:{id}:subscriptionGifted 2 | 3 | Send when a subscription is gifted to a user within a channel 4 | 5 | | Property | Type | Description | 6 | | -------------------- | ------ | --------------------------------------------------------- | 7 | | giftReceiverId | uint | The userId of the user who received the gift subscription | 8 | | gifterId | uint | The userId of the user who sent the subscription gift | 9 | | giftReceiverUsername | string | The username of the Subscription Gift Receiver | 10 | | gifterUsername | string | The username of the Subscription Gift Giver | 11 | 12 | ## Examples 13 | 14 | ```json 15 | { "giftReceiverId": 123, 16 | "gifterId": 123, 17 | "giftReceiverUsername": "username", 18 | "gifterUsername": "username" 19 | } 20 | ``` 21 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/30.User Subscription Gifted/doc.md: -------------------------------------------------------------------------------- 1 | # user:{id}:subscriptionGifted 2 | 3 | Sent to the **user who gifted the subscription** when a subscription is gifted to a user within a channel. 4 | 5 | | Property | Type | Description | 6 | | -------------------- | ------ | ----------------------------------------------------------- | 7 | | channelId | uint | The channelId of the channel this gift subscription is for | 8 | | giftReceiverId | uint | The userId of the user who received the gift subscription | 9 | | giftReceiverUsername | string | The Username of the user who received the gift subscription | 10 | 11 | ## Examples 12 | 13 | ```json 14 | { 15 | "channelId": 123, 16 | "giftReceiverId": 123, 17 | "giftReceiverUsername": "username" 18 | } 19 | ``` 20 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/31.Progression LevelUp/doc.md: -------------------------------------------------------------------------------- 1 | # progression:{channelId}:levelup 2 | 3 | Sent when a user levels up in a channel, to the channel they ranked upped in. 4 | 5 | | Property | Type | Description | 6 | | --------- | ---------------- | ---------------------------------------------------------- | 7 | | level | ProgressionLevel | The current hearts information of the user who ranked up. | 8 | | userId | uint | The userId of the user who leveled up. | 9 | | timestamp | string | The timestamp of this event. | 10 | | total | uint | The total Hearts of this user. | 11 | 12 | ## ProgressionLevel 13 | | Property | Type | Description | 14 | | ----------- | ------ | ------------------------------------- | 15 | | nextLevelXp | uint | The required Hearts for the next rank | 16 | | currentXp | uint | The current Hearts for the user | 17 | | level | uint | The rank of the user | 18 | | minXp | uint | The minimum xp required for this rank | 19 | | color | string | the color of this rank | 20 | | complement | string | the color complement for this rank | 21 | | assetsUrl | string | The asset url for this rank | 22 | | name | string | The name of the rank | 23 | 24 | ## Examples 25 | 26 | ```json 27 | { "userId": 1234, 28 | "timestamp": "2019-04-19T19:45:07Z", 29 | "total": 120, 30 | "level": { 31 | "nextLevelXp": 250, 32 | "currentXp": 120, 33 | "level": 2, 34 | "minXp": 100, 35 | "color": "#aaafb6", 36 | "complement": "#66A1F4", 37 | "assetsUrl": "https://static.mixer.com" 38 | } 39 | } 40 | ``` 41 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/02.live/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Live Events' 3 | process: 4 | twig: true 5 | twig_first: true 6 | --- 7 | # Live Events 8 | 9 | A live event looks like the following. Do note the socket event names are not liveloading events. Events you ask for over liveloading are always "live" events which contain the liveloading information. This separation is added so that other kinds of events can be distinguished from liveloading events. 10 | 11 | ```json 12 | {"type": "event", "event": "live", "data": {"channel": "user:1:update", "payload": {"sparks": 10000}}} 13 | ``` 14 | 15 | # Events 16 | 17 | {% for p in page.children %} 18 | - [{{p.title}}]({{p.url}}) 19 | {% endfor %} 20 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/03.events/doc.md: -------------------------------------------------------------------------------- 1 | # Events 2 | 3 | Event packets are sent when an action occurs which a client as asked to be notified about. Event packets look like the following: 4 | ```json 5 | {"type": "event", "event": "math_result", "data": 4} 6 | ``` 7 | * `type` is always set to "event" 8 | * `event` is the string name of the event 9 | * `data` is unstructured information associated with the event. Usually this is the same as found within the liveloading/sails event of the same type. 10 | -------------------------------------------------------------------------------- /pages/02.reference/02.constellation/landing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Constellation 3 | media_order: "" 4 | body_classes: "" 5 | order_by: "" 6 | order_manual: "" 7 | redirect: reference/constellation/introduction 8 | --- 9 | -------------------------------------------------------------------------------- /pages/02.reference/05.oauth/01.QuickDetails/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Quick Details 3 | --- 4 | # Quick Details 5 | 6 | If you're familiar with OAuth, feel free to dig in! You can register your OAuth application on your [OAuth Clients page](https://mixer.com/lab/oauth). After getting a Client ID there, you can use provide these endpoints to your OAuth client library to dig in: 7 | 8 | - Authorize endpoint: `https://mixer.com/oauth/authorize` 9 | - Token endpoint: `https://mixer.com/api/v1/oauth/token` 10 | 11 | ## Token Expiry 12 | | Type | Expiry Time | Notes | 13 | | ------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------- | 14 | | [Access Token](https://tools.ietf.org/html/rfc6749#section-1.4) | 6 Hours | 15 | | [Refresh Token](https://tools.ietf.org/html/rfc6749#section-1.5) | 1 Year | This is single use. If used, a new refresh token is issued with the new access token. | 16 | | [Implicit Token](https://tools.ietf.org/html/rfc6749#section-1.3.2) | 1 Year | These are only given out by an Implicit Grant | 17 | 18 | # Scopes 19 | 20 | For a list of scopes see our [scopes page](/reference/oauth/scopes). 21 | -------------------------------------------------------------------------------- /pages/02.reference/05.oauth/02.ShortCodeAuth/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/02.reference/05.oauth/02.ShortCodeAuth/demo.gif -------------------------------------------------------------------------------- /pages/02.reference/06.rest/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Rest Reference' 3 | redirect: /rest/index.html 4 | external: true 5 | link: /rest/index.html 6 | --- 7 | # Dummy Page 8 | Shouldn't see this, doing some less ideal stuff with an external link 9 | -------------------------------------------------------------------------------- /pages/02.reference/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Reference 3 | routable: false 4 | --- 5 | 6 | # Reference 7 | 8 | TODO Contents page 9 | -------------------------------------------------------------------------------- /pages/03.blog/01.angular-lazy-loading/bundle-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.blog/01.angular-lazy-loading/bundle-error.png -------------------------------------------------------------------------------- /pages/03.blog/01.angular-lazy-loading/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.blog/01.angular-lazy-loading/splash.png -------------------------------------------------------------------------------- /pages/03.blog/02.shortcode-sdks/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: New SDKs for Mixer Shortcode OAuth 3 | date: 10:25 08/31/2018 4 | author: copeet 5 | taxonomy: 6 | category: blog 7 | tag: [blog, sdk, client] 8 | --- 9 | 10 | When we released [custom controls for MixPlay](https://dev.mixer.com/guides/mixplay/introduction), we also published a new type of OAuth flow we called the "shortcode oauth" flow. This lets users visit Mixer using any device and enter a code shown in your game or app to link their accounts. This is an easier and more friendly flow than traditional OAuth, which either requires you to embed and browser and 'capture' the redirection (which can be difficult and requires the user to log in again in your app) or run a local webserver on the user's device (which has security implications and can be broken by antivirus programs). 11 | 12 | ![](./demo.gif) 13 | 14 | Today we published a set of client libraries in C# and Node.js to easily use shortcode OAuth in your app. 15 | 16 | | Language | Repository | Installation | 17 | | ----------- | ----------------------|---------------|-----------------| 18 | | Typescript, Node.js | [GitHub](https://github.com/mixer/shortcode-oauth/tree/master/nodejs) | `npm install --save @mixer/shortcode-oauth` | 19 | | C# (.NET Standard) | [GitHub](https://github.com/mixer/shortcode-oauth/tree/master/csharp) | `nuget install Microsoft.Mixer.ShortcodeOAuth` | 20 | 21 | Check out the [Shortcode reference](/reference/oauth/shortcodeauth) for more information, chat with us on [Gitter](https://gitter.im/Mixer/developers) or the [Community Discord](https://discord.gg/mixer) if you need any pointers, or [open a Github issue](https://github.com/mixer/shortcode-oauth/issues/new) if you find any problems! 22 | -------------------------------------------------------------------------------- /pages/03.blog/02.shortcode-sdks/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.blog/02.shortcode-sdks/demo.gif -------------------------------------------------------------------------------- /pages/03.blog/03.ChatListDeprecations/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deprecations coming to Chat Chatters List 3 | date: 14:00 11/05/2018 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog, sdk, client, deprecations] 8 | --- 9 | 10 | Updated on Feb 20, 2019. 11 | 12 | As Mixer grows, our API needs to grow too. This sometimes leads to deprecations. With the power of our new developer site, we're taking a more active role in announcing them. You'll see a blog post from our team detailing the changes we're making and what you need to do. The first example of this is with the deprecation of V1 of the Chat Chatters List API. 13 | 14 | # Chat Chatters List API 15 | 16 | A new version of the Chatters List API is now available. It exists in the V2 path. See "[What is V2?](https://dev.mixer.com/guides/core/whatsv2)" for more info on the V2 path. 17 | 18 | The new API has the following changes: 19 | - Removes the `/chats/{channelId}/friends` endpoint. This endpoint is not being used in any Mixer Application and we've seen a very small usage of it globally in our telemetry. 20 | - Changes the calling pattern of `/chats/{channelId}/users.` This will affect pagination. 21 | - Removes the `/chats/{channelId}/users/search` endpoint. Instead supply a `username` query parameter to `/chats/{channelId}/users` to search. 22 | - Removes some fields from the `ChatUser` model: 23 | - Removes the nested `user` field which contained: 24 | - `level` - Level of the ChatUser. 25 | - `experience` - Experience of the ChatUser. 26 | 27 | 28 | # Deprecating the Chatters List API V1 29 | 30 | With V2 available, we plan to deprecate the V1 Chatters List API on March 25, 2019. We're closely monitoring the use of these endpoints and we're actively reaching out to all parties we see who are still on the V1 API. 31 | 32 | ## What do I need to do? 33 | 34 | Before March 25, 2019, if you use the V1 Chat Chatters List API, please move to V2. On this date the V1 endpoint will be removed. 35 | 36 | ## What do I do if I have questions? 37 | 38 | Drop us a line [here](mailto:mixerdevinfo@microsoft.com). 39 | 40 | ## Documentation 41 | 42 | REST Documentation for V2 endpoints being a part of our regular REST reference is in progress so until then the documentation for these new endpoints can be found on a separate page [here](/reference/chat/chatchatterslist). 43 | 44 | We'll redirect this page back to the overall REST reference page once its in amongst the other endpoints. 45 | 46 | That's all for now, keep an eye on this blog for more posts and cool things coming soon. 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /pages/03.blog/05.OAuthActing/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Changes to OAuth and Resource Access 3 | date: 18:00 04/26/2019 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog, oauth, client, deprecations] 8 | --- 9 | 10 | With Mixer's OAuth flows it's easy for you as a developer to request and receive permissions to carry out operations on a user's account or channel. We're always excited to see the tools and utilities that are being created by our Developer Community. 11 | 12 | However, we've recently been made aware of an unintended side effect of our OAuth Systems. When receiving an OAuth Token, this token enabled you to act as the user who's owns the returned token on other resources that this user has access to. The most common cases of this are: 13 | 14 | - When the user is a channel editor on another channel than their own 15 | - When the user is a moderator in a channel other than their own 16 | 17 | To resolve this we need to make some changes to OAuth. We're going to start preventing this above use case unless a new OAuth Scope is requested on the OAuth Token. This new scope is `user:act_as` its listed on [our OAuth Scope Page](/reference/oauth/scopes). 18 | 19 | ## What we're doing to help. 20 | We recognize this is a sudden change and as such we're grandfathering existing tokens into this new system by adding the `user:act_as` scope on our end. 21 | 22 | We'll be doing this from 2019-04-24 until 2019-05-13 which gives you 2 weeks to make the change below. 23 | 24 | Grandfathered tokens that are refreshed will keep the new scope so this is only for **new** authentications with your OAuth Client. 25 | 26 | ## What you need to do. 27 | 28 | If you're operating a cloud based bot or services which uses a **single** user account's **OAuth Token** to moderate or edit **multiple other channels**, please ensure that when requesting a new token that you add `user:act_as` to the scopes requested. 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /pages/03.blog/06.ChannelProgression/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Channel Progression launching 05/01 3 | date: 18:00 04/30/2019 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog, features, channel, progression] 8 | --- 9 | 10 | As announced on our [blog](https://blog.mixer.com/2019/04/30/mixer-channel-progression-rolling-out-on-5-1/), tomorrow we're launching an Channel Progression to all Channels on Mixer on our Desktop Platform. Other platforms such as our Apps will get support for this feature in coming weeks. 11 | 12 | As detailed in our blog, Channel Progression lets users who watch Mixer Channels earn hearts to rank up in the channel they are watching. If you'd like to tap into this feature as a developer then please take a look at our documentation page [here](https://dev.mixer.com/guides/season2/fan%20progression). 13 | 14 | If you have further questions please send us an [email](mailto:mixerdevinfo@microsoft.com). 15 | -------------------------------------------------------------------------------- /pages/03.blog/07.SparkCostChanges/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Canceling Spark Cost Changes 3 | date: 13:00 05/20/2019 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog, mixplay] 8 | --- 9 | 10 | Hey Everyone, I have some exciting news. Early on in Season 2 we reported a change to MixPlay spark costing that required MixPlay users to move to a static list of MixPlay Costs, this was met with a strong reaction from you all of our developers. 11 | 12 | After much discussion. We're now canceling this change. MixPlay costing will remain dynamic and flexible going into the future. 13 | 14 | You can still read about this change here: https://dev.mixer.com/guides/season2/sparkcostchanges but I've added an alert to the top of the page stating it is cancelled and you do not need to action on it. 15 | -------------------------------------------------------------------------------- /pages/03.blog/08.NewChatRestrictions/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: New Chat Restrictions Now Available 3 | date: 13:00 06/26/2019 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog, chat] 8 | --- 9 | 10 | Hey Everyone, as mentioned on our [blog](https://blog/mixer.com?target=_blank) we're launching some new features today to help manage chat's volume and toxicity on Mixer with the goal of making Mixer safe and welcome for everyone. 11 | 12 | Two features are launching in this area. There should be minimal change for developers but here is some documentation on them to help. 13 | 14 | ## Channel Progression Rank Level Restrictions 15 | This feature lets a streamer control which channel progression rank a User must be before they are allowed to speak in a channel’s chat. 16 | ![](img/channelProgressionLevels.png) 17 | 18 | ### Developer Info 19 | 20 | This feature adds a new preference to the channel preferences object returned in any API endpoint which returns a Channel's Preferences: 21 | ```json 22 | { 23 | #... Regular channels response 24 | "preferences": { 25 | #... Other Preferences 26 | "channel:users:ascensionLevelRestrict": 5 27 | } 28 | } 29 | ``` 30 | 31 | Additionally, a new error message will be returned from chat when a user sends a message at a Channel Progression level lower than this is set. It is structured as follows: 32 | `{"type":"reply","error":{"code":4007,"message":"You need to be level 50 in this channel to chat."},"id":5}` 33 | 34 | ## Channel Progression Based CAT Bot Scaling 35 | With this new feature, a user’s CAT Bot treatment is altered depending on their Channel Progression rank. For example at a lower channel progressing rank your messages might have HIGH CATBot Treatment and at a high rank you’ll have a LOW CATBot Treatment. 36 | ![](img/catbotlevels.png) 37 | 38 | ### Developer Info 39 | 40 | This feature adds a two new preferences to the channel preferences object returned in any API endpoint which returns a Channel's Preferences: 41 | 42 | The first called `channel:catbot:enableascensionranges` controls if the custom CATBot Levels are enabled or not. The second ``channel:catbot:ascensionranges` is an object with a structure which defines the level range and catbot setting for 4 Brackets. 43 | 44 | An example snippet of a preferences object with the new preferences is below. 45 | 46 | channel:catbot:enableascensionranges": true, 47 | ```json 48 | { 49 | #... Regular channels response 50 | "preferences": { 51 | #... Other Preferences 52 | "channel:catbot:enableascensionranges": true, 53 | "channel:catbot:ascensionranges": { 54 | "1": { 55 | "minLevel": 14, 56 | "maxLevel": 100 57 | }, 58 | "2": { 59 | "minLevel": 12, 60 | "maxLevel": 13 61 | }, 62 | "3": { 63 | "minLevel": 11, 64 | "maxLevel": 11 65 | }, 66 | "4": { 67 | "minLevel": 1, 68 | "maxLevel": 10 69 | } 70 | } 71 | } 72 | } 73 | ``` 74 | 75 | ## Questions 76 | 77 | If you have questions please feel free to [contact us](mailto:mixerdevinfo@microsoft.com) 78 | 79 | -------------------------------------------------------------------------------- /pages/03.blog/08.NewChatRestrictions/img/catbotlevels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.blog/08.NewChatRestrictions/img/catbotlevels.png -------------------------------------------------------------------------------- /pages/03.blog/08.NewChatRestrictions/img/channelProgressionLevels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.blog/08.NewChatRestrictions/img/channelProgressionLevels.png -------------------------------------------------------------------------------- /pages/03.blog/09.streamer-review/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Streamer Review API & Developer Information 3 | date: 16:00 08/29/2019 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog] 8 | --- 9 | 10 | As mentioned on our [blog](https://blog.mixer.com/2019/08/26/community-update-streamer-review-and-more/). We're launching a new streamer review system which requires all non-partnered streamers to go through a process before they can stream on Mixer. 11 | 12 | # What does this mean for Developers of Applications like OBS and XSplit? 13 | 14 | When this feature becomes mandatory on 09/04 all existing stream keys for users who have not been through the review process will be revoked. Until the user carries out the Streamer Review flow they will not have a stream key. 15 | 16 | In endpoints where one would usually be included it will be omitted. 17 | 18 | # What about OAuth? 19 | 20 | If your application requests the `channel:streamKey:self` scope for a user that has not completed the Streamer Review flow then the OAuth Process will not be able to be completed. The user will be halted on the "Authorize" screen where a message will be displayed letting them know where to go to complete the flow. No tokens will be generated. 21 | 22 | # What about existing Stream Keys I have saved or cached? 23 | 24 | These will be reset/invalidated and when your application tries to use them the standard "invalid streamkey" message will be returned. 25 | 26 | If you have further questions please [reach out to us](mailto:mixerdevinfo@microsoft.com). 27 | -------------------------------------------------------------------------------- /pages/03.blog/10.mavenchanges/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Maven Changes for Developers 3 | date: 16:00 10/29/2019 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog] 8 | --- 9 | 10 | Mixer's legacy self-hosted Maven Repository has unfortunately become non-functional at a short notice and rather than reviving it we've moved our Java Packages to GitHub's Package Registry. You can read about this over on [Github's Help Section](https://help.github.com/en/github/managing-packages-with-github-package-registry/about-github-package-registry) 11 | 12 | ## What do I need to do? 13 | 14 | If you're not a Java Developer relying on one of our packages, Nothing. 15 | 16 | If you're a Java Developer using one of our Packages: 17 | - [beam-client-java](https://github.com/mixer/beam-client-java) 18 | - [beam-interactive-java](https://github.com/mixer/beam-interactive-java) - INSTRUCTIONS COMING SOON! 19 | 20 | Then you'll need to read the instructions on each package's readme for instructions on how to swap to the new package registry. 21 | 22 | If you have any questions please reach out to [MixerDevInfo](mailto:mixerdevinfo@microsoft.com). 23 | 24 | 25 | -------------------------------------------------------------------------------- /pages/03.blog/11.MixPlaySDKChanges/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: MixPlay SDK Changes 3 | date: 16:00 10/29/2019 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog] 8 | --- 9 | 10 | With continued, great feedback from the community and after careful consideration, we have decided to end support for the following MixPlay Game SDKs: 11 | - Unity 12 | - Unreal Engine 4 13 | - C++ 14 | - Python. 15 | 16 | Low latency interactivity will always be a core part of Mixer and going forward we’ll focus our resources on other platform features and streamer created MixPlay experiences. 17 | 18 | ## What did you announce today? 19 | We’re ending support for the following MixPlay SDKs: 20 | - Unity 21 | - Unreal Engine 4 22 | - C++ 23 | - Python 24 | 25 | These SDKs will continue to be available on our GitHub but we won’t ship further updates or changes to them. 26 | 27 | We’ll continue to maintain and support other SDKs not mentioned within this list. 28 | 29 | ## Will games that use these SDKs break? 30 | No, existing released titles that use these SDKs will not break but we won’t ship further updates or changes to them. You are welcome to continue using them. 31 | 32 | ## I’m working on a game that uses these SDKs, what should I do? 33 | If you’re currently using our SDKs in your game, please continue to do so. If you have questions please reach out to our team via email. 34 | 35 | ## What does this mean for the future of MixPlay? 36 | MixPlay isn’t going away, You can still use it to create interactive experiences on Mixer. We’re excited about the success of streamer customized MixPlay experiences and the tools and community that were created around them. 37 | 38 | We believe there is more we can achieve with customizable interactivity. 39 | 40 | ## I have a question that is not answered here, what can I do? 41 | Please [email us](mailto:mixerdevinfo@microsoft.com) and we’ll get back to you as soon as we can. 42 | -------------------------------------------------------------------------------- /pages/03.blog/12.AutoHostingAndMore/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Auto Hosting and More 3 | date: 16:00 02/07/2020 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog] 8 | --- 9 | 10 | # Auto Hosting and More 11 | 12 | Hey everyone, its been a cool week and I wanted to bring some changes to everyone's attention. 13 | 14 | Firstly there's some exciting changes for auto-hosting and developers, in Deek(one of the engineers behind auto-host)'s words: 15 | > If you saw the announcement yesterday, we mentioned Auto-Hosting was being tested natively on Mixer. 16 | > 17 | > Well, one size does not always fit all, so while building this feature, we decided to expand some of the capabilities for you to all leverage :smile: 18 | > 19 | > Starting right now, if you have built your own auto-hosting tool for streamers, we encourage you to send the [PUT /api/v1/{channelId}/hostee](https://dev.mixer.com/rest/index.html#channels__channelId__hostee_put) with `auto: true` in the body. 20 | > 21 | > If you have an overlay that listens for the hosted events, the results in the `channel:{channelId}:hosted` constellation event also have this same auto: true passed down with it! 22 | > 23 | > Now you have the opportunity to differentiate between a normal host and auto-hosting, enhancing the experience of your overlay, tools, etc. :) 24 | > 25 | > You can find the updated documentation for the PUT to the hostee endpoint [here](https://dev.mixer.com/rest/index.html#channels__channelId__hostee_put) 26 | 27 | > 28 | > And the updated documentation for the constellation event [here](https://dev.mixer.com/reference/constellation/events/live/channel%20hosted) 29 | 30 | 31 | Additionally, i've re-written our [Node.js ChatBot tutorial](https://dev.mixer.com/guides/chat/chatbot) to hopefully get around the confusing nested promise chain that used to be there. The code is more commented and explicit in its interactions and intentions. 32 | 33 | I hope you all have a great weekend. 34 | 35 | -------------------------------------------------------------------------------- /pages/03.blog/13.MarchChanges/blog-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: March Changes Summary 3 | date: 16:00 04/07/2020 4 | author: probableprime 5 | taxonomy: 6 | category: blog 7 | tag: [blog] 8 | --- 9 | 10 | # March Changes Summary 11 | 12 | Hey everyone, March was a very cool month at Mixer. You can read more about Mixer's general changes over on [our main blog](https://blog.mixer.com/2020/03/17/new-homepage-features-and-more/) but I wanted to call out some specific items here that are especially relevant to our developers. 13 | 14 | ## Emotes 15 | 16 | As announced in the above linked blog post, we've released a set of brand new larger global emotes. Additionally we are slowly rolling out the ability of our partnered broadcasters to upload new larger emotes. With this you will be seeing larger emotes coming down in our Chat WebSocket frames. To help with these new emote sizings we've produced a [new page on the Mixer Developer site which details emote processing](/guides/chat/emotes). 17 | 18 | ## Subscription Events 19 | 20 | Due to some changes in subscriptions, we've added a new property to the `channel:{id}:resubShared` event. This property `currentStreak` will tell you how long the number of consecutive months the user has been subscribed to this channel. The existing `totalMonths` property provides the total number of months the user has been subscribed since the beginning of time. You can read more about this on the [event's documentation page](/reference/constellation/events/live/channel%20resubshared). 21 | 22 | ## Moderation Events 23 | 24 | Within Chat several events can cause a Purge of all of a user's chat messages. In some cases it wasn't clear why a purge had been initiated. We've added properties to the `PurgeMessage` event type which inform you of what the cause of the Purge was. You can read about these on the [event's reference page](/reference/chat/events/purgemessage). 25 | 26 | ## Ad Breaks 27 | 28 | As announced in the blog post mentioned we've also released a Beta Ad Break feature which allows streamers to trigger advertisement breaks on their channel. With this feature we've also added a developer API which let's you use OAuth to trigger an ad break on a channel's behalf. You can read about how to do this on the [dedicated ad break page](/guides/core/adbreaks). 29 | 30 | ## A quick note on OAuth 31 | 32 | We've noticed a couple of oddities with some user's use of OAuth so I wanted to provide a couple of reminders: 33 | 34 | * When using OAuth tokens, Mixer uses Bearer tokens. You can read about them in great detail [here](https://tools.ietf.org/html/rfc6750) but in summary: 35 | * The value of the `Authorization` header should be `Bearer ` for example `Bearer abc123` where `abc123` is the token. 36 | * Please remember to take a look at our prior notice surrounding [resource access and OAuth](/blog/oauthacting) 37 | 38 | ## Final Notes 39 | When reporting issues or problems with our API please ensure that you're including as much information as possible. Follow our [Application Identification guide](/guides/core/applicationidentification) and ensure you're including: 40 | 41 | * Your OAuth Client ID 42 | * Timestamps of when the issue occurs 43 | * The volume of requests that are failing 44 | * Any response bodies that have error information 45 | * Any values of the `ms-cv` header you can acquire this header is called a [Correlation Vector](https://github.com/microsoft/CorrelationVector) and can help us find your issue. 46 | 47 | Thanks for reading as always please feel free to [contact us](mailto:mixerdevinfo@microsoft.com) with any questions. 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /pages/03.blog/_bios/copeet/bio.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Connor Peet 3 | image: https://avatars1.githubusercontent.com/u/2230985?s=128 4 | social: 5 | email: devinfo 6 | github: connor4312 7 | twitter: ConnorPeet 8 | mixer: Connor 9 | --- 10 | 11 | Connor is a senior software engineering focused on developer success and interactive experiences on Mixer. 12 | -------------------------------------------------------------------------------- /pages/03.blog/_bios/probableprime/bio.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ProbablePrime 3 | image: https://dev.mixer.com/blog/_bios/probableprime/logo.png 4 | social: 5 | email: mixerdevinfo 6 | github: ProbablePrime 7 | twitter: ProbablePrime 8 | mixer: ProbablePrime 9 | --- 10 | 11 | ProbablePrime is a Program Manager on Mixer. He helps products and people integrate with Mixer's Platform. 12 | -------------------------------------------------------------------------------- /pages/03.blog/_bios/probableprime/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.blog/_bios/probableprime/logo.png -------------------------------------------------------------------------------- /pages/03.blog/blog.md: -------------------------------------------------------------------------------- 1 | --- 2 | content: 3 | items: '@self.children' 4 | limit: 10 5 | filter: 6 | published: true 7 | type: 'blog-item' 8 | order: 9 | by: date 10 | dir: desc 11 | pagination: true 12 | tntsearch: 13 | index: false 14 | feed: 15 | limit: 15 16 | description: Mixer Developer Blog Feed 17 | --- 18 | 19 | Never shown, overridden by a template. 20 | -------------------------------------------------------------------------------- /pages/03.resources/02.case-studies/bethesda/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bethesda Case Study 3 | --- 4 | 5 | # Bethesda Case Study 6 | 7 | ![](showcase-bethesda.png) 8 | 9 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 10 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 11 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 12 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 13 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 14 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 15 | 16 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 17 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 18 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 19 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 20 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 21 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 22 | 23 | ## Subtitle 24 | 25 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 26 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 27 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 28 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 29 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 30 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 31 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 32 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 33 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 34 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 35 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 36 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 37 | 38 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 39 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 40 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 41 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 42 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 43 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 44 | 45 | -------------------------------------------------------------------------------- /pages/03.resources/02.case-studies/bethesda/showcase-bethesda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.resources/02.case-studies/bethesda/showcase-bethesda.png -------------------------------------------------------------------------------- /pages/03.resources/02.case-studies/case-studies.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Case Studies 3 | 4 | case_studies: 5 | - 6 | title: Bethesda 7 | subtitle: Catchy Subtitle Text 8 | image: showcase-bethesda.png 9 | link: api/case-studies/bethesda 10 | description: Lorem ipsum dolor sit amet, **consectetur adipisicing** elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat 11 | 12 | - 13 | title: Control the Show 14 | subtitle: Catchy Subtitle Text 15 | image: control-the-show.png 16 | link: https://blog.twitch.tv/guest-post-behind-the-extension-control-the-show-5cbe4f3fd39c 17 | description: Lorem ipsum dolor sit amet, **consectetur adipisicing** elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat 18 | 19 | - 20 | title: Curse Innkeeper 21 | subtitle: Catchy Subtitle Text 22 | image: showcase-curseinnkeeper.png 23 | link: https://blog.twitch.tv/curse-innkeeper-a-twitch-extension-that-makes-hearthstone-cards-and-card-mechanics-transparent-to-6b9b2cf8c522 24 | description: Lorem ipsum dolor sit amet, **consectetur adipisicing** elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat 25 | 26 | - 27 | title: Devolver Digital 28 | subtitle: Catchy Subtitle Text 29 | image: showcase-devolver.png 30 | link: https://www.polygon.com/2017/4/12/15270028/streaming-youtube-devolver-digital 31 | description: Lorem ipsum dolor sit amet, **consectetur adipisicing** elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat 32 | 33 | - 34 | title: Epic Games 35 | subtitle: Catchy Subtitle Text 36 | image: showcase-fortnite.png 37 | link: https://www.epicgames.com/fortnite/en-US/news/watch-fortnite-streams-and-get-in-game-quests 38 | description: Lorem ipsum dolor sit amet, **consectetur adipisicing** elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat 39 | 40 | - 41 | title: MasterOverwatch 42 | subtitle: Catchy Subtitle Text 43 | image: showcase-masteroverwatch.png 44 | link: https://blog.twitch.tv/masteroverwatch-overlay-a-twitch-extension-viewers-use-to-self-serve-streamer-performance-data-7f9cffee31b8 45 | description: Lorem ipsum dolor sit amet, **consectetur adipisicing** elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat 46 | 47 | --- 48 | 49 | # Case Studies 50 | 51 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat -------------------------------------------------------------------------------- /pages/03.resources/02.case-studies/control-the-show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.resources/02.case-studies/control-the-show.png -------------------------------------------------------------------------------- /pages/03.resources/02.case-studies/showcase-bethesda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.resources/02.case-studies/showcase-bethesda.png -------------------------------------------------------------------------------- /pages/03.resources/02.case-studies/showcase-curseinnkeeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.resources/02.case-studies/showcase-curseinnkeeper.png -------------------------------------------------------------------------------- /pages/03.resources/02.case-studies/showcase-devolver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.resources/02.case-studies/showcase-devolver.png -------------------------------------------------------------------------------- /pages/03.resources/02.case-studies/showcase-fortnite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.resources/02.case-studies/showcase-fortnite.png -------------------------------------------------------------------------------- /pages/03.resources/02.case-studies/showcase-masteroverwatch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/03.resources/02.case-studies/showcase-masteroverwatch.png -------------------------------------------------------------------------------- /pages/03.resources/03.youtube/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Youtube Test 3 | --- 4 | 5 | # Youtube Test 6 | 7 | [youtube autoplay=1 color=white]https://www.youtube.com/watch?v=sZKqvir0z5A[/youtube] 8 | 9 | 10 | ``` 11 | [raw] 12 | [youtube autoplay=1 color=white]https://www.youtube.com/watch?v=sZKqvir0z5A[/youtube] 13 | [/raw] 14 | ``` -------------------------------------------------------------------------------- /pages/03.resources/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | visible: false 3 | --- 4 | 5 | -------------------------------------------------------------------------------- /pages/04.downloads/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '' 3 | media_order: '' 4 | body_classes: '' 5 | order_by: '' 6 | order_manual: '' 7 | --- 8 | 9 | # Downloads 10 | 11 | Looking to get started quickly? Grab an SDK Below and Get Started! 12 | 13 | ## MixPlay 14 | 15 | | Environment | Repository / Download | Documentation | Description | 16 | | ------------------------------ | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | 17 | | Typescript, Node.js & Browsers | [GitHub](https://github.com/mixer/interactive-node) | [API Reference Docs](https://mixer.github.io/interactive-node) | Great for creating Interactive tools and utilities. Suitable for beginners. | 18 | | Java | [GitHub](https://github.com/mixer/interactive-java) | [API Reference](https://mixer.github.io/interactive-java) | Add Mixer interactive to your Java project. | 19 | 20 | ## Control Development Kit 21 | 22 | For developing with [Custom Controls](/guides/mixplay/customcontrols/introduction), you'll need the CDK: 23 | 24 | - [Windows](https://aka.ms/MixerCDK) 25 | - Mac - Coming soon! 26 | 27 | ## Chat 28 | 29 | | Environment | Repository / Download | 30 | | ------------------------------ | -------------------------------------------------------------- | 31 | | TypeScript, Node.js & Browsers | [Mixer Client Node](https://github.com/mixer/client-node) | 32 | | Java | [Mixer Client Java](https://github.com/mixer/beam-client-java) | 33 | -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e1.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e10.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e11.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e12.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e13.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e14.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e15.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e2.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e3.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e4.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e5.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e6.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e7.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e8.png -------------------------------------------------------------------------------- /pages/05.dev-show/dev-show-e9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/05.dev-show/dev-show-e9.png -------------------------------------------------------------------------------- /pages/05.dev-show/e1/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 1: Hello World!' 3 | --- 4 | 5 | # Mixer Dev Show Episode 1: Hello World 6 | Wednesday, September 17th 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin), [Hutch White](https://twitter.com/AechDub) 7 | 8 | The inaugural [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode covered platform basics, including: 9 | 10 | - [An overview of the Mixer Platform](https://youtu.be/tpHG4c-rfO8) 11 | - [A simple tutorial project in Unity](https://youtu.be/dGyTveU-pME) 12 | 13 | You can check out the [full recording here](https://youtu.be/sk2CVqdnGOg), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 14 | 15 | 16 | 17 | ## Mixer Platform Overview 18 | Our platform overview covered some basics about Mixer, how MixPlay works and how interactive events flow through Mixer between games and viewers, and the basics and concepts of configuring your integration for Mixer. 19 | 20 | 21 | 22 | ## Simple Unity Tutorial Project 23 | The simple Unity tutorial project saw us take the [2D Roguelike](https://unity3d.com/learn/tutorials/s/2d-roguelike-tutorial) sample and add the ability for viewers to spawn a Zombie inside the game while the streamer is playing, with just a few lines of code! 24 | 25 | -------------------------------------------------------------------------------- /pages/05.dev-show/e10/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 10: Unity Custom Control' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 10: Unity Custom Control 7 | Wednesday, November 28th 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The tenth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where we start building a Mini Map using Custom Controls and real time enemy locations from a Unity project. Check out the segment below: 10 | 11 | - [Unity Custom Control](https://youtu.be/FDW39QHmseg) 12 | 13 | You can check out the [full recording here](https://youtu.be/bUOXTaDFQJY), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 14 | 15 | [youtube autoplay=1 color=white]https://youtu.be/bUOXTaDFQJY[/youtube] 16 | 17 | ## Unity Custom Control 18 | In this segment, Mike and Hutch use Custom Controls to start work on a Mini Map that will show the location of enemies to viewers using information pulled from our Unity sample game. 19 | 20 | [youtube color=white]https://youtu.be/FDW39QHmseg[/youtube] 21 | -------------------------------------------------------------------------------- /pages/05.dev-show/e11/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 11: Unity Custom Control Pt. 2' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 11: Unity Custom Control Pt. 2 7 | Wednesday, December 5th 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The eleventh [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where Mike and Hutch continue working on their Tower Defense Custom Controls project from [Episode 10](https://dev.mixer.com/content/dev-show/e10). Check out the segment below: 10 | 11 | - [Unity Tower Defense Part 2](https://youtu.be/9p5p7S3-A1M) 12 | 13 | You can check out the [full recording here](https://youtu.be/Hk7fgOz3E5E), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 14 | 15 | [youtube autoplay=1 color=white]https://youtu.be/Hk7fgOz3E5E[/youtube] 16 | 17 | ## Unity Tower Defense Part 2 18 | In this segment, Mike and Hutch continue their work on the Unity Tower Defense project that utilizes Custom Controls. They expand on their Mini Map work, and also add functionality for a viewer to drop bombs in the game. 19 | 20 | [youtube color=white]https://youtu.be/9p5p7S3-A1M[/youtube] 21 | -------------------------------------------------------------------------------- /pages/05.dev-show/e12/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 12: Unity Custom Controls Pt. 3' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 12: Unity Custom Controls Pt. 3 7 | Wednesday, December 12th 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The twelfth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where more progress is made on the Unity Custom Controls project. We also talk about how to get into software development! Check out the segments below: 10 | 11 | - [How do I Start Developing?](https://youtu.be/M-yL-MaJxTc) 12 | - [Unity Custom Controls Part 3](https://youtu.be/Bh-r3t28d4w) 13 | 14 | You can check out the [full recording here](https://youtu.be/ML0E-BGa3Ws), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 15 | 16 | [youtube autoplay=1 color=white]https://youtu.be/ML0E-BGa3Ws[/youtube] 17 | 18 | ## How do I Start Developing? 19 | Mike and Hutch discuss how you can get started in software development. They briefly go over how they entered the world of the development, then answer questions from the audience. 20 | 21 | [youtube color=white]https://youtu.be/M-yL-MaJxTc[/youtube] 22 | 23 | ## Unity Custom Controls Part 3 24 | In this segment, Mike and Hutch expand on their Unity Custom Controls project that allows viewers to participate in the game. See [Episode 10](/content/dev-show/e10/) and [Episode 11](/content/dev-show/e11/) for their previous work. 25 | 26 | [youtube color=white]https://youtu.be/Bh-r3t28d4w[/youtube] -------------------------------------------------------------------------------- /pages/05.dev-show/e13/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 13: Tutorial Project Custom Control' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 13: Tutorial Project Custom Control 7 | Wednesday, December 19th 2018, hosts: [Brenna Duffitt](https://twitter.com/brennadactyl) & [Gersh Payzer](https://mixer.com/gersh) 8 | 9 | The thirteenth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where Brenna and Gersh work with the Custom Controls Tutorial Project. They also discuss controversial development practices, such as whether you should immediately develop for scale, or get your code working first and worry about scale later. Check out the segment below: 10 | 11 | - [Tutorial Project Custom Control](https://youtu.be/8k_7H6z9VyA) 12 | 13 | You can check out the [full recording here](https://youtu.be/BFbcsv3U_9s), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 14 | 15 | [youtube autoplay=1 color=white]https://youtu.be/BFbcsv3U_9s[/youtube] 16 | 17 | ## Tutorial Project Custom Control 18 | In this segment, Brenna and Gersh go over the [Tutorial Project for Custom Controls](/guides/mixplay/customcontrols/gettingstartedwithhtml). They get their "Hello World!" button working, and add functionality for the game client to send messages to viewers. 19 | 20 | [youtube color=white]https://youtu.be/8k_7H6z9VyA[/youtube] 21 | -------------------------------------------------------------------------------- /pages/05.dev-show/e14/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 14: Optimizing Custom Controls' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 14: Optimizing Custom Controls 7 | Wednesday, January 9th 2019, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The fourteenth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where Mike and Hutch work on some optimizations for their Mini Map Custom Controls project. Check out the segment below: 10 | 11 | - [Optimizing Custom Controls](https://youtu.be/rmzZbl-JSWM) 12 | 13 | If you would like to look at the code from this episode, you can find it on our GitHub [here](https://github.com/mixer/devshow/tree/master/014-survival-shooter). 14 | 15 | You can check out the [full recording here](https://youtu.be/URDn9itb400), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 16 | 17 | [youtube autoplay=1 color=white]https://youtu.be/URDn9itb400[/youtube] 18 | 19 | ## Optimizing Custom Controls 20 | In this segment, Mike and Hutch continue the development of their Mini Map that utilizes Custom Controls. They work on optimizing their code to better handle sending data to Mixer, and highlight how these optimizations can result in performance improvements. 21 | 22 | [youtube color=white]https://youtu.be/rmzZbl-JSWM[/youtube] 23 | -------------------------------------------------------------------------------- /pages/05.dev-show/e15/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 15: Custom Control Leaderboards' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 15: Custom Control Leaderboards 7 | Wednesday, January 16th 2019, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The fifteenth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where we build a Custom Controls project that makes use of our new Leaderboards endpoint. Check out the segment below: 10 | 11 | - [Sparks and Embers Leaderboards](https://youtu.be/1L0iLL--QEs) 12 | 13 | You can check out the [full recording here](https://youtu.be/15d8_x1vm6Q), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 14 | 15 | [youtube autoplay=1 color=white]https://youtu.be/15d8_x1vm6Q[/youtube] 16 | 17 | ## Sparks and Embers Leaderboards 18 | In this segment, Mike and Hutch dive into one of our newest API endpoints - the Spark and Embers Leaderboards. They build out a project that utilizes Custom Controls to display the top spenders on the channel, and the associated spender's avatar. 19 | 20 | [youtube color=white]https://youtu.be/1L0iLL--QEs[/youtube] 21 | -------------------------------------------------------------------------------- /pages/05.dev-show/e2/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 2: Viewer Agency' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 2: Viewer Agency 7 | Wednesday, September 24th 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin), [Hutch White](https://twitter.com/AechDub) 8 | 9 | The second [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode focused on achieving individual viewer agency within the game. Check out the segments below: 10 | 11 | - [Sample: Player Agency in Unity](https://youtu.be/MpiqNU58lZo) 12 | - [Sharing interactive projects with share codes](https://youtu.be/lfFPNod30Vg) 13 | 14 | You can check out the [full recording here](https://youtu.be/CYoXXvgNIa4), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 15 | 16 | [youtube autoplay=1 color=white]https://youtu.be/CYoXXvgNIa4[/youtube] 17 | 18 | ## Sharing interactive projects with share codes 19 | This short tutorial covers how you can use share codes to share your interactive projects between many users, which is especially useful during development! 20 | 21 | [youtube color=white]https://youtu.be/lfFPNod30Vg[/youtube] 22 | 23 | ## Sample: Player Agency in Unity 24 | In this tutorial we created a game with player agency for viewers on Mixer - basically we gave everyone watching a tank! We used the [Unity Tanks](https://unity3d.com/learn/tutorials/s/tanks-tutorial) tutorial and made it so that it spawns a tank for each viewer - giving them individual control. 25 | 26 | [youtube color=white]https://youtu.be/MpiqNU58lZo[/youtube] -------------------------------------------------------------------------------- /pages/05.dev-show/e3/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 3: A Prelude to Custom Controls' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 3: A Prelude to Custom Controls 7 | Wednesday, October 3rd 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Gary Waliczek](https://twitter.com/garywal) 8 | 9 | The third [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where Mike and Gary start diving in to the awesome things that you can do with [MixPlay Custom Controls](/guides/mixplay/customcontrols/introduction). Check out the segments below: 10 | 11 | - [Sample: Player Agency in Unity Pt. 2](https://youtu.be/EtlTLgMSwpk) 12 | - [Custom Controls Introduction](https://youtu.be/CBckXI1YdBA) 13 | 14 | To access the code used for this project, head on over to [GitHub](https://github.com/mixer/devshow/tree/master/003-stream-pet). 15 | 16 | You can check out the [full recording here](https://youtu.be/aHl2S4T1sHQ), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 17 | 18 | [youtube autoplay=1 color=white]https://youtu.be/aHl2S4T1sHQ[/youtube] 19 | 20 | ## Sample: Player Agency in Unity Pt. 2 21 | This is a continuation from [last week's](/content/dev-show/e2) usage of [Unity Tanks](https://unity3d.com/learn/tutorials/s/tanks-tutorial). This short segment showcases how to add player attribution to the game. 22 | 23 | [youtube color=white]https://youtu.be/EtlTLgMSwpk[/youtube] 24 | 25 | ## Custom Controls Introduction 26 | In this segment, Mike and Gary start work on making their [Game Client](/guides/mixplay/customcontrols/gameclients) and [Custom Controls](/guides/mixplay/customcontrols/introduction) to build a game playable via Mixer! 27 | 28 | [youtube color=white]https://youtu.be/CBckXI1YdBA[/youtube] 29 | -------------------------------------------------------------------------------- /pages/05.dev-show/e4/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 4: Custom Controls for Realz!' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 4: Custom Controls for Realz! 7 | Wednesday, October 10th 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The fourth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where Mike and Hutch dive deeper into [Custom Controls](/guides/mixplay/customcontrols/introduction). Check out the segments below: 10 | 11 | - [Interactive News](https://youtu.be/7DFdxph0Uik) 12 | - [Custom Controls Overview](https://youtu.be/cWUPBi7ugvc) 13 | - [Introduction to the CDK](https://youtu.be/-X_uwhh_mPk) 14 | 15 | You can check out the [full recording here](https://youtu.be/4FmqFRyw-Ag), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 16 | 17 | [youtube autoplay=1 color=white]https://youtu.be/4FmqFRyw-Ag[/youtube] 18 | 19 | ## Interactive News 20 | One of our MixPlay Exclusives, Death's Door, released an awesome update to their game using Custom Controls. This IPE, or Individual Player Experience, allows Mixer viewers to have a customized view of their inventory. If you'd like to check it out, head on over to their [Mixer Channel](https://mixer.com/deathsdoorgame) 21 | 22 | [youtube color=white]https://youtu.be/7DFdxph0Uik[/youtube] 23 | 24 | ## Custom Controls Overview 25 | Continuing from [last week's](/content/dev-show/e3) episode, Mike and Hutch give a high level overview of Custom Controls to show how everything works together. 26 | 27 | [youtube color=white]https://youtu.be/cWUPBi7ugvc[/youtube] 28 | 29 | ## Introduction to the CDK 30 | This segment goes over the CDK, or Control Development Kit. This is one of the main tools you'll need if you start developing Custom Controls with Mixer. 31 | 32 | [youtube color=white]https://youtu.be/-X_uwhh_mPk[/youtube] 33 | -------------------------------------------------------------------------------- /pages/05.dev-show/e5/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 5: Custom Controls Continued' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 5: Custom Controls Continued 7 | Wednesday, October 17th 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The fifth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where Mike and Hutch continue to explore Custom Controls. Specifically, they look at how you can leverage the Mixer API to make incredibly unique experiences. Check out the segments below: 10 | 11 | - [Interactive News](https://youtu.be/vql9Q5-JcmM) 12 | - [Custom Controls Basics Pt. 2](https://youtu.be/hWcESLaT7nc) 13 | 14 | You can check out the [full recording here](https://youtu.be/H1vpU3PvmtA), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 15 | 16 | [youtube autoplay=1 color=white]https://youtu.be/H1vpU3PvmtA[/youtube] 17 | 18 | ## Interactive News 19 | The latest MixPlay Exclusive, Halls of Horror, launched recently. Developed by iFun4All, Halls of Horror is a multiplayer exploring game that can only be played on Mixer. Head on over to their [Mixer Channel](https://mixer.com/hallsofhorror) to play! 20 | 21 | [youtube color=white]https://youtu.be/vql9Q5-JcmM[/youtube] 22 | 23 | ## Custom Controls Basics Pt. 2 24 | In this segment, Mike and Hutch explore how you can use the Mixer API in conjunction with Custom Controls to provide more contextual information to the end user. 25 | 26 | [youtube color=white]https://youtu.be/hWcESLaT7nc[/youtube] -------------------------------------------------------------------------------- /pages/05.dev-show/e6/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 6: Chat & Chatbots' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 6: Chat & Chatbots 7 | Wednesday, October 24th 2018, hosts: [Gary Waliczek](https://twitter.com/garywal) & [Brenna Duffitt](https://twitter.com/brennadactyl) 8 | 9 | The sixth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where Gary and Brenna discuss Mixer chat and building chatbots. Check out the segments below: 10 | 11 | - [Chrome Extensions](https://youtu.be/G-OrCeZtDY8) 12 | - [Chat Basics](https://youtu.be/gWlIklyrJZQ) 13 | - [Chatbot Project](https://youtu.be/xjbUNoJgkmU) 14 | 15 | If you'd like to download the code from today's episode, head on over to [GitHub](https://github.com/mixer/devshow/tree/master/006-csharp-moderating-chatbot) 16 | 17 | You can check out the [full recording here](https://youtu.be/3CYQefVe7kg), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 18 | 19 | [youtube autoplay=1 color=white]https://youtu.be/3CYQefVe7kg[/youtube] 20 | 21 | ## Chrome Extensions 22 | Brenna showcases a cool Chrome Extension that she made to blur out a deleted chat message until you hover over it. 23 | 24 | [youtube color=white]https://youtu.be/G-OrCeZtDY8[/youtube] 25 | 26 | ## Chat Basics 27 | In this short segment, Gary and Brenna quickly go over what is Mixer chat, and the various roles that a user may have. 28 | 29 | [youtube color=white]https://youtu.be/gWlIklyrJZQ[/youtube] 30 | 31 | ## Chatbot Project 32 | In this segment, Brenna and Gary discuss how to build a chat bot in C#. They also discuss [OAuth](/reference/oauth/quickdetails), which is used to authenticate the bot. 33 | 34 | [youtube color=white]https://youtu.be/xjbUNoJgkmU[/youtube] -------------------------------------------------------------------------------- /pages/05.dev-show/e7/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Live Loading with Constellation' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 7: Live Loading with Constellation 7 | Wednesday, October 31st 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The seventh [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode. In this episode, Mike and Hutch start exploring our Constellation service, which is responsible for liveloading events. Check out the segments below: 10 | 11 | - [Interactive News](https://youtu.be/dqkJXABanj8) 12 | - [Live Loading Events](https://youtu.be/hT7yjke-0fA) 13 | - [Live Loading Project](https://youtu.be/eG-nxHwN4i4) 14 | 15 | If you'd like to download the code from today's episode, head on over to [GitHub](https://github.com/mixer/devshow/tree/master/007-followers-chart) 16 | 17 | You can check out the [full recording here](https://youtu.be/siEh-azsGyc), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 18 | 19 | [youtube autoplay=1 color=white]https://youtu.be/siEh-azsGyc[/youtube] 20 | 21 | ## Interactive News 22 | This segment goes over Arms Race, a game new being developed by VVSpaceship. They are periodically playtesting the game on the [VVSpaceship Labs Channel](https://mixer.com/vvslabs), so head on over there to check it out! 23 | 24 | [youtube color=white]https://youtu.be/dqkJXABanj8[/youtube] 25 | 26 | ## Live Loading Events 27 | Constellation is the live loading event system on Mixer that allows developers to be notified when things chnage or happen on the site in real time. Mike and Hutch go over the basics, then get into a sample project that uses the technology. 28 | 29 | [youtube color=white]https://youtu.be/hT7yjke-0fA[/youtube] 30 | 31 | ## Live Loading Project 32 | Mike and Hutch dive in to their first project that uses Constellation! In this project, they utilize Custom Controls and Constellation to build a live chart that graphs the amount of their new followers. 33 | 34 | [youtube color=white]https://youtu.be/eG-nxHwN4i4[/youtube] -------------------------------------------------------------------------------- /pages/05.dev-show/e8/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Season 2' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 8: Season 2 7 | Wednesday, November 7th 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The eighth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where we check out some of the new stuff introduced in Season 2. Check out the segments below: 10 | 11 | - [Interactive News](https://youtu.be/ZTcJzWMqskE) 12 | - [Season 2 Tutorial Project](https://youtu.be/y35vpr-L-VA) 13 | 14 | You can check out the [full recording here](https://youtu.be/Rhaa4a04tpg), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 15 | 16 | [youtube autoplay=1 color=white]https://youtu.be/Rhaa4a04tpg[/youtube] 17 | 18 | ## Interactive News 19 | We recently released Season 2, which introduced a lot of cool things, such as Skills and Spark Patronage. In this segment, Mike and Hutch give a high level overview of the update, and begin talking about what this means for developers. 20 | 21 | [youtube color=white]https://youtu.be/ZTcJzWMqskE[/youtube] 22 | 23 | ## Season 2 Tutorial Project 24 | In this segment, we take a deeper dive in to what Season 2 offers for developers. Mike and Hutch continue with their Constellation project from last week, and start incorporating new things that were added in Season 2. To demonstrate some of the new capabilities, they build a simple UI that shows how many Skills were used within a channel. 25 | 26 | [youtube color=white]https://youtu.be/y35vpr-L-VA[/youtube] -------------------------------------------------------------------------------- /pages/05.dev-show/e9/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Episode 9: Tower Defense' 3 | cache_enable: false 4 | --- 5 | 6 | # Mixer Dev Show Episode 9: Tower Defense 7 | Wednesday, November 14th 2018, hosts: [Mike Blouin](https://twitter.com/MichaelBlouin) & [Hutch White](https://twitter.com/AechDub) 8 | 9 | The ninth [#MixerDevShow](https://twitter.com/hashtag/MixerDevShow) episode, where we talk about upcoming deprecations and work on a Unity Tower Defense game. Check out the segments below: 10 | 11 | - [Interactive News](https://youtu.be/DVOv2lVZIYc) 12 | - [Unity Tower Defense](https://youtu.be/qY1uZ6CVmDE) 13 | 14 | You can check out the [full recording here](https://youtu.be/yuTTE0rY-K0), and be sure to [**join us live Wednesdays at 1pm PST/4pm EST**](https://mixer.com/MixerDevShow) 15 | 16 | [youtube autoplay=1 color=white]https://youtu.be/yuTTE0rY-K0[/youtube] 17 | 18 | ## Interactive News 19 | We have been making a lot of changes in the backend, and at times this means we need to deprecate things. This segment goes over the upcoming deprecation of the Version 1 Chat Chatter List, and we discuss moving to Version 2. The move to V2 will need occur by December 10th, 2018. 20 | 21 | [youtube color=white]https://youtu.be/DVOv2lVZIYc[/youtube] 22 | 23 | ## Unity Tower Defense 24 | In this segment, Mike and Hutch dive in to building a Unity Tower Defense game that incorporates MixPlay functionality. 25 | 26 | [youtube color=white]https://youtu.be/qY1uZ6CVmDE[/youtube] -------------------------------------------------------------------------------- /pages/05.legal/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: false 3 | visible: false 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /pages/developer-account/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Developer Account 3 | --- 4 | 5 | # Mixer Developer Accounts 6 | 7 | Thanks for your interest in a Mixer Developer Account. 8 | 9 | Mixer doesn't have any developer account status and you don't need to register for a developer account to [get started](/). Some features do require some extra steps though. 10 | 11 | These are: 12 | - Test Stream Access - Click [here](/guides/test-streams/) link to go to the guide for this feature. 13 | 14 | If you're **NOT** looking for a developer account but would like to make an inquiry about our developer platform then please [Contact Us](mailto:mixerdevinfo@microsoft.com). 15 | 16 | -------------------------------------------------------------------------------- /pages/feed/docs.md: -------------------------------------------------------------------------------- 1 | --- 2 | visible: false 3 | content: 4 | items: 5 | '@taxonomy.category': 'docs' 6 | order: 7 | by: date 8 | dir: desc 9 | --- 10 | 11 | Non-visible page for RSS feed page collection. RSS feed URL is ../feed.rss 12 | -------------------------------------------------------------------------------- /pages/footer/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Global Footer' 3 | copyright: 'Copyright Microsoft. [Spot an issue?](https://github.com/mixer/developer-docs/issues/new)' 4 | links: 5 | Mixer: 6 | Home: https://mixer.com 7 | Browse: https://mixer.com/browse/all 8 | About: https://mixer.com//about 9 | Contact: https://mixer.com//contact 10 | Social: 11 | Twitter: 'https://twitter.com/WatchMixer' 12 | GitHub: 'https://github.com/mixer' 13 | Gitter.im: 'https://gitter.im/Mixer/developers' 14 | Facebook: 'https://facebook.com/WatchMixer' 15 | Network: 16 | mixer.com: 'https://mixer.com/' 17 | Blog: 'https://blog.mixer.com/' 18 | Feedback: 'https://feedback.mixer.com/forums/382521-lazers-and-shiny-things/category/174978-developer-ecosystem' 19 | Discord: 'https://discord.gg/mixer' 20 | Legal: 21 | Attributions: '/legal/attributions' 22 | 'Developer Agreement': 'legal/developer-agreement' 23 | 'Privacy and Cookies': 'https://mixer.com/about/privacy' 24 | 'Terms of Service': 'https://mixer.com/about/tos' 25 | DMCA/Abuse: 'https://mixer.com/about/dmca' 26 | --- 27 | 28 | -------------------------------------------------------------------------------- /pages/home/devbot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mixer/developer-docs/1f7f41da10c4a2537f8706484372329d0bc06921/pages/home/devbot.png -------------------------------------------------------------------------------- /pages/home/home.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Home 3 | body_classes: home 4 | 5 | hero: 6 | text: "Build the **Next big thing** \n\nfor the millions of creators & viewers on Mixer" 7 | buttons: 8 | primary: 9 | text: Start Building 10 | url: /downloads 11 | secondary: 12 | - 13 | text: Integrate a game with Mixer 14 | icon: icon-MixerInteractiveSolid 15 | url: /guides/mixplay 16 | - 17 | text: Build a Chat Bot 18 | icon: icon-MixerChatSolid 19 | url: /guides/chat/chatbot 20 | - 21 | text: Get Live Updates 22 | icon: icon-MixerRingerSolid 23 | url: /guides/core/liveupdatesguides 24 | - 25 | text: Query our API 26 | icon: icon-MixerPollSolid 27 | url: /guides/core 28 | 29 | sections: 30 | - 31 | title: MixPlay 32 | color: gold-background 33 | icon: icon-MixerSparksSolid 34 | text: Create revolutionary new ways for viewers to engage with streamers through controls & widgets on Mixer. 35 | link: /guides/mixplay 36 | - 37 | title: Chat 38 | color: blue-background 39 | icon: icon-MixerChatSolid 40 | text: Create Bots and connect with Mixer's Community via Chat. 41 | link: /guides/chat 42 | - 43 | title: Core API 44 | color: pink-background 45 | icon: icon-News 46 | text: Discover and query data about Mixer's Platform such as the Top Games, Who has the most sparks and more. 47 | link: /guides/core 48 | --- 49 | 50 | # Intro to Mixer Development 51 | 52 | **Welcome to Mixer!** 53 | Get familiar with the Mixer developer platform and it's features. 54 | 55 | -------------------------------------------------------------------------------- /pages/oauthreturn/doc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'OAuth Return' 3 | visible: false 4 | slug: 'oauthreturn' 5 | oauthreturn: true 6 | --- 7 | # Authentication Successful 8 | 9 | Thank you! 10 | -------------------------------------------------------------------------------- /pages/tags/tags.md: -------------------------------------------------------------------------------- 1 | --- 2 | visible: false 3 | tntsearch: 4 | index: false 5 | --- 6 | 7 | Never shown, overridden by a template. 8 | --------------------------------------------------------------------------------