├── .gitignore ├── api ├── devs.ouya.tv │ ├── api-razer-session.response.json │ ├── api-v1-credit_card.put.response.json │ ├── api-v1-sessions.response-valid.json │ ├── api-v1-themes.response.json │ ├── api-v1-partner_builds.exit.json │ ├── api-v1-details.response-unlisted.json │ ├── api-v1-partner_builds-release_notes.response.json │ ├── api-v1-sessions.response-invalid.json │ ├── api-v1-wallet.response.json │ ├── agreements-marketplace.html.response.html │ ├── api-v1-games-xxx-purchases.post.request-decrypted.json │ ├── api-v1-gamers-me-agreements.response.json │ ├── api-v1-developers-xxx-current_gamer.response.json │ ├── api-v1-credit_card.post.response.json │ ├── api-v1-gamers-me.response.json │ ├── api-v1-queued_downloads.response-2.json │ ├── api-v1-search.response.json │ ├── api-razer-gamer.put.rst │ ├── api-v1-console_configuration.response.json │ ├── api-v1-discover-tutorials.rst │ ├── api-v1-wallet.response-2.json │ ├── api-v1-credit_card.put.get-body.txt │ ├── api-v1-details.response-button-url.json │ ├── api-v1-gamers-me-apps-developed.rst │ ├── api-v1-ratings.response.json │ ├── api-v1-crash_report.rst │ ├── api-v1-details.response-button-appdetails.json │ ├── api-v1-apps-xxx-download.response.json │ ├── api-v1-queued_downloads.response.json │ ├── api-v1-gamers.response-invalid.json │ ├── api-v1-games-xxx-purchases.post.request-nocrypt.json │ ├── api-v1-details.response-button-switchable.json │ ├── api-v1-games-xxx-purchases.response-decrypted.json │ ├── api-v1-developers-xxx-products.response.json │ ├── update_strings.txt.response.txt │ ├── api-v1-games-xxx-purchases.response.json │ ├── update_strings.txt.rst │ ├── api-razer-gamer.post.rst │ ├── agreements-marketplace.html.rst │ ├── api-v1-ratings.rst │ ├── api-firmware_builds.response-short.json │ ├── api-v1-premium_purchases.rst │ ├── api-v1-console_configuration.rst │ ├── api-v1-discover.response-bundle.json │ ├── api-v1-games-xxx-purchases.post.response.json │ ├── api-v1-gamers-me.rst │ ├── api-v1-apps-xxx-download.rst │ ├── api-v1-gamers-me-user_messages.rst │ ├── api-v1-developers-xxx-current_gamer.rst │ ├── api-v1-recommendations.rst │ ├── api-v1-gamers-me-agreements.rst │ ├── api-v1-discover-home.rst │ ├── api-v1-queued_downloads-xxx.delete.rst │ ├── api-v1-gamers-me-consoles.rst │ ├── api-firmware_builds.rst │ ├── api-v1-recommendations.response.json │ ├── api-v1-ratings.post.rst │ ├── api-v1-gamers-me-agreements.put.rst │ ├── api-v1-apps-xxx.rst │ ├── api-v1-credit_card.put.rst │ ├── api-v1-wallet.rst │ ├── api-v1-credit_card.post.rst │ ├── api-v1-events.rst │ ├── api-v1-search.rst │ ├── api-v1-partner_builds.response.json │ ├── api-v1-partner_builds-release_notes.rst │ ├── api-v1-developers-xxx-products.rst │ ├── api-v1-queued_downloads.rst │ ├── api-v1-themes.rst │ ├── api-v1-games-xxx-community_content.post.rst │ ├── api-v1-gamers-key.put.rst │ ├── api-razer-session.rst │ ├── api-v1-sessions.rst │ ├── api-v1-gamers.rst │ ├── api-v1-games-xxx-community_content.rst │ ├── api-v1-games-xxx-purchases.post.rst │ ├── api-v1-apps-xxxuuid-response.json │ ├── api-v1-premium_purchases.response.json │ ├── api-v1-details.response-bundle.json │ ├── api-v1-games-xxx-purchases.rst │ ├── api-v1-apps-xxx.response-bombsquad.json │ ├── api-v1-apps-xxx.response.json │ ├── api-v1-details.rst │ ├── api-v1-discover.response.json │ ├── api-v1-partner_builds.rst │ ├── api-v1-details.response-app.json │ ├── api-v1-discover.rst │ ├── api-v1-discover-home.response.json │ ├── api-v1-events.request.urlencoded │ ├── api-v1-events.request.json │ └── api-v1-details.response-bundle-full.json ├── status.ouya.tv │ └── api-v1-status.rst ├── www.ouya.tv │ └── system_message.rst ├── ouya-updates.s3.amazonaws.com │ ├── updates-ouya_1_1.rst │ ├── updates-ouya_1_1.json │ └── updates-ouya_1_1.html ├── ott9.wpstn.com │ └── live.rst └── configuration.rst ├── styles.css ├── headers.rst └── README.rst /.gitignore: -------------------------------------------------------------------------------- 1 | /*.htm 2 | /*.html 3 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-razer-session.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "00702342-0000-1111-2222-c3e1500cafe1" 3 | } 4 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-credit_card.put.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "country": null, 3 | "success": true 4 | } 5 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-sessions.response-valid.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "96bfeaae-212d-447b-b4bf-caa5e86c0502" 3 | } 4 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-themes.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "background_style": "static", 3 | "background": "", 4 | "video": "" 5 | } 6 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-partner_builds.exit.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [ 3 | { 4 | "action": "exit" 5 | } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-details.response-unlisted.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "message": "Unknown application", 4 | "code": 2005 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-partner_builds-release_notes.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "releaseNotes": "This is the latest firmware for the Razer Forge TV." 3 | } 4 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-sessions.response-invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "message": "Invalid authentication data", 4 | "code": 2001 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-wallet.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "requiresPaymentMethod": true, 3 | "balance": 0, 4 | "credit_card": null, 5 | "currency": "EUR" 6 | } 7 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/agreements-marketplace.html.response.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cweiske/ouya-store-api/master/api/devs.ouya.tv/agreements-marketplace.html.response.html -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-games-xxx-purchases.post.request-decrypted.json: -------------------------------------------------------------------------------- 1 | { 2 | "identifier":"SONIC4EP1FULL_001", 3 | "testing":"true", 4 | "uuid":"2ba72281837f0df3" 5 | } 6 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers-me-agreements.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "marketplace_required_version": 2, 3 | "marketplace": 0, 4 | "privacy_required_version": 0, 5 | "privacy": 0 6 | } 7 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-developers-xxx-current_gamer.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "gamer": { 3 | "username": "cwdev3", 4 | "uuid": "0a6f5fc0-bf9b-42b2-a4d0-69f2c8e4d5da" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-credit_card.post.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "one_time_token": "C187D8AE8970435C9638C58C8351E2DEF975680B737A4B55A3D314BF0C477F2A", 3 | "redirect_url": "https://ott9.wpstn.com/live/" 4 | } 5 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers-me.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "gamer": { 3 | "uuid": "0a6f5fc0-bf9b-42b2-a4d0-69f2c8e4d5da", 4 | "settings": {}, 5 | "founder": false, 6 | "email": "cwdev3@example.org", 7 | "username": "cwdev3" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-queued_downloads.response-2.json: -------------------------------------------------------------------------------- 1 | { 2 | "queue": [ 3 | { 4 | "versionUuid": "", 5 | "title": "Sonic The Hedgehog 4 Episode I", 6 | "source": "gamer", 7 | "uuid": "com.sega.sonic4epi" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-search.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "count": 1, 3 | "results": [ 4 | { 5 | "title": "Frightfight", 6 | "url": "ouya://launcher/details?app=com.appsolutegames.frightfight", 7 | "contentRating": "Everyone" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-razer-gamer.put.rst: -------------------------------------------------------------------------------- 1 | ============================================ 2 | ``PUT https://devs.ouya.tv/api/razer/gamer`` 3 | ============================================ 4 | 5 | Update the gamer profile (store the nickname during login). 6 | 7 | FIXME: Undocumented. 8 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-console_configuration.response.json: -------------------------------------------------------------------------------- 1 | {"BTC_LAUNCHER_PACKAGES":"tv.ouya.xbmc,tunein.player,tv.twitch.android.viewer,com.plexapp.android,tv.ouya.bbciplayer,tv.ouya.hulu,tv.ouya.minecrafttv,tv.ouya.ouyabrowser,tv.ouya.pandora,tv.ouya.visiomgo,tv.ouya.youtube,tv.ouya.tubitv"} -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-discover-tutorials.rst: -------------------------------------------------------------------------------- 1 | ====================================================== 2 | ``GET https://devs.ouya.tv/api/v1/discover/tutorials`` 3 | ====================================================== 4 | 5 | Loaded then the user enters the "develop" menu. 6 | 7 | FIXME 8 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-wallet.response-2.json: -------------------------------------------------------------------------------- 1 | { 2 | "balance": 0.0, 3 | "credit_card": { 4 | "expires_at": "09/30/2016", 5 | "last_four": "1234", 6 | "provider": "MasterCard" 7 | }, 8 | "currency": "USD", 9 | "requiresPaymentMethod": true 10 | } 11 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-credit_card.put.get-body.txt: -------------------------------------------------------------------------------- 1 | HTTP/1.1 303 See Otherlocation: https://devs.ouya.tv/wpsuccess?OTT=C187D8AE8970435C9638C58C8351E2DEF975680B737A4B55A3D314BF0C477F2A 2 | Content-Length: 9 3 | Via: 1.1 localhost (Apache-HttpClient/UNAVAILABLE (cache)) 4 | Date: Wed, 17 Jun 2015 21:51:23 GMT 5 | See Other 6 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-details.response-button-url.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Game", 3 | "title": "Bloo Kid 2", 4 | "buttons": [ 5 | { 6 | "bold": false, 7 | "url": "http://cweiske.de/", 8 | "text": "Open developer page" 9 | } 10 | ], 11 | ... 12 | } 13 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers-me-apps-developed.rst: -------------------------------------------------------------------------------- 1 | ============================================================ 2 | ``GET https://devs.ouya.tv/api/v1/gamers/me/apps/developed`` 3 | ============================================================ 4 | 5 | Loaded then the user enters the "develop" menu and activates 6 | the "builds" menu item. 7 | 8 | FIXME 9 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-ratings.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "ratings": [ 3 | { 4 | "score": 4, 5 | "game": "com.grahamweldon.games.puzzle2048" 6 | }, 7 | { 8 | "score": 2, 9 | "game": "com.baKno.Motorbike" 10 | }, 11 | { 12 | "score": 4, 13 | "game": "org.jfedor.frozenbubble" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-crash_report.rst: -------------------------------------------------------------------------------- 1 | ================================================= 2 | ``POST https://devs.ouya.tv/api/v1/crash_report`` 3 | ================================================= 4 | 5 | When the OUYA launcher crashed, it saves a crash log. 6 | When the OUYA reboots, it tries to send the crash log data 7 | to this URL. 8 | 9 | FIXME 10 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-details.response-button-appdetails.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Game", 3 | "title": "Bloo Kid 2", 4 | "buttons": [ 5 | { 6 | "bold": false, 7 | "url": "ouya://launcher/details?app=de.eiswuxe.blookid2_unlocked", 8 | "text": "Show unlocked" 9 | } 10 | ], 11 | ... 12 | } 13 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-apps-xxx-download.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "downloadLink": "http://cds.t2z5c2q6.hwcdn.net/apps/a137f31c-ad28-47e6-ae43-0a346ebe249a/com.toa.tetrisFusionOuya/0fba3bba-83e0-4e3e-9f29-409258429757/Gx9cZz0KTRCNstv78Mq5_ToaFusionOuya-2.0.1r.apk", 4 | "contentRating": "Everyone", 5 | "version": "0fba3bba-83e0-4e3e-9f29-409258429757", 6 | "fileSize": 41125055 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-queued_downloads.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "queue": [ 3 | { 4 | "versionUuid": "", 5 | "title": "Tetris Battle Fusion", 6 | "source": "new-user", 7 | "uuid": "com.toa.tetrisFusionOuya" 8 | }, 9 | { 10 | "versionUuid": "", 11 | "title": "BombSquad", 12 | "source": "new-user", 13 | "uuid": "net.froemling.bombsquad" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers.response-invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "data": { 4 | "username": [ 5 | "can't be blank", 6 | "is too short (minimum is 3 characters)", 7 | "is invalid" 8 | ], 9 | "password": [ 10 | "can't be blank", 11 | "cannot contain username" 12 | ] 13 | }, 14 | "message": "Validation errors occurred", 15 | "code": 2006 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-games-xxx-purchases.post.request-nocrypt.json: -------------------------------------------------------------------------------- 1 | blob=eyAia2V5IiA6ICJHcnl0dnRSYjY5TDh6L3pIT3RTdGFnPT0iLCAiaXYiIDogIjZzMDd3OGo3VFNleVhQdzBsMXdvRUE9PSIsICJibG9iIiA6ICJleUpwWkdWdWRHbG1hV1Z5SWpvaVoyOWlYMloxYkd4ZloyRnRaVjkxYm14dlkyc2lMQ0owWlhOMGFXNW5Jam9pZEhKMVpTSXNJblYxYVdRaU9pSTNOak0xTjJFME9XRm1NVFk0WWpJNUluMD0iIH0%3D&iv=QHpnmyEf7BGZhTnK37NggQ%3D%3D&key=bdR0jZ22clKqJwOsyYdn8w%3D%3D&auth_token=00702342-0000-1111-2222-c3e1500cafe1 2 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-details.response-button-switchable.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Game", 3 | "title": "Bloo Kid 2", 4 | "buttons": [ 5 | { 6 | "bold": false, 7 | "status_url": "http://example.org/activation-status", 8 | "url": "http://example.org/activate", 9 | "off_url": "http://example.org/deactivate", 10 | "text": "Activate feature", 11 | "on_text": "Deactivate feature" 12 | } 13 | ], 14 | ... 15 | } 16 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-games-xxx-purchases.response-decrypted.json: -------------------------------------------------------------------------------- 1 | { 2 | "purchases": [ 3 | { 4 | "purchaseDate": 1576845859000, 5 | "generateDate": 1576845859000, 6 | "identifier": "blookid2_full", 7 | "gamer": "00702342-0000-1111-2222-c3e1500cafe2", 8 | "uuid": "0dc813a0-37d5-11ea-9ea4-075f44abe85b", 9 | "priceInCents": 399, 10 | "localPrice": 3.99, 11 | "currency": "EUR" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 3ex 15%; 3 | font-family: helvetica; 4 | color: #222; 5 | } 6 | 7 | header code, #contents code { 8 | font-size: inherit; 9 | border: none; 10 | background-color: transparent; 11 | color: inherit; 12 | } 13 | h1 { 14 | text-align: center; 15 | margin-bottom: 2ex; 16 | } 17 | h2 { 18 | margin-top: 3ex; 19 | padding-top: 1ex; 20 | border-top: 1px solid grey; 21 | } 22 | 23 | dd { 24 | margin-left: 3ex; 25 | } 26 | 27 | span.literal { 28 | font-family: monospace; 29 | } 30 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-developers-xxx-products.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "developerName": "AppBarbecue Inc.", 3 | "currency": "USD", 4 | "products": [ 5 | { 6 | "type": "entitlement", 7 | "description": "Instantly unlock full game with all Pro Levels. The challenging puzzles will take days to solve. Explore Assyria, Hanging Gardens & more. ", 8 | "percentOff": 0, 9 | "originalPrice": 4.99, 10 | "localPrice": 4.99, 11 | "priceInCents": 499, 12 | "name": "Unlock All Pro Levels", 13 | "identifier": "unlock_pro" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /api/status.ouya.tv/api-v1-status.rst: -------------------------------------------------------------------------------- 1 | =========================================== 2 | ``GET http://status.ouya.tv/api/v1/status`` 3 | =========================================== 4 | 5 | Check if the internet connection is working by fetching an empty file. 6 | 7 | HTTP request 8 | ============ 9 | Protocol 10 | ``http`` 11 | Method 12 | ``GET`` 13 | Host 14 | ``status.ouya.tv`` 15 | Path 16 | ``/api/v1/status`` 17 | Headers 18 | None of the standard headers. 19 | 20 | ``User-Agent`` 21 | ``Ouya-Connection-Test`` 22 | 23 | 24 | HTTP response 25 | ============= 26 | Status code 27 | ``204 No Content`` 28 | 29 | Empty body. 30 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/update_strings.txt.response.txt: -------------------------------------------------------------------------------- 1 | Preparing to televise the Revolution… 2 | Downloading awesome sauce… 3 | Maximizing fun level… 4 | Shifting bits… 5 | Tasting rainbows… 6 | Herding cats… 7 | Aligning synergies… 8 | Shooting stars… 9 | Well, I never! ಠ_ರೃ 10 | Bending genres… 11 | Stretching analogies… 12 | Calculating odds… 13 | Peeling away layers… 14 | Reducing complexity… 15 | Opening flaps… 16 | Inventing emoticons… ≈:¬D 17 | Sharpening skates… 18 | Keeping calm… 19 | Refactoring bezier curves… 20 | We Must Perform A Quirkafleeg… 21 | To be honest, just downloading a firmware update… 22 | Rearranging deckchairs… 23 | Arming Photon Torpedoes… 24 | Adding the fun… 25 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-games-xxx-purchases.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "blob": "0F/7D3gtCgLNJ6pZsy8M5LOLMlNsKPouBlY2VvYeTSF+k5LZQR0Otbp8vZXV\nS8Ad/hlQAuqrVgnLYEO1gxadfWQnQE1ZEoOnGcxBiNL2svOftt1uonvyTqBt\nKz5qLrd2oNI8V65dX+0ydZ7IwT5TOglC4B/YHKjA32GYNaw7GaNMmu3zJVfF\nJblVT4bZDOeyxTLanp3Fan7fZ6AkMlWy81T5RMf9vB/PBkUWlpIUZeUToXBT\n6HSRV1Ke4kfkyvmY2WisxJ0dApkcgS+bdbWhH7JsdMTT+zwUISxav5iJLkVt\n1fA1g5WN8NwVzb2OKPZcAQm1d/TnsqUnMQBfDAFaji7ADZ0Ukd0xxsirYQTW\nWpNJbFVtAJpkLNjEqVSVWqr0\n", 3 | "iv": "t3jir1LHpICunvhlM76edQ==\n", 4 | "key": "CqREllniR2CZsTdqGlSHq+b1n/ludDCPV8AAaR3aF4va8lckIRONsvQmndJS\niccb/UeYHXQOf2o06/oR8rGJvrAf598K7a7QQSSY1u6Btd8op/nOzCn+F7Q5\n4tqu7qvlVRrIMDIQtms/SfQTE2XEyKvEQVm2N/PhbdjXmXmgJHU=\n" 5 | } 6 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/update_strings.txt.rst: -------------------------------------------------------------------------------- 1 | =============================================== 2 | ``GET https://devs.ouya.tv/update_strings.txt`` 3 | =============================================== 4 | 5 | Labels to show when updating the firmware. 6 | 7 | 8 | HTTP request 9 | ============ 10 | Protocol 11 | ``https`` 12 | Method 13 | ``GET`` 14 | Host 15 | ``devs.ouya.tv`` 16 | Path 17 | ``/update_strings.txt`` 18 | Headers 19 | None of the standard headers required. 20 | GET parameters 21 | None 22 | 23 | 24 | HTTP response 25 | ============= 26 | Plain text file with one string per line 27 | 28 | 29 | Example 30 | ------- 31 | .. include:: update_strings.txt.response.txt 32 | :code: 33 | :end-line: 5 34 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-razer-gamer.post.rst: -------------------------------------------------------------------------------- 1 | ============================================= 2 | ``POST https://devs.ouya.tv/api/razer/gamer`` 3 | ============================================= 4 | 5 | Register a new account on a Razer Forge TV. 6 | 7 | Similar to `POST https://devs.ouya.tv/api/v1/gamers`_, 8 | but uses different POST data. 9 | 10 | 11 | Request 12 | ======= 13 | 14 | POST data 15 | --------- 16 | ``email`` 17 | E-mail address 18 | ``password`` 19 | Password 20 | ``email_opt_out`` 21 | Inverted checkbox "Opt-in for emails from Razer". 22 | 23 | Value: ``true`` or ``false`` 24 | 25 | Response 26 | ======== 27 | 28 | See `POST https://devs.ouya.tv/api/v1/gamers`_. 29 | 30 | Validation error for e-mail is in the ``email`` property. 31 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/agreements-marketplace.html.rst: -------------------------------------------------------------------------------- 1 | ======================================================== 2 | ``GET https://devs.ouya.tv/agreements/marketplace.html`` 3 | ======================================================== 4 | 5 | Terms of services you have to accept during registration. 6 | 7 | Fetched by the browser / web view. 8 | 9 | 10 | HTTP request 11 | ============ 12 | Protocol 13 | ``https`` 14 | Method 15 | ``GET`` 16 | Host 17 | ``devs.ouya.tv`` 18 | Path 19 | ``/agreements/marketplace.rst`` 20 | Headers 21 | None of the standard headers required. 22 | GET parameters 23 | None 24 | 25 | 26 | HTTP response 27 | ============= 28 | HTML file 29 | 30 | 31 | See also 32 | ======== 33 | - `GET https://devs.ouya.tv/api/v1/gamers/me/agreements`_ 34 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-ratings.rst: -------------------------------------------------------------------------------- 1 | =========================================== 2 | ``GET https://devs.ouya.tv/api/v1/ratings`` 3 | =========================================== 4 | 5 | Get a list of games and the ratings the user made for them. 6 | 7 | 8 | HTTP request 9 | ============ 10 | Protocol 11 | ``https`` 12 | Method 13 | ``GET`` 14 | Host 15 | ``devs.ouya.tv`` 16 | Path 17 | ``/api/v1/ratings`` 18 | Headers 19 | Standard headers 20 | GET parameters 21 | ``auth_token`` 22 | Same as ``X-OUYA-AuthToken`` 23 | 24 | 25 | HTTP response 26 | ============= 27 | Status code 28 | ``200 OK`` 29 | Content-type 30 | ``application/json; charset=utf-8`` 31 | 32 | 33 | Example 34 | ------- 35 | 36 | .. include:: api-v1-ratings.response.json 37 | :code: 38 | -------------------------------------------------------------------------------- /api/www.ouya.tv/system_message.rst: -------------------------------------------------------------------------------- 1 | ========================================== 2 | ``GET https://www.ouya.tv/system_message`` 3 | ========================================== 4 | 5 | Unknown 6 | 7 | Usage 8 | ===== 9 | - After storing credit card result in 10 | `PUT https://devs.ouya.tv/api/v1/credit_card`_. 11 | 12 | HTTP request 13 | ============ 14 | Protocol 15 | ``https`` 16 | Method 17 | ``GET`` 18 | Host 19 | ``www.ouya.tv`` 20 | Path 21 | ``//system_message`` 22 | Headers 23 | ``User-Agent`` 24 | ``OUYA 0 1.00 1.2.1427_r1`` 25 | GET parameters 26 | ``build``: 27 | ``1.2.1427_r1`` 28 | 29 | OUYA firmware version 30 | 31 | HTTP response 32 | ============= 33 | Status code 34 | ``403 Forbidden`` 35 | 36 | This was probably once used, but now does only return an error. 37 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-firmware_builds.response-short.json: -------------------------------------------------------------------------------- 1 | { 2 | "result": [ 3 | { 4 | "incremental": false, 5 | "filename": "OUYA-1.2.1427-r1.zip", 6 | "timestamp": "1418407476", 7 | "md5sum": "3a95be82b4c33bd68353dc314346f39f", 8 | "channel": "stable", 9 | "url": "http://cds.t2z5c2q6.hwcdn.net/ota/RC-OUYA-1.2.1427-r1_ota.zip", 10 | "requiredUpto": "1.2.995", 11 | "changes": "https://devs.ouya.tv/api/changelog/3a95be82b4c33bd68353dc314346f39f.txt", 12 | "changesLocalized": { 13 | "de": " \r\n\r\n...", 14 | "it": "\r\n\r\n..", 15 | "fr": "\r\n\r\n..", 16 | "es": "\r\n\r\n..", 17 | "en": "\r\n\r\n.." 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-premium_purchases.rst: -------------------------------------------------------------------------------- 1 | ===================================================== 2 | ``GET https://devs.ouya.tv/api/v1/premium_purchases`` 3 | ===================================================== 4 | 5 | Get a list of all games that have been bought. 6 | 7 | 8 | HTTP request 9 | ============ 10 | Protocol 11 | ``https`` 12 | Method 13 | ``GET`` 14 | Host 15 | ``devs.ouya.tv`` 16 | Path 17 | ``/api/v1/premium_purchases`` 18 | Headers 19 | Standard headers 20 | GET parameters 21 | ``auth_token`` 22 | Same as ``X-OUYA-AuthToken`` 23 | 24 | 25 | HTTP response 26 | ============= 27 | Status code 28 | ``200 OK`` 29 | Content-type 30 | ``application/json; charset=utf-8`` 31 | 32 | Full details of the apps. 33 | 34 | Example 35 | ------- 36 | 37 | .. include:: api-v1-premium_purchases.response.json 38 | :code: 39 | -------------------------------------------------------------------------------- /api/ouya-updates.s3.amazonaws.com/updates-ouya_1_1.rst: -------------------------------------------------------------------------------- 1 | ================================================================== 2 | ``GET http://ouya-updates.s3.amazonaws.com/updates-ouya_1_1.json`` 3 | ================================================================== 4 | 5 | Information about the latest firmware. 6 | Only used by old firmware versions like ``1.0.138`` and ``1.0.158``. 7 | 8 | Firmware ``1.0.248`` and later do not check this URL anymore and 9 | use `GET https://devs.ouya.tv/api/firmware_builds`_ instead. 10 | 11 | 12 | HTTP request 13 | ============ 14 | Protocol 15 | ``http`` 16 | Method 17 | ``GET`` 18 | Host 19 | ``ouya-updates.s3.amazonaws.com`` 20 | Path 21 | ``/updates-ouya_1_1.json`` 22 | 23 | 24 | HTTP response 25 | ============= 26 | Status code 27 | ``200 OK`` 28 | 29 | .. include:: updates-ouya_1_1.json 30 | :code: 31 | -------------------------------------------------------------------------------- /api/ouya-updates.s3.amazonaws.com/updates-ouya_1_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "result": [ 3 | { 4 | "filename": "OUYA-1.2.1084-r1.zip", 5 | "timestamp": "1400714704", 6 | "md5sum": "ed9f1712988c5ec2033f44fabe8e6297", 7 | "channel": "stable", 8 | "url": "http://devs-ouya-tv-prod.s3.amazonaws.com/ota/RC-OUYA-1.2.1084-r1_ota.zip", 9 | "requiredUpto": "1.2.995", 10 | "changes": "https://devs.ouya.tv/api/changelog/ed9f1712988c5ec2033f44fabe8e6297.txt", 11 | "changesLocalized": { 12 | "en": "\r\n\r\n \r\n...", 13 | "es": "\r\n\r\n \r\n...", 14 | "fr": "\r\n\r\n \r\n...", 15 | "it": "\r\n\r\n \r\n...", 16 | "de": "\r\n\r\n \r\n..." 17 | }, 18 | "incremental": false 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-console_configuration.rst: -------------------------------------------------------------------------------- 1 | ========================================================= 2 | ``GET https://devs.ouya.tv/api/v1/console_configuration`` 3 | ========================================================= 4 | 5 | Sets Android system properties. 6 | Allows to enable debug or kiosk mode remotely. 7 | 8 | This file is downloaded every hour. 9 | 10 | See `Configuration options`_. 11 | 12 | 13 | HTTP request 14 | ============ 15 | Protocol 16 | ``https`` 17 | Method 18 | ``GET`` 19 | Host 20 | ``devs.ouya.tv`` 21 | Path 22 | ``/api/v1/console_configuration`` 23 | Headers 24 | Standard headers 25 | GET parameters 26 | ``auth_token`` 27 | May be empty. 28 | 29 | Does not seem to have any influence on the response. 30 | 31 | 32 | HTTP response 33 | ============= 34 | Status code 35 | ``200 OK`` 36 | 37 | Example 38 | ------- 39 | 40 | .. include:: api-v1-console_configuration.response.json 41 | :code: 42 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-discover.response-bundle.json: -------------------------------------------------------------------------------- 1 | { 2 | "rows": [ 3 | ], 4 | "tiles": [ 5 | { 6 | "bundle": { 7 | "apps": [ 8 | "com.GoldenTricycle.Clark", 9 | "com.Tripleslash.MagneticByNature", 10 | "com.Thinice.TwinRobots", 11 | "com.scaryrobot.badbadbots" 12 | ], 13 | "currency": "EUR", 14 | "price": 6.99, 15 | "contentRating": "9+", 16 | "purchaseUrl": "ouya://launcher/purchase?developer=ec1a9ccd-373f-4047-bd07-36466ab7e25d&product=ROBOBUNDLE" 17 | }, 18 | "url": "ouya://launcher/details?page=be239ca4-10fd-42dd-89cd-1806e80b1362", 19 | "image": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150202-3-6hikjv.jpeg", 20 | "uuid": "be239ca4-10fd-42dd-89cd-1806e80b1362", 21 | "title": "ROBO GAME BUNDLE!", 22 | "type": "details_page" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-games-xxx-purchases.post.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "blob": "YKNolqKuaDcQnqQH8yncS+0hVl/YnajMgnojfMaO2IzUpfVg4lBVrz5NF30N\nXUkgpBTnXdcPUalv7YvWsqT9b8Tdm5PYgoduqi2zLyXF+bSWY+bBigDX+MDG\nyvgxjfpYcWeyYaNLn2vhsj0rVNVorT5CggAXrry2eeUIFOX+9IUzbHmxfiqP\nlglVtrudwzQO1PS5n3KNJnHfp+r7vgBG5DzErUK4YHUYBe4/9li313tEIwnK\nX4kDZXSzKiZ2SPfyYTaVgIr82x9GDaIa1ZXIBuFlQSUo55A5Gy7Wy9rTDzMb\n80LdsNlbHeOiSIBN7Rj7CuOu7Uz5btuWLCpmCHZ2xgyhN6I9y2/KTNYa2JIA\n/9fsBGcrdkiu4f3aKdiZlI8bh07npp10KpQEMszz59xr5V6h0Xjjcgw95SaE\nDmxxz3LSRVtNpjGsTlqsb4Jnc/fKcMrJcmzoDLAodfgnSev8hrNUmgs6f/df\neXKQ0J6JuiWAgKXUZ9g5GEkUn0uIo3RzIyVqRIJL9zM6oeaZ487zG1X2e5Xy\noCc1x6GKQpGr9Qp+hRp6HSp8NUyR2ZziD+DSHbZeDaZdu3bbWrzIDEVJLpwU\noVROZR2nqyR9i3eQlpvSJGUPBM9pi8KdYTvOuBKB9hrz1XYe8852bFsbn0G/\np8nmKKPM0xDc0gHuScLfUZQ=\n", 3 | "iv": "wV8mnhuGz7YaxNSP1QWfVQ==\n", 4 | "key": "hxvgGjQWJJ8vSidCF5eP4JC1VqUjZxL+ZLq9p6BrbuhSMqvtFU/YZxinKTeD\nMkCnK3Ie0lP8OoKGFl21F+/5rOuybD+FKfVJdXwIsA1ryjkFi8KBMq2G+YWo\nxMM9T0zdkOKiidK1GYHqJyLlVLrEC+qaLSqSPEoL9R0ovZhy64c=\n" 5 | } 6 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers-me.rst: -------------------------------------------------------------------------------- 1 | ============================================= 2 | ``GET https://devs.ouya.tv/api/v1/gamers/me`` 3 | ============================================= 4 | 5 | Fetch username, e-mail and other data about the user currently logged in. 6 | 7 | HTTP request 8 | ============ 9 | Protocol 10 | ``https`` 11 | Method 12 | ``GET`` 13 | Host 14 | ``devs.ouya.tv`` 15 | Path 16 | ``/api/v1/gamers/me`` 17 | Headers 18 | Standard headers 19 | GET parameters 20 | ``auth_token`` 21 | Same data as in standard header ``X-OUYA-AuthToken`` 22 | 23 | 24 | HTTP response 25 | ============= 26 | Status code 27 | ``200 OK`` 28 | Content type 29 | ``application/json; charset=utf-8`` 30 | 31 | Example: 32 | 33 | .. include:: api-v1-gamers-me.response.json 34 | :code: 35 | 36 | Razer Forge TV want this additional properties: 37 | 38 | ``nickname`` 39 | Same as ``username`` on the OUYA. 40 | When not set, the Forge asks to enter the nickname during login. 41 | ``avatar`` 42 | URL of a custom avatar image 43 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-apps-xxx-download.rst: -------------------------------------------------------------------------------- 1 | ===================================================== 2 | ``GET https://devs.ouya.tv/api/v1/apps/xxx/download`` 3 | ===================================================== 4 | 5 | Fetch the download link for a specific version of an app. 6 | 7 | 8 | Usage 9 | ===== 10 | - When the user clicks "download" 11 | 12 | 13 | 14 | HTTP request 15 | ============ 16 | Protocol 17 | ``https`` 18 | Method 19 | ``GET`` 20 | Host 21 | ``devs.ouya.tv`` 22 | Path 23 | ``/api/v1/apps/xxx/download`` 24 | 25 | ``xxx`` 26 | ``latestVersion`` string from the apps details page 27 | 28 | Example: ``/api/v1/apps/0fba3bba-83e0-4e3e-9f29-409258429757/download`` 29 | Headers 30 | Standard headers 31 | GET parameters 32 | ``auth_token`` 33 | Same as ``X-OUYA-AuthToken`` 34 | 35 | 36 | HTTP response 37 | ============= 38 | Status code 39 | ``200 OK`` 40 | Content-type 41 | ``application/json; charset=utf-8`` 42 | 43 | 44 | Example 45 | ------- 46 | 47 | .. include:: api-v1-apps-xxx-download.response.json 48 | :code: 49 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers-me-user_messages.rst: -------------------------------------------------------------------------------- 1 | =========================================================== 2 | ``GET https://devs.ouya.tv/api/v1/gamers/me/user_messages`` 3 | =========================================================== 4 | 5 | Send messages to users. 6 | 7 | The API returns a list of URLs that get displayed to the user in a popup 8 | in the main menu. 9 | 10 | 11 | HTTP request 12 | ============ 13 | Protocol 14 | ``https`` 15 | Method 16 | ``GET`` 17 | Host 18 | ``devs.ouya.tv`` 19 | Path 20 | ``/api/v1/gamers/me/user_messages`` 21 | Headers 22 | Standard headers 23 | GET parameters 24 | ``auth_token`` 25 | Same as ``X-OUYA-AuthToken`` 26 | 27 | 28 | HTTP response 29 | ============= 30 | Status code 31 | ``200 OK`` 32 | Content-type 33 | ``application/json; charset=utf-8`` 34 | 35 | Example (empty):: 36 | 37 | { 38 | "messages": [ 39 | null 40 | ] 41 | } 42 | 43 | Example (one URL):: 44 | 45 | { 46 | "messages": [ 47 | "https://www.ouya.tv/message_to_all_users.txt" 48 | ] 49 | } 50 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-developers-xxx-current_gamer.rst: -------------------------------------------------------------------------------- 1 | ================================================================ 2 | ``GET https://devs.ouya.tv/api/v1/developers/xxx/current_gamer`` 3 | ================================================================ 4 | 5 | Fetch gamer information from within a game. 6 | 7 | Usage 8 | ===== 9 | - At the startup of Knightmare Tower and Towerfall (when bought) 10 | 11 | 12 | HTTP request 13 | ============ 14 | Protocol 15 | ``https`` 16 | Method 17 | ``GET`` 18 | Host 19 | ``devs.ouya.tv`` 20 | Path 21 | ``/api/v1/developers/xxx/current_gamer`` 22 | 23 | ``xxx`` 24 | Developer UUID 25 | Headers 26 | Standard headers 27 | GET parameters 28 | ``auth_token`` 29 | Same data as in standard header ``X-OUYA-AuthToken`` 30 | 31 | 32 | HTTP response 33 | ============= 34 | Status code 35 | ``200 OK`` 36 | Content-type 37 | ``application/json; charset=utf-8`` 38 | 39 | Same data as in ``gamers/me``. 40 | 41 | Example 42 | ------- 43 | 44 | .. include:: api-v1-developers-xxx-current_gamer.response.json 45 | :code: 46 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-recommendations.rst: -------------------------------------------------------------------------------- 1 | =================================================== 2 | ``GET https://devs.ouya.tv/api/v1/recommendations`` 3 | =================================================== 4 | 5 | Get a list of games for the "you may also like" section. 6 | 7 | Games already installed on the OUYA will be shown, too - with a checkmark. 8 | 9 | 10 | Usage 11 | ===== 12 | - When the user tries to exit a game (double-pressing ``U``) 13 | 14 | 15 | HTTP request 16 | ============ 17 | Protocol 18 | ``https`` 19 | Method 20 | ``GET`` 21 | Host 22 | ``devs.ouya.tv`` 23 | Path 24 | ``/api/v1/recommendations`` 25 | Headers 26 | Standard headers 27 | GET parameters 28 | ``auth_token`` 29 | Same as ``X-OUYA-AuthToken`` 30 | ``uuid`` 31 | Package name of the game that is being exited 32 | 33 | Example: ``net.sourceforge.clonekeenplus`` 34 | 35 | HTTP response 36 | ============= 37 | Status code 38 | ``200 OK`` 39 | Content-type 40 | ``application/json; charset=utf-8`` 41 | 42 | 43 | Example 44 | ------- 45 | 46 | .. include:: api-v1-recommendations.response.json 47 | :code: 48 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers-me-agreements.rst: -------------------------------------------------------------------------------- 1 | ======================================================== 2 | ``GET https://devs.ouya.tv/api/v1/gamers/me/agreements`` 3 | ======================================================== 4 | 5 | Check which legal agreements have been confirmed by the user, 6 | and if there are updates that have to be confirmed. 7 | 8 | 9 | HTTP request 10 | ============ 11 | Protocol 12 | ``https`` 13 | Method 14 | ``GET`` 15 | Host 16 | ``devs.ouya.tv`` 17 | Path 18 | ``/api/v1/gamers/me/agreements`` 19 | Headers 20 | Standard headers 21 | GET parameters 22 | ``auth_token`` 23 | Same data as in standard header ``X-OUYA-AuthToken`` 24 | 25 | 26 | HTTP response 27 | ============= 28 | Status code 29 | ``200 OK`` 30 | Content type 31 | ``application/json; charset=utf-8`` 32 | 33 | Example: 34 | 35 | .. include:: api-v1-gamers-me-agreements.response.json 36 | :code: 37 | 38 | Each agreement has an associated HTML file with the same name 39 | at ``https://devs.ouya.tv/agreements/``, e.g. 40 | ``https://devs.ouya.tv/agreements/marketplace.html`` for the 41 | ``marketplace`` agreement. 42 | 43 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-discover-home.rst: -------------------------------------------------------------------------------- 1 | ================================================= 2 | ``GET https://devs.ouya.tv/api/v1/discover/home`` 3 | ================================================= 4 | 5 | Probably the list of games to be featured on the main menu. 6 | 7 | More than the 4 displayed because it could be that a player already 8 | bought some of them - they would not be shown then. 9 | 10 | 11 | HTTP request 12 | ============ 13 | Protocol 14 | ``https`` 15 | Method 16 | ``GET`` 17 | Host 18 | ``devs.ouya.tv`` 19 | Path 20 | ``/api/v1/discover/home`` 21 | Headers 22 | Standard headers 23 | GET parameters 24 | ``auth_token`` 25 | Same as ``X-OUYA-AuthToken`` 26 | 27 | 28 | HTTP response 29 | ============= 30 | Status code 31 | ``200 OK`` 32 | Content-type 33 | ``application/json; charset=utf-8`` 34 | 35 | Response body definition 36 | ------------------------ 37 | Same as `GET https://devs.ouya.tv/api/v1/discover`_ with some limitations: 38 | 39 | - Only one entry in the ``rows`` array 40 | 41 | Title of this row is ``FEATURED``, price is shown, not ranked. 42 | - ``title`` attribute value is ``home``. 43 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-queued_downloads-xxx.delete.rst: -------------------------------------------------------------------------------- 1 | =========================================================== 2 | ``DELETE https://devs.ouya.tv/api/v1/queued_downloads/xxx`` 3 | =========================================================== 4 | 5 | Remove an app from the list of queued downloads. 6 | 7 | 8 | Usage 9 | ===== 10 | After the app has been installed automatically on the OUYA. 11 | 12 | 13 | HTTP request 14 | ============ 15 | Protocol 16 | ``https`` 17 | Method 18 | ``DELETE`` 19 | Host 20 | ``devs.ouya.tv`` 21 | Path 22 | ``/api/v1/queued_downloads/xxx`` 23 | 24 | ``xxx`` 25 | Package name. The ``uuid`` value from the queued downloads list. 26 | 27 | Example: ``/api/v1/queued_downloads/net.froemling.bombsquad`` 28 | 29 | Headers 30 | Standard headers 31 | 32 | ``uuid`` 33 | The ``uuid`` value from the queued downloads list, which is actually 34 | a package name and not an UUID. 35 | 36 | Same as the ``xxx`` in the path. 37 | GET parameters 38 | ``auth_token`` 39 | Same as ``X-OUYA-AuthToken`` 40 | 41 | HTTP response 42 | ============= 43 | Status code 44 | ``204 No Content`` 45 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers-me-consoles.rst: -------------------------------------------------------------------------------- 1 | ======================================================= 2 | ``POST https://devs.ouya.tv/api/v1/gamers/me/consoles`` 3 | ======================================================= 4 | 5 | Associate a console ID with the account. 6 | 7 | 8 | Usage 9 | ===== 10 | 11 | #. After logging in with an existing account 12 | #. (Probably after registering a new account) 13 | 14 | 15 | HTTP request 16 | ============ 17 | Protocol 18 | ``https`` 19 | Method 20 | ``POST`` 21 | Host 22 | ``devs.ouya.tv`` 23 | Path 24 | ``/api/v1/gamers/me/consoles`` 25 | Headers 26 | Standard headers 27 | 28 | ``Content-Type`` 29 | ``application/x-www-form-urlencoded`` 30 | GET parameters 31 | ``auth_token`` 32 | Same data as in standard header ``X-OUYA-AuthToken`` 33 | POST parameters 34 | ``console_id``: 35 | ``015d4b33bc64141b`` 36 | 37 | Same data as in standard header ``X-OUYA-Console-Id`` 38 | ``auth_token``: 39 | Same data as in standard header ``X-OUYA-AuthToken`` 40 | 41 | 42 | HTTP response 43 | ============= 44 | Status code 45 | ``200 OK`` 46 | Content type 47 | ``application/json; charset=utf-8`` 48 | Body 49 | ``{}`` 50 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-firmware_builds.rst: -------------------------------------------------------------------------------- 1 | ================================================ 2 | ``GET https://devs.ouya.tv/api/firmware_builds`` 3 | ================================================ 4 | 5 | List the latest available firmware version. 6 | 7 | 8 | Usage 9 | ===== 10 | 11 | #. During the OUYA setup (Parameter ``oobe=true`` is set) 12 | #. During bootup 13 | #. Every 3 minutes unless an "Expires" header is set 14 | 15 | 16 | HTTP request 17 | ============ 18 | Protocol 19 | ``https`` 20 | Method 21 | ``GET`` 22 | Host 23 | ``devs.ouya.tv`` 24 | Path 25 | ``/api/firmware_builds`` 26 | Headers 27 | Standard headers 28 | 29 | Token parameters not required. 30 | GET parameters 31 | ``auth_token`` 32 | May be empty. 33 | 34 | Does not seem to have any influence on the response. 35 | 36 | ``oobe`` 37 | ``true`` 38 | 39 | Optional. 40 | 41 | Is set once during the OUYA setup (Out Of Box Experience). 42 | 43 | 44 | HTTP response 45 | ============= 46 | Status code 47 | ``200 OK`` 48 | Content type 49 | ``application/json; charset=utf-8`` 50 | 51 | Example 52 | ------- 53 | 54 | .. include:: api-firmware_builds.response-short.json 55 | :code: 56 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-recommendations.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "games": [ 3 | { 4 | "rating": { 5 | "count": 716, 6 | "average": 4.25 7 | }, 8 | "image": "https://www.filepicker.io/api/file/VzCsgc3BTx2RiGpTr4Uw", 9 | "content_rating": "Everyone", 10 | "version": "7230ac05-d24c-4347-a990-7ac283c17063", 11 | "uuid": "com.GoldenTricycle.Clark", 12 | "title": "CLARC" 13 | }, 14 | { 15 | "rating": { 16 | "count": 1108, 17 | "average": 3.49 18 | }, 19 | "image": "https://www.filepicker.io/api/file/ej3IxeX8SwKZW5uFOw9g", 20 | "content_rating": "Everyone", 21 | "version": "544236ed-6dde-4b9e-8c4f-ac6e8b91bcd3", 22 | "uuid": "com.sega.sonic4epi", 23 | "title": "Sonic The Hedgehog 4 Episode I" 24 | }, 25 | { 26 | "rating": { 27 | "count": 522, 28 | "average": 4.38 29 | }, 30 | "image": "https://www.filepicker.io/api/file/s8HCRKaSB8wF2hSKbBzQ", 31 | "content_rating": "Everyone", 32 | "version": "29457560-1669-45ce-bb19-88c1651c7552", 33 | "uuid": "com.x10studio.SoManyMe", 34 | "title": "So Many Me" 35 | } 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-ratings.post.rst: -------------------------------------------------------------------------------- 1 | ============================================ 2 | ``POST https://devs.ouya.tv/api/v1/ratings`` 3 | ============================================ 4 | 5 | Store the rating of a single game 6 | 7 | Usage 8 | ===== 9 | Directly after a user rated a game on the exit screen. 10 | 11 | 12 | HTTP request 13 | ============ 14 | Protocol 15 | ``https`` 16 | Method 17 | ``POST`` 18 | Host 19 | ``devs.ouya.tv`` 20 | Path 21 | ``/api/v1/ratings`` 22 | Headers 23 | Standard headers 24 | GET parameters 25 | ``auth_token`` 26 | Same as ``X-OUYA-AuthToken`` 27 | POST parameters 28 | ``auth_token`` 29 | Same as ``X-OUYA-AuthToken`` 30 | ``game`` 31 | Package name of the game 32 | 33 | E.g. ``com.littleguy77.filepwn`` 34 | ``score`` 35 | integer 36 | 37 | 1 to 5: 38 | 39 | 1 40 | Hate it 41 | 2 42 | Don't like it 43 | 3 44 | Like it 45 | 4 46 | Really like it 47 | 5 48 | Love it 49 | 50 | HTTP response 51 | ============= 52 | Status code 53 | ``200 OK`` 54 | Content-type 55 | ``application/json; charset=utf-8`` 56 | 57 | Example:: 58 | 59 | { 60 | "success": true 61 | } 62 | 63 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers-me-agreements.put.rst: -------------------------------------------------------------------------------- 1 | ======================================================== 2 | ``PUT https://devs.ouya.tv/api/v1/gamers/me/agreements`` 3 | ======================================================== 4 | 5 | Store that a legal agreement has been confirmed by the user. 6 | 7 | 8 | Usage 9 | ===== 10 | 11 | #. After setting up a factory-reset OUYA. 12 | #. After logging in with an existing account. 13 | #. After booting up the OUYA. 14 | 15 | 16 | HTTP request 17 | ============ 18 | Protocol 19 | ``https`` 20 | Method 21 | ``PUT`` 22 | Host 23 | ``devs.ouya.tv`` 24 | Path 25 | ``/api/v1/gamers/me/agreements`` 26 | Headers 27 | Standard headers 28 | 29 | ``Content-Type`` 30 | ``application/x-www-form-urlencoded`` 31 | GET parameters 32 | ``auth_token`` 33 | Same data as in standard header ``X-OUYA-AuthToken`` 34 | POST parameters 35 | ``marketplace``: 36 | ``2`` 37 | 38 | Version of the marketplace agreement 39 | ``auth_token``: 40 | Same data as in standard header ``X-OUYA-AuthToken`` 41 | 42 | 43 | HTTP response 44 | ============= 45 | Status code 46 | ``200 OK`` 47 | Content type 48 | ``application/json; charset=utf-8`` 49 | Body 50 | ``{}`` 51 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-apps-xxx.rst: -------------------------------------------------------------------------------- 1 | ============================================ 2 | ``GET https://devs.ouya.tv/api/v1/apps/xxx`` 3 | ============================================ 4 | 5 | Fetch the details for an app/game. 6 | 7 | 8 | Usage 9 | ===== 10 | - When the user enters the detail page in the discover store. 11 | - Sometimes the OUYA refreshes details of all installed apps while running. 12 | 13 | Related to ``api/v1/details``, which is used for already installed apps. 14 | 15 | 16 | HTTP request 17 | ============ 18 | Protocol 19 | ``https`` 20 | Method 21 | ``GET`` 22 | Host 23 | ``devs.ouya.tv`` 24 | Path 25 | ``/api/v1/apps/xxx`` 26 | 27 | ``xxx`` 28 | Package name of an app 29 | 30 | Also UUID of a package release. 31 | 32 | Example: ``/api/v1/apps/com.toa.tetrisFusionOuya`` 33 | Headers 34 | Standard headers 35 | 36 | ``console_id`` 37 | Same as ``X-OUYA-Console-Id`` 38 | GET parameters 39 | ``auth_token`` 40 | Same as ``X-OUYA-AuthToken`` 41 | 42 | 43 | HTTP response 44 | ============= 45 | Status code 46 | ``200 OK`` 47 | Content-type 48 | ``application/json; charset=utf-8`` 49 | 50 | 51 | Example 52 | ------- 53 | 54 | .. include:: api-v1-apps-xxx.response.json 55 | :code: 56 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-credit_card.put.rst: -------------------------------------------------------------------------------- 1 | =============================================== 2 | ``PUT https://devs.ouya.tv/api/v1/credit_card`` 3 | =============================================== 4 | 5 | Store the result of the credit card storage request. 6 | 7 | Usage 8 | ===== 9 | Called after `POST https://ott9.wpstn.com/live/`_. 10 | 11 | HTTP request 12 | ============ 13 | Protocol 14 | ``https`` 15 | Method 16 | ``PUT`` 17 | Host 18 | ``devs.ouya.tv`` 19 | Path 20 | ``/api/v1/credit_card`` 21 | Headers 22 | Standard headers 23 | 24 | ``Content-Type`` 25 | ``application/x-www-form-urlencoded`` 26 | GET parameters 27 | ``auth_token`` 28 | Same data as in standard header ``X-OUYA-AuthToken`` 29 | ``body``: 30 | Complete response including headers 31 | ``zipcode``: 32 | Postal code 33 | POST parameters 34 | ``auth_token`` 35 | Same data as in standard header ``X-OUYA-AuthToken`` 36 | 37 | Example body parameter: 38 | 39 | .. include:: api-v1-credit_card.put.get-body.txt 40 | :code: 41 | 42 | 43 | HTTP response 44 | ============= 45 | Status code 46 | ``200 OK`` 47 | Content type 48 | ``application/json; charset=utf-8`` 49 | 50 | Example: 51 | 52 | .. include:: api-v1-credit_card.put.response.json 53 | :code: 54 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-wallet.rst: -------------------------------------------------------------------------------- 1 | ========================================== 2 | ``GET https://devs.ouya.tv/api/v1/wallet`` 3 | ========================================== 4 | 5 | Get the account balance and currency. 6 | 7 | Usage 8 | ===== 9 | After user registration, before the credit card input form is shown. 10 | 11 | 12 | HTTP request 13 | ============ 14 | Protocol 15 | ``https`` 16 | Method 17 | ``GET`` 18 | Host 19 | ``devs.ouya.tv`` 20 | Path 21 | ``/api/v1/wallet`` 22 | Headers 23 | Standard headers 24 | GET parameters 25 | ``auth_token`` 26 | Same data as in standard header ``X-OUYA-AuthToken`` 27 | 28 | 29 | HTTP response 30 | ============= 31 | Status code 32 | ``200 OK`` 33 | Content type 34 | ``application/json; charset=utf-8`` 35 | 36 | 37 | Example without credit card data 38 | -------------------------------- 39 | .. include:: api-v1-wallet.response.json 40 | :code: 41 | 42 | FIXME: Find out if we get that response when giving a dummy number 43 | during registration (4111 1111 1111 1111). 44 | 45 | 46 | Example with credit card data 47 | ----------------------------- 48 | .. include:: api-v1-wallet.response-2.json 49 | :code: 50 | 51 | FIXME: Find out if we can disable credit card input by setting 52 | ``requiresPaymentMethod`` to ``false``. 53 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-credit_card.post.rst: -------------------------------------------------------------------------------- 1 | ================================================ 2 | ``POST https://devs.ouya.tv/api/v1/credit_card`` 3 | ================================================ 4 | 5 | Prepare the credit card registration process and fetch a one-time token 6 | for the wpstn.com (world pay) credit card processor. 7 | 8 | 9 | HTTP request 10 | ============ 11 | Protocol 12 | ``https`` 13 | Method 14 | ``POST`` 15 | Host 16 | ``devs.ouya.tv`` 17 | Path 18 | ``/api/v1/credit_card`` 19 | Headers 20 | Standard headers 21 | 22 | ``Content-Type`` 23 | ``application/x-www-form-urlencoded`` 24 | GET parameters 25 | ``auth_token`` 26 | Same data as in standard header ``X-OUYA-AuthToken`` 27 | 28 | ``zipcode`` 29 | Postal code entered on the credit card form. 30 | POST parameters 31 | ``auth_token``: 32 | Same data as in standard header ``X-OUYA-AuthToken`` 33 | 34 | 35 | HTTP response 36 | ============= 37 | Status code 38 | ``200 OK`` 39 | Content type 40 | ``application/json; charset=utf-8`` 41 | 42 | Example: 43 | 44 | .. include:: api-v1-credit_card.post.response.json 45 | :code: 46 | 47 | The ``one_time_token`` is used in the following ``POST`` request to 48 | the URL determined in ``redirect_url``. 49 | 50 | See `POST https://ott9.wpstn.com/live/`_. 51 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-events.rst: -------------------------------------------------------------------------------- 1 | =========================================== 2 | ``POST https://devs.ouya.tv/api/v1/events`` 3 | =========================================== 4 | 5 | Send information about the last events on the OUYA console to the 6 | logging/tracking server. 7 | 8 | 9 | Usage 10 | ===== 11 | 12 | #. Every now and then when enough events have been collected 13 | 14 | FIXME: determine exact behavior 15 | 16 | 17 | HTTP request 18 | ============ 19 | Protocol 20 | ``https`` 21 | Method 22 | ``POST`` 23 | Host 24 | ``devs.ouya.tv`` 25 | Path 26 | ``/api/v1/events`` 27 | Headers 28 | Standard headers 29 | 30 | ``Content-Type`` 31 | ``application/x-www-form-urlencoded`` 32 | POST parameters 33 | ``current_time`` 34 | ``1434577856574`` 35 | 36 | Unix timestamp, milliseconds. 37 | ``console_id`` 38 | Same data as in standard header ``X-OUYA-Console-Id`` 39 | ``events`` 40 | JSON-encoded array of event objects 41 | ``auth_token`` 42 | Same data as in standard header ``X-OUYA-AuthToken`` 43 | 44 | Example event JSON data: 45 | 46 | .. include:: api-v1-events.request.json 47 | :code: 48 | :end-line: 30 49 | 50 | 51 | HTTP response 52 | ============= 53 | Status code 54 | ``200 OK`` 55 | Content type 56 | ``application/json; charset=utf-8`` 57 | Body 58 | ``{}`` 59 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-search.rst: -------------------------------------------------------------------------------- 1 | ==================================================== 2 | ``GET https://devs.ouya.tv/api/v1/search`` 3 | ==================================================== 4 | 5 | Search for games in the discover store. 6 | 7 | 8 | HTTP request 9 | ============ 10 | Protocol 11 | ``https`` 12 | Method 13 | ``GET`` 14 | Host 15 | ``devs.ouya.tv`` 16 | Path 17 | ``/api/v1/search`` 18 | Headers 19 | Standard headers 20 | GET parameters 21 | ``auth_token`` 22 | Same as ``X-OUYA-AuthToken`` 23 | ``q`` 24 | Search word(s) 25 | 26 | 27 | HTTP response 28 | ============= 29 | Status code 30 | ``200 OK`` 31 | Content-type 32 | ``application/json; charset=utf-8`` 33 | 34 | The ``count`` property contains the number of games that matched the search 35 | string, even if they are not all returned in the result list. 36 | The search result list is limited to 20 or 40 games. 37 | 38 | When the ``count`` is higher than the number of items in ``results``, 39 | the OUYA will send a new search request to the API when another letter is added 40 | to the search word. 41 | 42 | If the ``count`` and ``results`` are the same, the OUYA will use the current 43 | response and filter it for itself without asking the server again. 44 | 45 | Example 46 | ------- 47 | .. include:: api-v1-search.response.json 48 | :code: 49 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-partner_builds.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [ 3 | { 4 | "action": "installFile", 5 | "packageName": "tv.ouya.oobe", 6 | "friendlyName": "OUYA OOBE", 7 | "md5": "41d50891225591fdd32045ed0821a3bf", 8 | "filesize": 7725861, 9 | "downloadUrl": "http://ouya.cweiske.de/apks/ouya-everywhere/tv.ouya.oobe-1.2.897.apk", 10 | "versionCode": 10200897 11 | }, 12 | 13 | { 14 | "action": "installFile", 15 | "packageName": "tv.ouya", 16 | "friendlyName": "OUYA Framework", 17 | "md5": "95d987e7b100c2c72bdac37a8eda2647", 18 | "filesize": 3123639, 19 | "downloadUrl": "http://ouya.cweiske.de/apks/ouya-everywhere/tv.ouya-1.2.897.apk", 20 | "versionCode": 10200897 21 | }, 22 | 23 | { 24 | "action": "installFile", 25 | "packageName": "tv.ouya.console", 26 | "friendlyName": "OUYA launcher", 27 | "md5": "97da25989c64a90c60070978077fff55", 28 | "filesize": 18953944, 29 | "downloadUrl": "http://ouya.cweiske.de/apks/ouya-everywhere/tv.ouya.console-1.2.897.apk", 30 | "versionCode": 10200897 31 | }, 32 | 33 | { 34 | "action": "launch", 35 | "packageName": "tv.ouya.console" 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-partner_builds-release_notes.rst: -------------------------------------------------------------------------------- 1 | ================================================================ 2 | ``GET https://devs.ouya.tv/api/v1/partner_builds/release_notes`` 3 | ================================================================ 4 | 5 | Return the changelog for the latest OUYA everywhere installer. 6 | 7 | Used by the Razer Forge TV only (Manage > Razer Cortex > "Update Notes"). 8 | 9 | 10 | HTTP request 11 | ============ 12 | Protocol 13 | ``https`` 14 | Method 15 | ``GET`` 16 | Host 17 | ``devs.ouya.tv`` 18 | Path 19 | ``/api/v1/partner_builds/release_notes`` 20 | Headers 21 | ``User-Agent`` 22 | - ``Dalvik/2.1.0 (Linux; U; Android 6.0.1; Forge Build/M-MMB29M-rzs-us-sf-bld2-19HP-08.02.AM)`` 23 | ``Accept-Language`` 24 | ``de`` 25 | ``X-OUYA-Device`` 26 | ``pearlyn`` 27 | ``X-OUYA-Firmware-Version``: 28 | (empty) 29 | ``X-OUYA-Console-Id`` 30 | Build serial number 31 | 32 | ``171256710321511`` 33 | ``X-OUYA-Console-Wifi-MAC-Address`` 34 | ``C4:8E:8F:82:29:B1`` 35 | ``X-OUYA-VersionCode`` 36 | ``10202320`` 37 | ``X-OUYA-AuthToken`` 38 | ``00702342-0000-1111-2222-c3e1500cafe1`` 39 | 40 | 41 | HTTP response 42 | ============= 43 | Status code 44 | ``200 OK`` 45 | Content-type 46 | ``application/json; charset=utf-8`` 47 | 48 | 49 | Example 50 | ------- 51 | 52 | .. include:: api-v1-partner_builds-release_notes.response.json 53 | :code: 54 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-developers-xxx-products.rst: -------------------------------------------------------------------------------- 1 | ============================================================ 2 | ``GET https://devs.ouya.tv/api/v1/developers/xxx/products/`` 3 | ============================================================ 4 | 5 | Use in-game when purchasing a feature, sometimes already at game startup. 6 | 7 | Some games rely on this to check if the game is purchasable at all. 8 | If the product list does not contain the product identifier they 9 | expect, buying is not possible. (Example: ``com.sega.sonic4epi``) 10 | 11 | Usage 12 | ===== 13 | - When the user starts a game and pressed "Sync" in the store 14 | (at "Babylonian Twins") 15 | 16 | 17 | HTTP request 18 | ============ 19 | Protocol 20 | ``https`` 21 | Method 22 | ``GET`` 23 | Host 24 | ``devs.ouya.tv`` 25 | Path 26 | ``/api/v1/developers/xxx/products/`` 27 | 28 | ``xxx`` 29 | Developer UUID 30 | 31 | Example: ``/api/v1/developers/c4e46efe-05fd-4be9-9d7e-1f7607eabd49/products/`` 32 | Headers 33 | Standard headers 34 | GET parameters 35 | ``auth_token`` 36 | Same as ``X-OUYA-AuthToken`` 37 | ``only`` 38 | Product key (same as ``Identifier`` in ``promotedProduct`` of app details) 39 | 40 | Example: ``&only=unlock_pro`` 41 | 42 | 43 | HTTP response 44 | ============= 45 | Status code 46 | ``200 OK`` 47 | Content-type 48 | ``application/json; charset=utf-8`` 49 | 50 | Example 51 | ------- 52 | 53 | .. include:: api-v1-developers-xxx-products.response.json 54 | :code: 55 | -------------------------------------------------------------------------------- /api/ott9.wpstn.com/live.rst: -------------------------------------------------------------------------------- 1 | ===================================== 2 | ``POST https://ott9.wpstn.com/live/`` 3 | ===================================== 4 | 5 | Store credit card data. 6 | 7 | 8 | Usage 9 | ===== 10 | Called after fetching a one time token from 11 | `POST https://devs.ouya.tv/api/v1/credit_card`_. 12 | 13 | 14 | HTTP request 15 | ============ 16 | Protocol 17 | ``https`` 18 | Method 19 | ``POST`` 20 | Host 21 | ``ott9.wpstn.com`` 22 | Path 23 | ``/live/`` 24 | Headers 25 | ``Content-Type`` 26 | ``application/x-www-form-urlencoded`` 27 | ``User-Agent`` 28 | ``OUYA 0 1.00 1.2.1427_r1`` 29 | POST parameters 30 | ``Action``: 31 | ``Add`` 32 | ``OTT``: 33 | Random one-time token from credit card POST request. 34 | ``AcctName``: 35 | Credit card account holder name 36 | ``AcctNumber``: 37 | ``4111111111111111`` 38 | 39 | Credit card number 40 | ``ExpDate``: 41 | ``012017`` 42 | 43 | Month & year 44 | ``CVN``: 45 | ``777`` 46 | 47 | Secret code 48 | ``Email``: 49 | E-mail address 50 | ``ZipCode``: 51 | Postal code 52 | 53 | 54 | HTTP response 55 | ============= 56 | Status code 57 | ``303 See Other`` 58 | 59 | Redirects to ``wpsuccess`` URL on devs.ouya.tv with the ``OTT`` parameter:: 60 | 61 | https://devs.ouya.tv/wpsuccess?OTT=C187D8AE8970... 62 | 63 | The redirect location header seems to be ignored; it does not get called. 64 | Instead, `PUT https://devs.ouya.tv/api/v1/credit_card`_ is fetched. 65 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-queued_downloads.rst: -------------------------------------------------------------------------------- 1 | ==================================================== 2 | ``GET https://devs.ouya.tv/api/v1/queued_downloads`` 3 | ==================================================== 4 | 5 | Fetch a list of apps/games that shall get installed automatically 6 | on the OUYA. 7 | 8 | The OUYA checks the download queue exactly every 5 minutes. 9 | 10 | More information: http://cweiske.de/tagebuch/push-to-ouya.htm 11 | 12 | 13 | HTTP request 14 | ============ 15 | Protocol 16 | ``https`` 17 | Method 18 | ``GET`` 19 | Host 20 | ``devs.ouya.tv`` 21 | Path 22 | ``/api/v1/queued_downloads`` 23 | Headers 24 | Standard headers 25 | GET parameters 26 | ``auth_token`` 27 | Same as ``X-OUYA-AuthToken`` 28 | 29 | 30 | HTTP response 31 | ============= 32 | Status code 33 | ``200 OK`` 34 | Content-type 35 | ``application/json; charset=utf-8`` 36 | 37 | Known ``source`` options: 38 | 39 | ``gamer`` 40 | The user clicked onto "push to my ouya" on the OUYA website 41 | ``game-of-the-month`` 42 | The game gets automatically installed because the OUYA people awarded it the 43 | "game of the month" trophy. 44 | ``new-user`` 45 | You are a freshly registered user and should have this game on your OUYA. 46 | 47 | 48 | Example 49 | ------- 50 | Automatically pushed onto a fresh account: 51 | 52 | .. include:: api-v1-queued_downloads.response.json 53 | :code: 54 | 55 | Manually pushed via the web site: 56 | 57 | .. include:: api-v1-queued_downloads.response-2.json 58 | :code: 59 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-themes.rst: -------------------------------------------------------------------------------- 1 | ========================================== 2 | ``GET https://devs.ouya.tv/api/v1/themes`` 3 | ========================================== 4 | 5 | Load the main menu background image/video. 6 | 7 | 8 | Usage 9 | ===== 10 | #. During startup before loading the main menu 11 | #. Every three hours 12 | 13 | 14 | HTTP request 15 | ============ 16 | Protocol 17 | ``https`` 18 | Method 19 | ``GET`` 20 | Host 21 | ``devs.ouya.tv`` 22 | Path 23 | ``/api/v1/themes`` 24 | Headers 25 | Standard headers. 26 | GET parameters 27 | ``auth_token`` 28 | May be empty. 29 | 30 | Does not seem to have any influence on the response. 31 | 32 | 33 | HTTP response 34 | ============= 35 | 36 | Status code 37 | ``200 OK`` 38 | Content type 39 | ``application/json; charset=utf-8`` 40 | 41 | 42 | Response body definition 43 | ------------------------ 44 | 45 | ``background_style`` 46 | Supported until at least ODK 1.0.12. 47 | Latest firmware 1.2.1427 does not support it anymore. 48 | 49 | ``static`` meant that the image would be scaled. 50 | Any value other than ``static`` would make the image pan around. 51 | ``background`` 52 | Full URL to a backgroud image 53 | ``video`` 54 | Supported until at least ODK 1.0.12. 55 | Latest firmware 1.2.1427 does not support it anymore. 56 | 57 | Video URL had preference over background image URL. 58 | 59 | Example 60 | ------- 61 | 62 | .. include:: api-v1-themes.response.json 63 | :code: 64 | 65 | FIXME: get response with video/image set. 66 | -------------------------------------------------------------------------------- /headers.rst: -------------------------------------------------------------------------------- 1 | ===================== 2 | Standard HTTP headers 3 | ===================== 4 | 5 | The following HTTP headers are sent with nearly every HTTP request 6 | from the OUYA console to the servers. 7 | 8 | ``Accept-Encoding`` 9 | ``gzip`` 10 | 11 | The OUYA understands gzip compression 12 | ``Accept-Language`` 13 | ``en-US,en`` 14 | ``User-Agent`` 15 | OUYA: ``OUYA 0 1.00 1.2.1427_r1`` 16 | 17 | Razer Forge TV: ``Dalvik/2.1.0 (Linux; U; Android 6.0.1; Forge Build/M-MMB29M-rzs-us-sf-bld2-19HP-08.02.AM)`` 18 | ``X-OUYA-AuthToken`` 19 | ``96bfeaae-212d-447b-b4bf-caa5e86c0502`` 20 | 21 | Authentication token one got from logging in. 22 | 23 | Only sent when logged in. 24 | ``X-OUYA-Console-Id`` 25 | ``015d4b33bc64141b`` 26 | 27 | Serial number you see when running ``$ adb devices`` 28 | ``X-OUYA-Console-Wifi-MAC-Address`` 29 | ``B8:5A:F7:82:3C:C8`` 30 | ``X-OUYA-Device`` 31 | ``ouya_1_1`` 32 | 33 | Probably hardware revision 34 | ``X-OUYA-Firmware-Version`` 35 | ``1.2.1427_r1`` 36 | ``X-OUYA-VersionCode`` 37 | ``16`` 38 | ``X-Token`` 39 | ``96bfeaae-212d-447b-b4bf-caa5e86c0502`` 40 | 41 | Only sent when logged in. 42 | 43 | Same as ``X-OUYA-AuthToken``. 44 | 45 | FIXME: Why two token headers? 46 | 47 | FIXME: Why ``auth_token`` GET parameter when there are headers? 48 | 49 | 50 | Headers to ignore 51 | ================= 52 | ``Cookie`` 53 | ``__cfduid=da019d762142461c19f162c0ee443f9c71434577887`` 54 | 55 | Comes from the cloudflare error page. Can be ignored. 56 | ``Cookie2`` 57 | ``$Version=1`` 58 | 59 | ??? FIXME 60 | 61 | Not on the cloudflare error page. 62 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-games-xxx-community_content.post.rst: -------------------------------------------------------------------------------- 1 | ================================================================ 2 | ``POST https://devs.ouya.tv/api/v1/games/xxx/community_content`` 3 | ================================================================ 4 | 5 | Upload community content (e.g. levels) to the server. 6 | 7 | 8 | HTTP request 9 | ============ 10 | Protocol 11 | ``https`` 12 | Method 13 | ``POST`` 14 | Host 15 | ``devs.ouya.tv`` 16 | Path 17 | ``/api/v1/games/xxx/community_content`` 18 | 19 | ``xxx`` 20 | app package name 21 | 22 | Example: ``/api/v1/games/tv.ouya.sample.cc/community_content`` 23 | Headers 24 | Standard headers 25 | 26 | ``Content-Type`` 27 | ``application/x-www-form-urlencoded`` 28 | GET parameters 29 | ``auth_token`` 30 | Same as ``X-OUYA-AuthToken`` 31 | POST parameters 32 | ``request[uuid]`` 33 | Example: ``0f02f93e-8eb7-44a7-a2c9-d86be692ea85`` 34 | ``request[signature]`` 35 | Example: ``R6Jt1GM3IASameqEdMmlVgw6D/9CinsHQlm2FnRtLlbCy2X68JEjB+uAQSOCjEuXKbOpKzQreK481fEYn1quNQwUDu98rGMRfTPsw8tEvuHvY0CyqRKpCBH6DKmsyNU8RUZ4x+Hz64yVQMcNchK0/gEmFPS8WfLdLJeJtIk19gY=`` 36 | ``community_content[title]`` 37 | Content title, e.g. level name 38 | ``community_content[category]`` 39 | Game-specific category 40 | 41 | Example: ``emblem`` 42 | ``community_content[description]`` 43 | Level description 44 | ``community_content[content]`` 45 | .zip file contents 46 | 47 | File name: ``content.zip`` 48 | 49 | 50 | HTTP response 51 | ============= 52 | 53 | FIXME 54 | 55 | JSON object with properties: 56 | 57 | ``uuid`` 58 | String 59 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers-key.put.rst: -------------------------------------------------------------------------------- 1 | ============================================== 2 | ``PUT https://devs.ouya.tv/api/v1/gamers/key`` 3 | ============================================== 4 | 5 | Store the user's public key on the server. 6 | 7 | Receipts/purchases are encryptd by the server with the user's public key, 8 | so that only that user can decrypt it. 9 | 10 | 11 | Usage 12 | ===== 13 | 14 | #. Once per bootup just before purchases are checked the first time. 15 | That can be when opening "Play" that contains purchasable games, 16 | or "Discover" showing purchasable games. 17 | 18 | 19 | HTTP request 20 | ============ 21 | Protocol 22 | ``https`` 23 | Method 24 | ``PUT`` 25 | Host 26 | ``devs.ouya.tv`` 27 | Path 28 | ``/api/v1/gamers/key`` 29 | Headers 30 | Standard headers 31 | 32 | ``Content-Type`` 33 | ``application/x-www-form-urlencoded`` 34 | GET parameters 35 | ``auth_token`` 36 | Same data as in standard header ``X-OUYA-AuthToken`` 37 | POST parameters 38 | ``auth_token`` 39 | Same data as in standard header ``X-OUYA-AuthToken`` 40 | ``gamer[key]`` 41 | string 42 | 43 | FIXME encryption key 44 | ``gamer[password]`` 45 | string 46 | 47 | User account password 48 | ``gamer[username]`` 49 | string 50 | 51 | User account name 52 | 53 | Example key:: 54 | 55 | -----BEGIN PUBLIC KEY----- 56 | MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvf3MvvZui5shNGbt2O0zveXrtfHZNivowNKiO 57 | UagJARKCJmjOJVtZ1srCe95Eul/xBDPDEaH8vJetn5Pl99QwhdYL1ps9mUhmocx90LavQsipr2Dw 58 | B7XshwN/EpW0uR/R84a3yXozpk7dgXi4+y//A+XT+MqgxsY6cdSGrBMsCQIDAQAB 59 | -----END PUBLIC KEY----- 60 | 61 | 62 | HTTP response 63 | ============= 64 | Status code 65 | ``201 Created`` 66 | Content type 67 | ``application/json; charset=utf-8`` 68 | Body 69 | ``{}`` 70 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-razer-session.rst: -------------------------------------------------------------------------------- 1 | =============================================== 2 | ``POST https://devs.ouya.tv/api/razer/session`` 3 | =============================================== 4 | 5 | Login to the Razer Cortex store on the Razer Forge TV. 6 | 7 | Similar to the OUYA login `POST https://devs.ouya.tv/api/v1/sessions`_, 8 | but with e-mail instead of username. 9 | 10 | 11 | HTTP request 12 | ============ 13 | Protocol 14 | ``https`` 15 | Method 16 | ``POST`` 17 | Host 18 | ``devs.ouya.tv`` 19 | Path 20 | ``/api/razer/session`` 21 | Headers 22 | ``User-Agent`` 23 | ``Dalvik/2.1.0 (Linux; U; Android 6.0.1; Forge Build/M-MMB29M-rzs-us-sf-bld2-19HP-08.02.AM)`` 24 | ``Accept-Language`` 25 | ``de`` 26 | ``X-OUYA-Device`` 27 | ``pearlyn`` 28 | ``X-OUYA-Firmware-Version``: 29 | (empty) 30 | ``X-OUYA-Console-Id`` 31 | Build serial number 32 | 33 | ``171256710321511`` 34 | ``X-OUYA-Console-Wifi-MAC-Address`` 35 | ``C4:8E:8F:82:29:B1`` 36 | ``X-OUYA-VersionCode`` 37 | ``10202320`` 38 | ``Content-Type`` 39 | ``application/x-www-form-urlencoded`` 40 | 41 | POST parameters 42 | --------------- 43 | ``email`` 44 | User e-mail address 45 | ``password`` 46 | User password 47 | 48 | 49 | HTTP response 50 | ============= 51 | Success 52 | ------- 53 | Status code 54 | ``200 OK`` 55 | Content-type 56 | ``application/json; charset=utf-8`` 57 | 58 | After the initial login, `GET https://devs.ouya.tv/api/v1/gamers/me`_ is fetched. 59 | If its reponse does not contain ``nickname``, the nickname input screen is shown. 60 | The nickname is then stored via `PUT https://devs.ouya.tv/api/razer/gamer`_. 61 | 62 | The CortexFramework code also parses properties 63 | ``razerToken``, ``nickname`` and ``avatar`` 64 | but they do not seem to be used. 65 | 66 | .. include:: api-razer-session.response.json 67 | :code: 68 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-sessions.rst: -------------------------------------------------------------------------------- 1 | ============================================= 2 | ``POST https://devs.ouya.tv/api/v1/sessions`` 3 | ============================================= 4 | 5 | Log in and obtain a session token. 6 | 7 | This token is stored in the console and used in the 8 | ``X-OUYA-AuthToken`` and ``X-Token`` headers as well as the 9 | ``auth_token`` GET parameter. 10 | 11 | The Razer Forge TV uses `POST https://devs.ouya.tv/api/razer/session`_ instead. 12 | 13 | 14 | Usage 15 | ===== 16 | 17 | #. After logging with an existing account 18 | #. After new user registration 19 | #. When visiting Manage > Accounts 20 | 21 | 22 | HTTP request 23 | ============ 24 | Protocol 25 | ``https`` 26 | Method 27 | ``POST`` 28 | Host 29 | ``devs.ouya.tv`` 30 | Path 31 | ``/api/v1/sessions`` 32 | Headers 33 | ``Accept-Encoding`` 34 | ``User-Agent`` 35 | ``X-OUYA-Console-Id`` 36 | ``X-OUYA-Device`` 37 | 38 | ``Content-Type`` 39 | ``application/x-www-form-urlencoded`` 40 | POST parameters 41 | ``username`` 42 | User name used to log in 43 | ``password`` 44 | User password 45 | 46 | HTTP response 47 | ============= 48 | 49 | Success 50 | ------- 51 | When the user logged in successfully. 52 | 53 | .. note:: If the user is already logged in, the old ``auth_token`` is returned. 54 | No new token is issued in this case. 55 | 56 | Status code 57 | ``200 OK`` 58 | Content type 59 | ``application/json; charset=utf-8`` 60 | 61 | Response body example: 62 | 63 | .. include:: api-v1-sessions.response-valid.json 64 | :code: 65 | 66 | 67 | Invalid login data 68 | ------------------ 69 | When the login data are invalid. 70 | 71 | Also seen when the data were not available yet (e.g. user freshly registered) 72 | but the processes on the server were not finished yet. 73 | The OUYA simply tried the request a second time. 74 | 75 | Status code 76 | ``400 Bad Request`` 77 | Content type 78 | ``application/json; charset=utf-8`` 79 | 80 | Response body example: 81 | 82 | .. include:: api-v1-sessions.response-invalid.json 83 | :code: 84 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-gamers.rst: -------------------------------------------------------------------------------- 1 | =========================================== 2 | ``POST https://devs.ouya.tv/api/v1/gamers`` 3 | =========================================== 4 | 5 | Register a new user and/or verify new user registration data. 6 | 7 | This method is both used as verification during input, as well as the 8 | final registration. 9 | 10 | Razer Forge TV uses `POST https://devs.ouya.tv/api/razer/gamer`_ instead. 11 | 12 | 13 | Usage 14 | ===== 15 | #. During registration to check if data are valid 16 | #. During registration to finish new user sign up and create the account 17 | 18 | 19 | HTTP request 20 | ============ 21 | Protocol 22 | ``https`` 23 | Method 24 | ``GET`` 25 | Host 26 | ``devs.ouya.tv`` 27 | Path 28 | ``/api/v1/gamers`` 29 | Headers 30 | Standard headers except token parameters. 31 | 32 | ``Content-Type`` 33 | ``application/x-www-form-urlencoded`` 34 | POST parameters 35 | ``gamer[username]`` 36 | User name used to log in 37 | ``gamer[password]`` 38 | User password 39 | ``gamer[password_confirmation]`` 40 | User password, a second time 41 | ``gamer[email]`` 42 | User e-mail address for marketing e-mails 43 | ``gamer[gender]`` 44 | ``unknown`` | ``male`` | ``female`` 45 | ``gamer[email_opt_out]`` 46 | ``false`` | ``true`` 47 | 48 | Opt out from marketing e-mails 49 | ``dryrun`` 50 | ``true`` 51 | 52 | If set, the user data are not registered - only verified. 53 | The response then tells which fields are deemed invalid. 54 | 55 | Not set when the user clicks "register". 56 | 57 | 58 | HTTP response 59 | ============= 60 | 61 | ..note:: Does not support HTTP redirects! 62 | 63 | Success 64 | ------- 65 | When everything is ok and the user has been registered 66 | (or the data were valid when ``dryrun`` was set) 67 | 68 | Status code 69 | ``200 OK`` 70 | Content type 71 | ``application/json; charset=utf-8`` 72 | Response body 73 | ``{}`` 74 | 75 | Validation error 76 | ---------------- 77 | When some of the data are deemed to be invalid. 78 | 79 | Status code 80 | ``400 Bad Request`` 81 | Content type 82 | ``application/json; charset=utf-8`` 83 | 84 | Example: 85 | 86 | .. include:: api-v1-gamers.response-invalid.json 87 | :code: 88 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-games-xxx-community_content.rst: -------------------------------------------------------------------------------- 1 | =============================================================== 2 | ``GET https://devs.ouya.tv/api/v1/games/xxx/community_content`` 3 | =============================================================== 4 | 5 | Fetch available community content (e.g. levels) for the game. 6 | 7 | 8 | HTTP request 9 | ============ 10 | Protocol 11 | ``https`` 12 | Method 13 | ``GET`` 14 | Host 15 | ``devs.ouya.tv`` 16 | Path 17 | ``/api/v1/games/xxx/community_content`` 18 | 19 | ``xxx`` 20 | app package name 21 | 22 | Example: ``/api/v1/games/tv.ouya.sample.cc/community_content`` 23 | Headers 24 | Standard headers 25 | GET parameters 26 | ``auth_token`` 27 | Same as ``X-OUYA-AuthToken`` 28 | ``sort`` 29 | ``created_at`` 30 | ``rating`` 31 | ``updated_at`` 32 | 33 | Sort order 34 | ``limit`` 35 | ``10`` 36 | 37 | Number of results to return 38 | ``offset`` 39 | Page, only set when > 0 40 | ``category`` 41 | Category filter 42 | 43 | 44 | HTTP response 45 | ============== 46 | 47 | Struct taken from ``tv.ouya.console.api.content.CCSearchResults`` 48 | (``full-ouya-framework.apk``). 49 | 50 | ``communityContentCount`` 51 | int. Required. 52 | ``communityContent`` 53 | array of objects. Required. 54 | 55 | ``author`` 56 | String 57 | ``authorUuid`` 58 | String 59 | ``category`` 60 | String 61 | ``contentUrl`` 62 | String 63 | ``dependencies`` 64 | Array of strings 65 | ``description`` 66 | String 67 | ``fileSize`` 68 | int 69 | ``flagged`` 70 | bool 71 | ``gameTitle`` 72 | String 73 | ``md5sum`` 74 | String 75 | ``metaInfo`` 76 | String 77 | ``rating`` 78 | Object. 79 | 80 | ``average`` 81 | float 82 | ``count`` 83 | int 84 | ``user`` 85 | Float with F? 86 | ``revision`` 87 | int 88 | ``screenshot`` 89 | Object 90 | 91 | ``type`` 92 | String 93 | ``urls`` 94 | Array of objects 95 | 96 | ``full`` 97 | String 98 | ``thumbnail`` 99 | String 100 | ``tags`` 101 | Array of strings 102 | ``title`` 103 | String 104 | ``uuid`` 105 | String 106 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-games-xxx-purchases.post.rst: -------------------------------------------------------------------------------- 1 | ======================================================== 2 | ``POST https://devs.ouya.tv/api/v1/games/xxx/purchases`` 3 | ======================================================== 4 | 5 | Buy a game. 6 | 7 | After buying the game shows up in 8 | `GET https://devs.ouya.tv/api/v1/premium_purchases`_. 9 | 10 | 11 | Usage 12 | ===== 13 | - When the user buys an app/game. 14 | 15 | 16 | HTTP request 17 | ============ 18 | Protocol 19 | ``https`` 20 | Method 21 | ``POST`` 22 | Host 23 | ``devs.ouya.tv`` 24 | Path 25 | ``/api/v1/games/xxx/purchases`` 26 | 27 | ``xxx`` 28 | app package name 29 | 30 | Example: ``/api/v1/games/com.ChrisChung.CatlateralDamage/purchases`` 31 | Headers 32 | Standard headers 33 | 34 | ``Content-Type`` 35 | ``application/x-www-form-urlencoded`` 36 | GET parameters 37 | ``auth_token`` 38 | Same as ``X-OUYA-AuthToken`` 39 | ``user_agent`` 40 | ``launcher`` (at least when bought through the OUYA UI) 41 | POST parameters 42 | ``blob`` 43 | Base64-encoded encrypted data 44 | ``iv`` 45 | Base64-encoded initialization vector for the cryptographic function 46 | ``key`` 47 | Base64-encoded key used to encrypt the ``blob``. 48 | Encrypted with FIXME: gamer key or developer key. 49 | ``auth_token`` 50 | Same as ``X-OUYA-AuthToken`` 51 | 52 | The decrypted ``blob`` again contains ``blob``, ``key`` and ``iv``. 53 | 54 | The decrypted inner ``blob`` contains a JSON object: 55 | 56 | ``identifier`` 57 | Product key 58 | ``testing`` 59 | Unknown. Always "true". 60 | ``uuid`` 61 | Random number that is used by the game for this purchase request. 62 | Must be returned in the response to this request. 63 | 64 | Raw request (without encryption): 65 | 66 | .. include:: api-v1-games-xxx-purchases.post.request-nocrypt.json 67 | :code: 68 | 69 | Decrypted: 70 | 71 | .. include:: api-v1-games-xxx-purchases.post.request-decrypted.json 72 | :code: 73 | 74 | 75 | HTTP response 76 | ============= 77 | Status code 78 | ``200 OK`` 79 | Content-type 80 | ``application/json; charset=utf-8`` 81 | 82 | Again the base-64 encoded keys: ``iv``, ``key`` and ``blob``. 83 | 84 | ``blob`` is a JSON object that needs to contain the ``uuid`` property. 85 | Most games do not want any other properties. 86 | 87 | "God of Blades" requires: 88 | 89 | - ``identifier`` 90 | - ``name`` 91 | - ``priceInCents`` 92 | 93 | Example 94 | ------- 95 | 96 | .. include:: api-v1-games-xxx-purchases.post.response.json 97 | :code: 98 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-apps-xxxuuid-response.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "uuid": "15083557-535d-43a2-9ac3-a1a774f79d97", 4 | "title": "Ascent of Kings", 5 | "supportEmailAddress": "contact@nostatic.org", 6 | "supportPhone": null, 7 | "website": "https:\/\/web.archive.org\/web\/20190528042713\/http:\/\/nostaticsoftware.com\/", 8 | "founder": false, 9 | "versionNumber": "1.5", 10 | "likeCount": 162, 11 | "overview": "Released in July 2013 by Nostatic Software.", 12 | "contentRating": "Everyone", 13 | "publicSize": 0, 14 | "nativeSize": 0, 15 | "ratingAverage": 3.84, 16 | "ratingCount": 88, 17 | "gamerNumbers": [ 18 | 1 19 | ], 20 | "developer": "Nostatic Software", 21 | "description": "The death of a King. An epic challenge to choose a new ruler. Will the youngest of four brothers turn out to be the strongest? Will a boy become King? The answer is up to you.\r\n\r\n- Classic adventure-platformer gameplay.\r\n\r\n- Explore and encounter strange creatures - some harmless, some not.\r\n\r\n- Navigate dangerous passages and evade deadly traps.\r\n\r\n- Seek out elemental shrines and receive upgraded abilities.", 22 | "premium": false, 23 | "promotedProduct": { 24 | "identifier": "ascent_full_game", 25 | "name": "Ascent of Kings Full Game Unlock", 26 | "currency": "USD", 27 | "description": "", 28 | "percentOff": 0, 29 | "localPrice": 0.99, 30 | "originalPrice": 0.99 31 | }, 32 | "md5sum": null, 33 | "apkFileSize": 14869324, 34 | "filepickerScreenshots": [ 35 | "https:\/\/web.archive.org\/web\/20190528042713\/https:\/\/d3e4aumcqn8cw3.cloudfront.net\/api\/file\/wwUdB7OjQEiunENVe3Lg", 36 | "https:\/\/web.archive.org\/web\/20190528042713\/https:\/\/d3e4aumcqn8cw3.cloudfront.net\/api\/file\/yZAvCqOQCa9GOA01iwN2", 37 | "https:\/\/web.archive.org\/web\/20190528042713\/https:\/\/d3e4aumcqn8cw3.cloudfront.net\/api\/file\/vuACRQYOQqq8hyOKVAtN", 38 | "https:\/\/web.archive.org\/web\/20190528042713\/https:\/\/d3e4aumcqn8cw3.cloudfront.net\/api\/file\/eQZ0vztqShyEDfZEsAqG" 39 | ], 40 | "mainImageFullUrl": "https:\/\/web.archive.org\/web\/20190528042713\/https:\/\/d3e4aumcqn8cw3.cloudfront.net\/api\/file\/h6foyzx7T7CLXIfH4QIt", 41 | "genres": [ 42 | "Adventure", 43 | "Platformer" 44 | ], 45 | "latestVersion": "15083557-535d-43a2-9ac3-a1a774f79d97", 46 | "firstPublishedAt": "2013-07-18T19:54:19Z", 47 | "publishedAt": "2013-07-18T19:54:19Z", 48 | "videoUrl": null, 49 | "mobileAppIcon": null 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-premium_purchases.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "games": [ 3 | { 4 | "gamerNumbers": [ 5 | 1, 6 | 2, 7 | 3, 8 | 4 9 | ], 10 | "genres": [ 11 | "Fight!", 12 | "Multiplayer", 13 | "Sports" 14 | ], 15 | "url": "ouya://launcher/details?app=net.froemling.bombsquad", 16 | "latestVersion": { 17 | "apk": { 18 | "md5sum": "e1a734acba287777da24fe5eaf8101c0" 19 | }, 20 | "versionNumber": "1.4.17", 21 | "uuid": "b1396eb2-6b3f-4ccd-82f8-fadc05094931" 22 | }, 23 | "inAppPurchases": true, 24 | "promotedProduct": { 25 | "type": "entitlement", 26 | "developerName": "Eric Froemling", 27 | "identifier": "FullGameBombSquad", 28 | "name": "BombSquad Pro", 29 | "localPrice": 4.99, 30 | "originalPrice": 4.99, 31 | "percentOff": 0, 32 | "currency": "USD", 33 | "description": "Doubles tickets earned in-game, gives a power-ranking bonus, and more.." 34 | }, 35 | "premium": false, 36 | "type": "app", 37 | "package": "net.froemling.bombsquad", 38 | "updated_at": 1431712678, 39 | "updatedAt": "2015-05-15T17:57:58Z", 40 | "title": "BombSquad", 41 | "image": "https://www.filepicker.io/api/file/AObi2TITPGH2bKTbSvLt", 42 | "contentRating": "9+", 43 | "rating": { 44 | "count": 3057, 45 | "average": 4.42 46 | } 47 | }, 48 | { 49 | "gamerNumbers": [ 50 | 1 51 | ], 52 | "genres": [ 53 | "Kids List", 54 | "Multiplayer", 55 | "Sports" 56 | ], 57 | "url": "ouya://launcher/details?app=net.mountainsheep.icerage", 58 | "latestVersion": { 59 | "apk": { 60 | "md5sum": null 61 | }, 62 | "versionNumber": "1.8", 63 | "uuid": "9ba50e67-1bb7-4ac3-8d01-36fbc8ae2566" 64 | }, 65 | "inAppPurchases": true, 66 | "promotedProduct": { 67 | "type": "entitlement", 68 | "developerName": "Mountain Sheep, Inc.", 69 | "identifier": "ICE_RAGE_UNLOCK_FULL_GAME", 70 | "name": "Unlock Full Game", 71 | "localPrice": 2.99, 72 | "originalPrice": 2.99, 73 | "percentOff": 0, 74 | "currency": "USD", 75 | "description": "" 76 | }, 77 | "premium": false, 78 | "type": "app", 79 | "package": "net.mountainsheep.icerage", 80 | "updated_at": 1381227272, 81 | "updatedAt": "2013-10-08T10:14:32Z", 82 | "title": "Ice Rage", 83 | "image": "https://www.filepicker.io/api/file/JLXK36xeSLCg1Faqw67Q", 84 | "contentRating": "Everyone", 85 | "rating": { 86 | "count": 1595, 87 | "average": 4.15 88 | } 89 | } 90 | ] 91 | } 92 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-details.response-bundle.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundle": { 3 | "apps": [ 4 | { 5 | "gamerNumbers": [ 6 | 1 7 | ], 8 | "genres": [ 9 | "Adventure", 10 | "Kids List", 11 | "Puzzle/Trivia" 12 | ], 13 | "url": "ouya://launcher/details?app=com.GoldenTricycle.Clark", 14 | "latestVersion": { 15 | "apk": { 16 | "md5sum": "a674b6c205502d9b4a907ade90307ba0" 17 | }, 18 | "versionNumber": "1.24", 19 | "uuid": "7230ac05-d24c-4347-a990-7ac283c17063" 20 | }, 21 | "inAppPurchases": true, 22 | "promotedProduct": { 23 | "type": "entitlement", 24 | "developerName": "GoldenTricycle / Hahn Film AG", 25 | "identifier": "clark_full_license_test", 26 | "name": "Clarc Full Version", 27 | "localPrice": 3.99, 28 | "originalPrice": 3.99, 29 | "percentOff": 0, 30 | "currency": "USD", 31 | "description": "This item unlocks the full game with 25 levels, more than 100 puzzles and more than 10 hours of gameplay." 32 | }, 33 | "premium": false, 34 | "type": "app", 35 | "package": "com.GoldenTricycle.Clark", 36 | "updated_at": 1384854785, 37 | "updatedAt": "2013-11-19T09:53:05Z", 38 | "title": "CLARC", 39 | "image": "https://www.filepicker.io/api/file/VzCsgc3BTx2RiGpTr4Uw", 40 | "contentRating": "Everyone", 41 | "rating": { 42 | "count": 716, 43 | "average": 4.25 44 | } 45 | }, 46 | { 47 | "gamerNumbers": [ 48 | 1 49 | ], 50 | [...] 51 | } 52 | ], 53 | "currency": "EUR", 54 | "price": 6.99, 55 | "contentRating": "9+", 56 | "purchased": false, 57 | "games": [ 58 | "com.GoldenTricycle.Clark", 59 | "com.Tripleslash.MagneticByNature", 60 | "com.Thinice.TwinRobots", 61 | "com.scaryrobot.badbadbots" 62 | ], 63 | "purchaseUrl": "ouya://launcher/purchase?developer=ec1a9ccd-373f-4047-bd07-36466ab7e25d&product=ROBOBUNDLE" 64 | }, 65 | "buttons": [], 66 | "apps": [], 67 | "muted": true, 68 | "metaData": [ 69 | "Golden Tricycle", 70 | "Team Tripleslash", 71 | "Scary Robot", 72 | "Thinice" 73 | ], 74 | "mediaTiles": [ 75 | { 76 | "url": "https://vimeo.com/84689664", 77 | "type": "video" 78 | }, 79 | { 80 | "urls": { 81 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150202-3-6hikjv.jpeg", 82 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/oivu9a_RackMultipart20150202-15-1sg3fmt" 83 | }, 84 | "type": "image" 85 | } 86 | ], 87 | "description": "CLARC, Magnetic By Nature\r\n\r\nAbout CLARC\r\n", 88 | "title": "ROBO GAME BUNDLE!" 89 | } 90 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-games-xxx-purchases.rst: -------------------------------------------------------------------------------- 1 | ======================================================= 2 | ``GET https://devs.ouya.tv/api/v1/games/xxx/purchases`` 3 | ======================================================= 4 | 5 | Check which features have been bought in an app (if the app has been 6 | bought). 7 | 8 | Each game may have multiple products that can be bought. 9 | One of them may be the "promotedProduct" in the discover section, and 10 | that one can be bought in the discover store / play menu app details. 11 | 12 | 13 | Usage 14 | ===== 15 | - When an app/game is featured and shown on the main menu ("home"), 16 | it is checked if the app has already been purchased. 17 | - When opening the game details the "buy" button is shown if the 18 | "promotedProduct" is in the list of purchases 19 | - When a game starts it checks if it has been bought. 20 | 21 | 22 | HTTP request 23 | ============ 24 | Protocol 25 | ``https`` 26 | Method 27 | ``GET`` 28 | Host 29 | ``devs.ouya.tv`` 30 | Path 31 | ``/api/v1/games/xxx/purchases`` 32 | 33 | ``xxx`` 34 | app package name 35 | 36 | Example: ``/api/v1/games/com.ChrisChung.CatlateralDamage/purchases`` 37 | Headers 38 | Standard headers 39 | GET parameters 40 | ``auth_token`` 41 | Same as ``X-OUYA-AuthToken`` 42 | ``app_id`` 43 | ``com.ChrisChung.CatlateralDamage`` 44 | 45 | Same as the one in the path. 46 | ``user_agent`` 47 | ``launcher`` 48 | 49 | 50 | HTTP response 51 | ============= 52 | Status code 53 | ``200 OK`` 54 | Content-type 55 | ``application/json; charset=utf-8`` 56 | 57 | The response is a JSON object containing three properties: 58 | 59 | ``iv`` 60 | Base 64 encoded initialization vector for encryption 61 | ``key`` 62 | Base 64 encoded FIXME. Must be 128/192/256 bits long. 63 | ``blob`` 64 | Base64 encoded encrypted data 65 | 66 | The decrypted ``blob`` contains again a JSON object with three properties: 67 | 68 | - ``iv`` 69 | - ``key`` 70 | - ``blob`` 71 | 72 | This blob is again base64-encoded JSON and contains the actual data: 73 | A JSON with a single property "purchases" whose value is 74 | an array of receipts/purchases. 75 | 76 | Each receipt has the following properties: 77 | 78 | ``purchaseDate`` 79 | Required. Milliseconds. 80 | ``generateDate`` 81 | Optional. Milliseconds. 82 | ``identifier`` 83 | Product key. Required. Alternative name: ``sku``. 84 | ``gamer`` 85 | User UUID. Required. 86 | ``uuid`` 87 | Transaction UUID. Required. 88 | ``priceInCents`` 89 | Integer. Required. 90 | ``localPrice`` 91 | Float. Optional. 92 | ``currency`` 93 | Optional. Default ``USD``. 94 | 95 | Example 96 | ------- 97 | 98 | Encrypted response: 99 | 100 | .. include:: api-v1-games-xxx-purchases.response.json 101 | :code: 102 | 103 | Decrypted receipt list: 104 | 105 | .. include:: api-v1-games-xxx-purchases.response-decrypted.json 106 | :code: 107 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-apps-xxx.response-bombsquad.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "videoUrl": "http://vimeo.com/81224217", 4 | "publishedAt": "2015-05-19T19:28:47Z", 5 | "firstPublishedAt": "2013-04-30T21:10:07Z", 6 | "latestVersion": "b1396eb2-6b3f-4ccd-82f8-fadc05094931", 7 | "promotedProduct": { 8 | "originalPrice": 4.49, 9 | "localPrice": 4.49, 10 | "percentOff": 0, 11 | "description": "Doubles tickets earned in-game, gives a power-ranking bonus, and more..", 12 | "currency": "EUR", 13 | "name": "BombSquad Pro", 14 | "identifier": "FullGameBombSquad" 15 | }, 16 | "genres": [ 17 | "Fight!", 18 | "Multiplayer", 19 | "Sports" 20 | ], 21 | "premium": false, 22 | "description": "8 Player Party Game Madness!\nBlow up your friends in mini-games ranging from capture-the-flag to hockey.\nFeaturing gratuitous explosions, advanced ragdoll face-plant physics, pirates, ninjas, barbarians, insane chefs, and more.\nSupports PS3 controllers, XBox 360 controllers, most USB/Bluetooth gamepads, and even iOS and Android devices as controllers via the free 'BombSquad Remote' app.\nBombs Away!\n\nVersion history:\n1.4.17 - new global player profiles and custom icons\n1.4.16 - added continues and polishing\n1.4.14 - bug fixes\n1.4.11 - New tournament and league functionality\n1.4.9 - Santa and Frosty are back for the holidays! Also a new map and new tournament.\n1.4.8 - added Bernard the Bear and new tournament types\n1.4.7 - added 'easy' mode for campaign, 2 new mini-games, more tournament types, and more trophies\n1.4.6 - Net-play (preview), Replays, Co-op Tournaments, new unlockables, cloud saves, and lots more", 23 | "developer": "Eric Froemling", 24 | "gamerNumbers": [ 25 | 1, 26 | 2, 27 | 3, 28 | 4 29 | ], 30 | "ratingCount": 3041, 31 | "ratingAverage": 4.42, 32 | "apkFileSize": 49817654, 33 | "founder": false, 34 | "mainImageFullUrl": "https://devs-ouya-tv-prod.s3.amazonaws.com/apps/6bbb461b-eab7-4d8a-90ba-9c4c2c02d463/net.froemling.bombsquad/b1396eb2-6b3f-4ccd-82f8-fadc05094931/ouya_icon.png", 35 | "website": "http://www.froemling.net/apps/bombsquad", 36 | "supportPhone": null, 37 | "supportEmailAddress": "support@froemling.net", 38 | "title": "BombSquad", 39 | "uuid": "b1396eb2-6b3f-4ccd-82f8-fadc05094931", 40 | "versionNumber": "1.4.17", 41 | "likeCount": 3478, 42 | "overview": "Released in May 2015 by Eric Froemling.", 43 | "filepickerScreenshots": [ 44 | "https://www.filepicker.io/api/file/75dSamHkQiuKpg7o3DXF", 45 | "https://www.filepicker.io/api/file/g0sFFV1Tc2gidAYkaQPU", 46 | "https://www.filepicker.io/api/file/zswgv6FOQcqZWt7oyV00", 47 | "https://www.filepicker.io/api/file/51a1JNYKRaeQAAVeNedw", 48 | "https://www.filepicker.io/api/file/0dnBNiw2Sser5X8kpezG" 49 | ], 50 | "contentRating": "9+", 51 | "md5sum": "e1a734acba287777da24fe5eaf8101c0", 52 | "publicSize": 508390, 53 | "nativeSize": 10455000 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-apps-xxx.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "videoUrl": null, 4 | "publishedAt": "2014-12-05T20:30:48Z", 5 | "firstPublishedAt": "2014-08-25T03:35:11Z", 6 | "latestVersion": "0fba3bba-83e0-4e3e-9f29-409258429757", 7 | "promotedProduct": { 8 | "originalPrice": 4.49, 9 | "localPrice": 4.49, 10 | "percentOff": 0, 11 | "description": "Play head-to-head against another opponent. If you don't have a second controller connected, you can play against a CPU-controlled opponent.", 12 | "currency": "EUR", 13 | "name": "2P VS Battle Mode", 14 | "identifier": "TBOE_Mode2P_1-50" 15 | }, 16 | "genres": [ 17 | "Puzzle/Trivia", 18 | "Arcade/Pinball", 19 | "Retro" 20 | ], 21 | "premium": false, 22 | "description": "Tetris® Battle: Fusion is now available on OUYA! Based on Tetris Battle, the hugely popular multiplayer game on Facebook that has been downloaded over 60 million times, Tetris Battle: Fusion introduces an all-new interactive adventure where you can battle your way through a series of challenging opponents and goals to become a Tetris Master! Collect special Amulets that can be used to give you an added boost as you progress your way to victory. Over 50 Amulets are ready to collect, and more will be added periodically. With the help of Amulets, don't change the way you play ... change the way you WIN! The game also features a 1v1 local co-op mode that enables friends in the same room to go head-to-head using previously earned Amulets.\r\n\r\nPLEASE NOTE: This app contains in-app purchasing, which allows you to buy items within the app using actual money.", 23 | "developer": "Tetris Online, Inc.", 24 | "gamerNumbers": [ 25 | 1 26 | ], 27 | "ratingCount": 861, 28 | "ratingAverage": 3.73, 29 | "apkFileSize": 41125055, 30 | "founder": false, 31 | "mainImageFullUrl": "https://devs-ouya-tv-prod.s3.amazonaws.com/apps/a137f31c-ad28-47e6-ae43-0a346ebe249a/com.toa.tetrisFusionOuya/0fba3bba-83e0-4e3e-9f29-409258429757/ouya_icon.png", 32 | "website": "www.tetrisonline.com", 33 | "supportPhone": null, 34 | "supportEmailAddress": "support@tetrisonline.com", 35 | "title": "Tetris Battle Fusion", 36 | "uuid": "0fba3bba-83e0-4e3e-9f29-409258429757", 37 | "versionNumber": "2.0.1r", 38 | "likeCount": 0, 39 | "overview": "Released in December 2014 by Tetris Online, Inc..", 40 | "filepickerScreenshots": [ 41 | "https://www.filepicker.io/api/file/fio2PmJQQla1fZdVEZxl", 42 | "https://www.filepicker.io/api/file/VESfV97VTSn4uRp5lY9A", 43 | "https://www.filepicker.io/api/file/To75Tn2Tw6J7nvPG4nBk", 44 | "https://www.filepicker.io/api/file/bjzlwTjvQe6HA4awlHTw", 45 | "https://www.filepicker.io/api/file/qcQEibHxT9Wa1PCoMpX2", 46 | "https://www.filepicker.io/api/file/kQKVJ2xyRnCnmysUjZkD", 47 | "https://www.filepicker.io/api/file/8zJEBwIBTmoFNiJyLKoY", 48 | "https://www.filepicker.io/api/file/zTnyJklUSYOlpJ1E04fH" 49 | ], 50 | "contentRating": "Everyone", 51 | "md5sum": "ad1f58f365859e5bc0db8c237b4c4514", 52 | "publicSize": 258150, 53 | "nativeSize": 5607144 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /api/ouya-updates.s3.amazonaws.com/updates-ouya_1_1.html: -------------------------------------------------------------------------------- 1 |

GET http://ouya-updates.s3.amazonaws.com/updates-ouya_1_1.json

Information about the latest firmware. 83 | Only used by old firmware versions like 1.0.138 and 1.0.158. 84 | Firmware 1.0.248 and later do not check this URL anymore and 85 | use `GET https://devs.ouya.tv/api/firmware_builds`_ instead.

HTTP request

Protocol

http

Method

GET

Host

ouya-updates.s3.amazonaws.com

Path

/updates-ouya_1_1.json

HTTP response

Status code

200 OK

{
 86 |   "result": [
 87 |     {
 88 |       "filename": "OUYA-1.2.1084-r1.zip",
 89 |       "timestamp": "1400714704",
 90 |       "md5sum": "ed9f1712988c5ec2033f44fabe8e6297",
 91 |       "channel": "stable",
 92 |       "url": "http://devs-ouya-tv-prod.s3.amazonaws.com/ota/RC-OUYA-1.2.1084-r1_ota.zip",
 93 |       "requiredUpto": "1.2.995",
 94 |       "changes": "https://devs.ouya.tv/api/changelog/ed9f1712988c5ec2033f44fabe8e6297.txt",
 95 |       "changesLocalized": {
 96 |         "en": "<!doctype html>\r\n<html>\r\n    <head>\r\n...",
 97 |         "es": "<!doctype html>\r\n<html>\r\n    <head>\r\n...",
 98 |         "fr": "<!doctype html>\r\n<html>\r\n    <head>\r\n...",
 99 |         "it": "<!doctype html>\r\n<html>\r\n    <head>\r\n...",
100 |         "de": "<!doctype html>\r\n<html>\r\n    <head>\r\n..."
101 |       },
102 |       "incremental": false
103 |     }
104 |   ]
105 | }

Docutils System Messages

System Message: ERROR/3

updates-ouya_1_1.rstline 5 backlink

Unknown target name: "get https://devs.ouya.tv/api/firmware_builds".

-------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-details.rst: -------------------------------------------------------------------------------- 1 | =========================================== 2 | ``GET https://devs.ouya.tv/api/v1/details`` 3 | =========================================== 4 | 5 | Detail page for an app bundle. 6 | 7 | Also used as detail page for installed games when opened through 8 | the "Play" section. 9 | 10 | If there are no details available, the error code 2005 needs to be returned. 11 | Otherwise opening the details for an installed but unlisted game will 12 | fail on the OUYA. 13 | 14 | 15 | HTTP request 16 | ============ 17 | Protocol 18 | ``https`` 19 | Method 20 | ``GET`` 21 | Host 22 | ``devs.ouya.tv`` 23 | Path 24 | ``/api/v1/details`` 25 | Headers 26 | Standard headers 27 | GET parameters 28 | ``auth_token`` 29 | Same as ``X-OUYA-AuthToken`` 30 | ``page`` 31 | UUID of the bundle page to show 32 | 33 | Example: ``be239ca4-10fd-42dd-89cd-1806e80b1362`` 34 | ``app`` 35 | Package name of an app. 36 | 37 | Example: ``org.blockinger.game`` 38 | ``developer`` 39 | UUID of the developer 40 | 41 | Example: ``5b015434-8a78-4274-aa5d-0cb2e330e50e`` 42 | ``community_content`` 43 | UUID of a community content module 44 | 45 | Only one of ``app``, ``developer`` or ``page`` is provided. 46 | 47 | 48 | HTTP response 49 | ============= 50 | Status code 51 | ``200 OK`` 52 | Content-type 53 | ``application/json; charset=utf-8`` 54 | 55 | 56 | Response body definition 57 | ------------------------ 58 | 59 | ``ccUrl`` 60 | Show community content for this game 61 | 62 | ``developer.url`` 63 | Not set for everyone. 64 | If set, a "Developer page" button is shown on the game details screen. 65 | 66 | Example when set: ``ouya://launcher/details?developer=92345f8d-ddbd-43f2-afcf-2628b1234713`` 67 | 68 | ``metaData`` 69 | Array of strings that determine which data are shown in the top row. 70 | 71 | Allowed values: 72 | 73 | - ``key:rating.average``: Shows the rating stars from ``rating.average`` 74 | - ``key:apk.fileSize``: Shows the ``apk.fileSize`` as readable size with unit. 75 | - ``key:twitterHandle``: Shows the ``twitterHandle`` property, automatically prefixes an "@". 76 | - Any string value beginning with "key:" fetches the key path from JSON, e.g. ``developer.name``. 77 | - Any string value that does not begin with ``key:`` is shown as-is. 78 | 79 | ``promotedProduct`` 80 | When set, the "Buy" button is shown on the details screen. 81 | 82 | 83 | Example: App 84 | ------------ 85 | 86 | .. include:: api-v1-details.response-app.json 87 | :code: 88 | 89 | Example: Bundle 90 | --------------- 91 | 92 | .. include:: api-v1-details.response-bundle.json 93 | :code: 94 | 95 | A full version of that response data is available in git at 96 | ``api/devs.ouya.tv/api-v1-details.response-bundle-full.json`` 97 | 98 | 99 | Example: Unlisted game 100 | ----------------------- 101 | 102 | .. include:: api-v1-details.response-unlisted.json 103 | :code: 104 | 105 | 106 | Buttons 107 | ======= 108 | It is possible to add buttons in each of the detail types. 109 | 110 | There are two types of buttons: 111 | 112 | - Switchable buttons (on/off state) 113 | - URL buttons (``android.intent.action.VIEW``, 114 | e.g. to open URLs or detail pages of other apps) 115 | 116 | 117 | Button for a detail page of an app 118 | ---------------------------------- 119 | .. include:: api-v1-details.response-button-appdetails.json 120 | :code: 121 | 122 | Button for a website URL 123 | ------------------------ 124 | .. include:: api-v1-details.response-button-url.json 125 | :code: 126 | 127 | Switchable button 128 | ----------------- 129 | .. include:: api-v1-details.response-button-switchable.json 130 | :code: 131 | 132 | When the details page is loaded, ``status_url`` is fetched. 133 | It needs to return ``{"status":true}`` or ``{"status":false}``. 134 | 135 | If "true" is returned, ``on_text`` is shown. 136 | Clicking will launch ``off_url``. 137 | 138 | If "false is returned, ``text`` is shown. 139 | Clicking will launch ``url``. 140 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | **************************** 2 | OUYA store API documentation 3 | **************************** 4 | 5 | This is an attempt to document the API used by OUYA gaming consoles to 6 | speak with ``devs.ouya.tv``. 7 | 8 | .. contents:: 9 | :depth: 1 10 | 11 | .. include:: headers.rst 12 | .. include:: api/ott9.wpstn.com/live.rst 13 | .. include:: api/status.ouya.tv/api-v1-status.rst 14 | .. include:: api/devs.ouya.tv/api-firmware_builds.rst 15 | .. include:: api/devs.ouya.tv/api-razer-gamer.post.rst 16 | .. include:: api/devs.ouya.tv/api-razer-gamer.put.rst 17 | .. include:: api/devs.ouya.tv/api-razer-session.rst 18 | .. include:: api/devs.ouya.tv/api-v1-apps-xxx.rst 19 | .. include:: api/devs.ouya.tv/api-v1-apps-xxx-download.rst 20 | .. include:: api/devs.ouya.tv/api-v1-console_configuration.rst 21 | .. include:: api/devs.ouya.tv/api-v1-crash_report.rst 22 | .. include:: api/devs.ouya.tv/api-v1-credit_card.post.rst 23 | .. include:: api/devs.ouya.tv/api-v1-credit_card.put.rst 24 | .. include:: api/devs.ouya.tv/api-v1-details.rst 25 | .. include:: api/devs.ouya.tv/api-v1-developers-xxx-current_gamer.rst 26 | .. include:: api/devs.ouya.tv/api-v1-developers-xxx-products.rst 27 | .. include:: api/devs.ouya.tv/api-v1-discover.rst 28 | .. include:: api/devs.ouya.tv/api-v1-discover-home.rst 29 | .. include:: api/devs.ouya.tv/api-v1-discover-tutorials.rst 30 | .. include:: api/devs.ouya.tv/api-v1-events.rst 31 | .. include:: api/devs.ouya.tv/api-v1-gamers.rst 32 | .. include:: api/devs.ouya.tv/api-v1-gamers-key.put.rst 33 | .. include:: api/devs.ouya.tv/api-v1-gamers-me.rst 34 | .. include:: api/devs.ouya.tv/api-v1-gamers-me-agreements.rst 35 | .. include:: api/devs.ouya.tv/api-v1-gamers-me-agreements.put.rst 36 | .. include:: api/devs.ouya.tv/api-v1-gamers-me-apps-developed.rst 37 | .. include:: api/devs.ouya.tv/api-v1-gamers-me-consoles.rst 38 | .. include:: api/devs.ouya.tv/api-v1-gamers-me-user_messages.rst 39 | .. include:: api/devs.ouya.tv/api-v1-games-xxx-community_content.rst 40 | .. include:: api/devs.ouya.tv/api-v1-games-xxx-community_content.post.rst 41 | .. include:: api/devs.ouya.tv/api-v1-games-xxx-purchases.rst 42 | .. include:: api/devs.ouya.tv/api-v1-games-xxx-purchases.post.rst 43 | .. include:: api/devs.ouya.tv/api-v1-partner_builds.rst 44 | .. include:: api/devs.ouya.tv/api-v1-partner_builds-release_notes.rst 45 | .. include:: api/devs.ouya.tv/api-v1-premium_purchases.rst 46 | .. include:: api/devs.ouya.tv/api-v1-queued_downloads.rst 47 | .. include:: api/devs.ouya.tv/api-v1-queued_downloads-xxx.delete.rst 48 | .. include:: api/devs.ouya.tv/api-v1-ratings.rst 49 | .. include:: api/devs.ouya.tv/api-v1-ratings.post.rst 50 | .. include:: api/devs.ouya.tv/api-v1-recommendations.rst 51 | .. include:: api/devs.ouya.tv/api-v1-search.rst 52 | .. include:: api/devs.ouya.tv/api-v1-sessions.rst 53 | .. include:: api/devs.ouya.tv/api-v1-themes.rst 54 | .. include:: api/devs.ouya.tv/api-v1-wallet.rst 55 | .. include:: api/devs.ouya.tv/agreements-marketplace.html.rst 56 | .. include:: api/devs.ouya.tv/update_strings.txt.rst 57 | .. include:: api/ouya-updates.s3.amazonaws.com/updates-ouya_1_1.rst 58 | .. include:: api/www.ouya.tv/system_message.rst 59 | .. include:: api/configuration.rst 60 | 61 | 62 | ===== 63 | About 64 | ===== 65 | This documentation has been written by Christian Weiske, 66 | cweiske+ouya@cweiske.de. 67 | 68 | Last update: ##UPDATE## 69 | 70 | 71 | License 72 | ======= 73 | It is licensed under the GNU Free Documentation License. 74 | 75 | 76 | Source code 77 | =========== 78 | The documentation sources are available at 79 | http://git.cweiske.de/ouya-store-api.git/ 80 | and mirrored at 81 | https://github.com/cweiske/ouya-store-api 82 | 83 | 84 | Home page 85 | ========= 86 | A rendered version of this documentation is available at 87 | http://cweiske.de/ouya-store-api-docs.htm 88 | 89 | 90 | 91 | Building 92 | ======== 93 | You need to install ``rst2html5`` before:: 94 | 95 | $ pip install rst2html5-tools 96 | 97 | Rendering the docs is done via a build script:: 98 | 99 | $ ./build.sh 100 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-discover.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "rows": [ 3 | { 4 | "showPrice": true, 5 | "ranked": true, 6 | "tiles": [ 0, 1, 2, 3 ], 7 | "title": "TRENDING NOW" 8 | }, 9 | { 10 | "showPrice": true, 11 | "ranked": false, 12 | "tiles": [ 94, 95, 96 ], 13 | "title": "NEW RELEASES" 14 | }, 15 | { 16 | "showPrice": true, 17 | "ranked": false, 18 | "tiles": [ 94, 62 ], 19 | "title": "OUR FOUNDERS" 20 | } 21 | ], 22 | "tiles": [ 23 | { 24 | "gamerNumbers": [ 25 | 1 26 | ], 27 | "genres": [ 28 | "Fight!", 29 | "Multiplayer", 30 | "Platformer", 31 | "Retro", 32 | "Sports" 33 | ], 34 | "url": "ouya://launcher/details?app=evil.corptron.DuckGame", 35 | "latestVersion": { 36 | "apk": { 37 | "md5sum": "ac4e1ddefe383f8314fe5914edcf8705" 38 | }, 39 | "versionNumber": "1.11", 40 | "uuid": "7cbd8b8b-e9df-4c30-9e0f-5a777c5e4eb4" 41 | }, 42 | "inAppPurchases": true, 43 | "promotedProduct": { 44 | "type": "entitlement", 45 | "developerName": "Landon Podbielski", 46 | "identifier": "DUCKGAME", 47 | "name": "Duck Game", 48 | "localPrice": 8.99, 49 | "originalPrice": 8.99, 50 | "percentOff": 0, 51 | "currency": "EUR", 52 | "description": "You are buying Duck Game you lucky person. " 53 | }, 54 | "premium": false, 55 | "type": "app", 56 | "package": "evil.corptron.DuckGame", 57 | "updated_at": 1417731390, 58 | "updatedAt": "2014-12-04T22:16:30Z", 59 | "title": "DUCK GAME", 60 | "image": "https://www.filepicker.io/api/file/iESEZs3fSUafrXuNpagi", 61 | "contentRating": "Everyone", 62 | "rating": { 63 | "count": 1155, 64 | "average": 4.31 65 | } 66 | }, 67 | { 68 | "gamerNumbers": [ 69 | 1, 70 | 2 71 | ], 72 | "genres": [ 73 | "Adventure", 74 | "Arcade/Pinball", 75 | "Dual Stick", 76 | "FPS/Shooter", 77 | "Fight!", 78 | "Kids List", 79 | "Multiplayer", 80 | "Racing", 81 | "Short on Time?" 82 | ], 83 | "url": "ouya://launcher/details?app=com.media.playcast.OUYA.BAA", 84 | "latestVersion": { 85 | "apk": { 86 | "md5sum": "39931a3179e6c984771f0f1f49b59e87" 87 | }, 88 | "versionNumber": "1.6.35707.8", 89 | "uuid": "abe8eeb3-4fd9-45bb-ba6b-50eb9d60478b" 90 | }, 91 | "inAppPurchases": true, 92 | "promotedProduct": null, 93 | "premium": false, 94 | "type": "app", 95 | "package": "com.media.playcast.OUYA.BAA", 96 | "updated_at": 1433234808, 97 | "updatedAt": "2015-06-02T08:46:48Z", 98 | "title": "GameFly Packful Of Fun", 99 | "image": "https://www.filepicker.io/api/file/05y2T8cKTY6cUfX7RYFR", 100 | "contentRating": "17+", 101 | "rating": { 102 | "count": 394, 103 | "average": 4.09 104 | } 105 | }, 106 | { 107 | "url": "ouya://launcher/details?page=08db29bd-c2f0-41d7-9e5d-d842f1bf34d2", 108 | "image": "https://s3.amazonaws.com/ouya-screenshots/08db29bd-c2f0-41d7-9e5d-d842f1bf34d2/thumbnails/thumbnail20150512-3-1gigg1x.jpeg", 109 | "uuid": "08db29bd-c2f0-41d7-9e5d-d842f1bf34d2", 110 | "title": "OUYA PRESENTS: JOE DANGER", 111 | "type": "details_page" 112 | }, 113 | { 114 | "url": "ouya://launcher/details?page=3bdbe05a-201f-40c0-bb58-5aa4d6ea79dc", 115 | "image": "https://s3.amazonaws.com/ouya-screenshots/3bdbe05a-201f-40c0-bb58-5aa4d6ea79dc/thumbnails/thumbnail20150220-3-1p5bhh7.jpeg", 116 | "uuid": "3bdbe05a-201f-40c0-bb58-5aa4d6ea79dc", 117 | "title": "OUYA PRESENTS: THE JACKBOX PARTY PACK", 118 | "type": "details_page" 119 | }, 120 | { 121 | "url": "ouya://launcher/discover/Adventure", 122 | "image": "", 123 | "title": "Adventure", 124 | "type": "discover" 125 | }, 126 | ], 127 | "title": "DISCOVER" 128 | } 129 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-partner_builds.rst: -------------------------------------------------------------------------------- 1 | ================================================== 2 | ``GET https://devs.ouya.tv/api/v1/partner_builds`` 3 | ================================================== 4 | 5 | Fetch commands for the "OUYA Everywhere" installer. 6 | 7 | The OUYA Everywhere installer ``tv.ouya.oe.installer`` fetches this URL 8 | from the server, installs package updates (framework, console UI) 9 | and then starts the actual console UI. 10 | 11 | Used on the Mad Catz Mojo and Razer Forge TV. 12 | 13 | 14 | HTTP request 15 | ============ 16 | Protocol 17 | ``https`` 18 | Method 19 | ``GET`` 20 | Host 21 | ``devs.ouya.tv`` 22 | Path 23 | ``/api/v1/partner_builds`` 24 | Headers 25 | The Razer Forge TV seems to prefix all custom headers with ``X-OUYA-`` 26 | while the Mojo version only uses ``X-``. 27 | 28 | ``User-Agent`` 29 | Known values: 30 | 31 | - ``ouya-everywhere-installer (MadCatz/mojo-TS/mojo:4.2.2/JDQ39/MO0205-TS:user/release-keys)`` 32 | - ``ouya-everywhere-installer (razer/pearlyn/pearlyn:6.0.1/M-MMB29M-rzs-us-sf-bld2-19HP-08.02.AM/144:user/release-keys)`` 33 | ``Accept-Language`` 34 | - ``de`` 35 | - ``en-US,en`` 36 | ``X-InstallerVersionCode`` 37 | Razer Forge TV: ``8`` 38 | ``X-InstallerVersionName`` 39 | Razer Forge TV: ``1.08`` 40 | ``X-InstallerPackageName`` 41 | ``tv.ouya.oe.installer`` 42 | ``X-OUYA-Console-Id`` 43 | Build serial number 44 | 45 | Razer Forge TV: ``171256710321511`` 46 | ``X-Device`` 47 | ?? 48 | ``X-OUYA-Device`` 49 | Razer Forge TV: ``pearlyn`` 50 | ``X-Product`` 51 | ?? 52 | ``X-OUYA-Product`` 53 | Razer Forge TV: ``pearlyn`` 54 | ``X-Model`` 55 | ?? 56 | ``X-OUYA-Model`` 57 | Razer Forge TV: ``Forge`` 58 | ``X-Brand`` 59 | ?? 60 | ``X-OUYA-Brand`` 61 | Razer Forge TV:``razer`` 62 | ``X-Display`` 63 | ?? 64 | ``X-OUYA-Display`` 65 | Razer Forge TV: ``M-MMB29M-rzs-us-sf-bld2-19HP-08.02.AM.144`` 66 | ``X-BuildId`` 67 | ?? 68 | ``X-OUYA-BuildId`` 69 | Razer Forge TV: ``M-MMB29M-rzs-us-sf-bld2-19HP-08.02.AM`` 70 | ``X-Manufacturer`` 71 | ?? 72 | ``X-OUYA-Manufacturer`` 73 | Razer Forge TV: ``razer`` 74 | ``OUYAUsername`` 75 | When logged in. 76 | ``X-OUYA-AuthToken`` 77 | Only when logged in already 78 | 79 | ``00702342-0000-1111-2222-c3e1500cafe1`` 80 | 81 | 82 | HTTP response 83 | ============= 84 | Status code 85 | ``200 OK`` 86 | Content-type 87 | ``application/json; charset=utf-8`` 88 | 89 | 90 | Response body definition 91 | ------------------------ 92 | The response is a list of commands that the OUYA Everywhere installer 93 | will execute one after another. 94 | 95 | The top-level object contains a key ``actions``, which is an array of 96 | action objects. 97 | Each action has a ``action`` property that defines its type. 98 | 99 | 100 | exit action 101 | ----------- 102 | Just stop the installer. 103 | 104 | No additional properties. 105 | 106 | .. include:: api-v1-partner_builds.exit.json 107 | :code: 108 | 109 | 110 | installFile action 111 | ------------------ 112 | Install the given .apk file if it has not yet been installed. 113 | 114 | ``action`` 115 | ``installFile`` 116 | ``packageName`` 117 | Name of package to install. Example: ``de.ouya.cweiske.foo`` 118 | ``friendlyName`` 119 | Name shown on screen during installation 120 | ``md5`` 121 | Example: ``d3b07384d113edec49eaa6238ad5ff00`` 122 | ``filesize`` 123 | ``12345`` 124 | ``downloadUrl`` 125 | ``http://example.org/app.apk`` 126 | ``versionCode`` 127 | Optional property. Example: ``23``. 128 | 129 | Only install when the current version is lower than this number. 130 | 131 | 132 | launch action 133 | ------------- 134 | Start the given application 135 | 136 | ``action`` 137 | ``launch`` 138 | ``packageName`` 139 | Application to start. Example: ``de.ouya.cweiske.foo`` 140 | 141 | 142 | showDialog action 143 | ----------------- 144 | Show a message that the user has to confirm. 145 | 146 | ``action`` 147 | ``showDialog`` 148 | ``title`` 149 | Message dialog title string 150 | ``message`` 151 | Actual text 152 | ``verticalMargin`` 153 | Optional. Example: ``1.0`` 154 | 155 | 156 | uninstallFile action 157 | -------------------- 158 | Remove a package 159 | 160 | ``action`` 161 | ``uninstallFile`` 162 | ``packageName`` 163 | Example: ``de.ouya.cweiske.foo`` 164 | ``keepData`` 165 | Optional boolean. Example: ``false`` 166 | ``ifLessThanVersionCode`` 167 | Optional integer. Example: ``12`` 168 | ``ifGreaterThanVersionCode`` 169 | Optional integer. Example: ``42`` 170 | 171 | 172 | Example 173 | ------- 174 | 175 | .. include:: api-v1-partner_builds.response.json 176 | :code: 177 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-details.response-app.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Game", 3 | "title": "BombSquad", 4 | "description": "8 Player Party Game Madness!\nBlow up your friends in mini-games ranging from capture-the-flag to hockey.\nFeaturing gratuitous explosions, advanced ragdoll face-plant physics, pirates, ninjas, barbarians, insane chefs, and more.\nSupports PS3 controllers, XBox 360 controllers, most USB/Bluetooth gamepads, and even iOS and Android devices as controllers via the free 'BombSquad Remote' app.\nBombs Away!\n\nVersion history:\n1.4.123 - Account unlinking & bug fixes\n1.4.116 - Bug fixes\n1.4.113 - Bug fixes\n1.4.105 - Shields now lose health over time and spinning too long causes you to pass out\n1.4.99 - Better language support in net-games\n1.4.98 - New netplay features such as kick votes\n1.4.94 - More netplay performance improvements\n1.4.93 - Netplay performance improvements\n1.4.88 - Public internet parties\n1.4.69 - Bug fixes and polishing\n1.4.66 - Easter edition!\n1.4.62 - new characters and bug fixes\n1.4.47 - bug fixes\n1.4.38 - bug fixes\n1.4.32 - more icons, bug fixes, and UI improvements\n1.4.17 - new global player profiles and custom icons\n1.4.16 - added continues and polishing\n1.4.14 - bug fixes\n1.4.11 - New tournament and league functionality\n1.4.9 - Santa and Frosty are back for the holidays! Also a new map and new tournament.\n1.4.8 - added Bernard the Bear and new tournament types", 5 | "mediaTiles": [ 6 | { 7 | "type": "video", 8 | "url": "http://vimeo.com/81224217" 9 | }, 10 | { 11 | "type": "image", 12 | "urls": { 13 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/thumbnail20170911-3-4r3lgn.png", 14 | "full": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/ouya-image20170911-3-1ja1uwj" 15 | }, 16 | "fp_url": "https://www.filepicker.io/api/file/75dSamHkQiuKpg7o3DXF" 17 | }, 18 | { 19 | "type": "image", 20 | "urls": { 21 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/thumbnail20170911-3-14kztkg.png", 22 | "full": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/ouya-image20170911-3-jg5ypv" 23 | }, 24 | "fp_url": "https://www.filepicker.io/api/file/g0sFFV1Tc2gidAYkaQPU" 25 | }, 26 | { 27 | "type": "image", 28 | "urls": { 29 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/thumbnail20170911-3-csiwp7.png", 30 | "full": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/ouya-image20170911-3-s0jlzk" 31 | }, 32 | "fp_url": "https://www.filepicker.io/api/file/zswgv6FOQcqZWt7oyV00" 33 | }, 34 | { 35 | "type": "image", 36 | "urls": { 37 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/thumbnail20170911-3-1615w0d.png", 38 | "full": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/ouya-image20170911-3-jcvr8g" 39 | }, 40 | "fp_url": "https://www.filepicker.io/api/file/51a1JNYKRaeQAAVeNedw" 41 | }, 42 | { 43 | "type": "image", 44 | "urls": { 45 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/thumbnail20170911-3-1ryqwq9.png", 46 | "full": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/ouya-image20170911-3-pom01u" 47 | }, 48 | "fp_url": "https://www.filepicker.io/api/file/0dnBNiw2Sser5X8kpezG" 49 | } 50 | ], 51 | "heroImage": { 52 | "url": "https://s3.amazonaws.com/ouya-screenshots/b9fea1c7-c0d9-445f-b424-471c1d9446d8/ouya-image20161126-3-1x3bs88" 53 | }, 54 | "mobileAppIcon": "https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/ouya-image20170911-3-v6tjz1", 55 | "premium": false, 56 | "promotedProduct": { 57 | "identifier": "FullGameBombSquad", 58 | "name": "BombSquad Pro", 59 | "localPrice": 4.99, 60 | "originalPrice": 4.99, 61 | "percentOff": 0, 62 | "currency": "USD", 63 | "description": "Doubles tickets earned in-game, gives a power-ranking bonus, and more..", 64 | "type": "entitlement" 65 | }, 66 | "inAppPurchases": true, 67 | "rating": { 68 | "count": 3706, 69 | "average": 4.36 70 | }, 71 | "developer": { 72 | "name": "Eric Froemling", 73 | "founder": false 74 | }, 75 | "suggestedAge": "9+", 76 | "apk": { 77 | "fileSize": 58535084, 78 | "nativeSize": 9511196, 79 | "publicSize": 571122, 80 | "md5sum": "54d5d03855add2b824040e39a9380f48", 81 | "filename": "1zbYKRSS1elKIYI9eseH_BombSquad-ouya-release.apk", 82 | "errors": "", 83 | "package": "net.froemling.bombsquad", 84 | "versionCode": 14304, 85 | "state": "complete" 86 | }, 87 | "firstPublishedAt": 1367356207, 88 | "version": { 89 | "number": "1.4.123", 90 | "publishedAt": 1506379060, 91 | "uuid": "3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd" 92 | }, 93 | "metaData": [ 94 | "key:rating.average", 95 | "key:developer.name", 96 | "key:suggestedAge", 97 | "56.12 MiB" 98 | ], 99 | "tileImage": "https://d3e4aumcqn8cw3.cloudfront.net/api/file/0xrPYAcTUCYpjTUPbqSV", 100 | "ccUrl": null, 101 | "gamerNumbers": [ 102 | 1, 103 | 2, 104 | 3, 105 | 4 106 | ], 107 | "genres": [ 108 | "Fight!", 109 | "Multiplayer", 110 | "Sports" 111 | ] 112 | } 113 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-discover.rst: -------------------------------------------------------------------------------- 1 | ============================================ 2 | ``GET https://devs.ouya.tv/api/v1/discover`` 3 | ============================================ 4 | 5 | Fetch the categories and games in the OUYA store. 6 | 7 | 8 | HTTP request 9 | ============ 10 | Protocol 11 | ``https`` 12 | Method 13 | ``GET`` 14 | Host 15 | ``devs.ouya.tv`` 16 | Path 17 | ``/api/v1/discover`` 18 | Headers 19 | Standard headers 20 | GET parameters 21 | ``auth_token`` 22 | Same as ``X-OUYA-AuthToken`` 23 | 24 | 25 | HTTP response 26 | ============= 27 | Status code 28 | ``200 OK`` 29 | Content-type 30 | ``application/json; charset=utf-8`` 31 | 32 | HTTP redirects (e.g. 302) are supported. 33 | 34 | Response body definition 35 | ------------------------ 36 | JSON object with two properties: ``rows`` and ``tiles``. 37 | ``rows`` contains the layout of the "discover" store main view, while 38 | ``tiles`` contains the list of games/apps available in the store with 39 | details. 40 | 41 | 42 | ``rows`` 43 | -------- 44 | Array with objects that have with several properties: 45 | 46 | ``showPrice`` 47 | ``true`` or ``false`` 48 | ``ranked`` 49 | ``true`` or ``false`` 50 | 51 | If the games are sorted by the internal ranking factor, or in order 52 | of appearance in ``tiles``. 53 | ``tiles`` 54 | array 55 | 56 | List of integer game IDs (``[0, 1, 2]``) 57 | ``title`` 58 | string 59 | 60 | Title of the category 61 | 62 | 63 | ``tiles`` 64 | --------- 65 | Array of objects that each describe a single application. 66 | 67 | The position in the ``tiles`` array is the ID used by ``rows/tiles``. 68 | 69 | ``bundle`` 70 | Only there when it's not a single game but a bundle of games that can be 71 | bought. 72 | 73 | Object with the following properties: 74 | 75 | ``apps`` 76 | array 77 | 78 | Array of ``package`` strings 79 | ``currency`` 80 | ``EUR`` 81 | ``price`` 82 | float 83 | ``contentRating`` 84 | See ``contentRating`` description below. 85 | ``purchaseUrl`` 86 | string 87 | 88 | URL where to initiate buying the bundle 89 | 90 | ``ouya://launcher/purchase?developer=ec1a9ccd-373f-4047-bd07-36466ab7e25d&product=ROBOBUNDLE`` 91 | ``contentRating`` 92 | For which audiences the game is meant 93 | 94 | Seen values: 95 | 96 | - ``Everyone`` 97 | - ``9+`` 98 | - ``12+`` 99 | - ``17+`` 100 | ``gamerNumbers`` 101 | array 102 | 103 | List of integers describing how many players can play the game 104 | ``genres`` 105 | array 106 | 107 | Array of strings with genre titles. 108 | 109 | ``["Fight!", "Multiplayer", "Platformer"]`` 110 | 111 | Known genres: 112 | 113 | - Adventure 114 | - App 115 | - Arcade/Pinball 116 | - Card/Casino 117 | - Dual Stick 118 | - Entertainment 119 | - Fight! 120 | - FPS/Shooter 121 | - Kids List 122 | - Meditative 123 | - Multiplayer 124 | - Music 125 | - Platformer 126 | - Puzzle/Trivia 127 | - Racing 128 | - Retro 129 | - Role-Playing 130 | - Short on Time? 131 | - Sim/Strategy 132 | - Sports 133 | - Utility 134 | - Video 135 | ``image`` 136 | URL to an image displayed in store view. 137 | 138 | Size should be 732x412. 139 | 140 | ``.jpg`` and ``.png`` files work. 141 | ``inAppPurchases`` 142 | ``true`` or ``false`` 143 | 144 | If you can/have to pay within the game 145 | ``latestVersion`` 146 | object 147 | 148 | ``apk`` 149 | ``md5sum`` 150 | MD5 hash of the apk file. Used for verification after download. 151 | ``versionNumber`` 152 | string with current version, e.g. ``1.11`` 153 | ``uuid`` 154 | UUID of the release. 155 | ``package`` 156 | string 157 | 158 | java package name prefix, e.g. ``evil.corptron.DuckGame`` 159 | ``premium`` 160 | ``true`` or ``false`` 161 | 162 | When ``true``, the game has no demo version and has to be bought before 163 | it can be downloaded. 164 | ``promotedProduct`` 165 | object 166 | 167 | Bundles do not have this property set. 168 | 169 | The "buy" button buys this product. 170 | 171 | ``currency`` 172 | string 173 | 174 | ``EUR`` 175 | ``description`` 176 | string 177 | ``developerName`` 178 | string 179 | 180 | Name of the developer or company who made the game 181 | ``identifier`` 182 | string 183 | 184 | ??? 185 | ``localPrice`` 186 | float 187 | 188 | Current price 189 | ``name`` 190 | string 191 | 192 | Title of the game 193 | ``originalPrice`` 194 | float 195 | 196 | Price it did once cost 197 | ``percentOff`` 198 | integer 199 | 200 | Percent difference between ``originalPrice`` and ``localPrice`` 201 | ``type`` 202 | string 203 | 204 | ``entitlement`` is the only type seen within ``promotedProduct``. 205 | ``rating`` 206 | Object with two properties: ``count`` and ``average``. 207 | 208 | ``count`` 209 | integer 210 | 211 | Number of votes for this game 212 | ``average`` 213 | float 214 | 215 | Average rating (1-5) 216 | ``title`` 217 | Name of the app/game 218 | ``type`` 219 | ``app`` or ``discover`` or ``details_page`` 220 | 221 | Bundles always have ``details_page``. 222 | ``updated_at`` 223 | integer 224 | 225 | Unix timestamp of last update date 226 | ``updatedAt`` 227 | string 228 | 229 | ISO 8601-date, e.g. ``2014-12-04T22:16:30Z`` 230 | ``url`` 231 | string 232 | 233 | URL for the game details page 234 | 235 | Game details 236 | ``ouya://launcher/details?app=evil.corptron.DuckGame`` 237 | Bundle details 238 | ``ouya://launcher/details?page=be239ca4-10fd-42dd-89cd-1806e80b1362`` 239 | 240 | See `GET https://devs.ouya.tv/api/v1/details`_. 241 | 242 | ``title`` 243 | --------- 244 | string 245 | 246 | Always ``DISCOVER``. 247 | 248 | 249 | Example 250 | ------- 251 | 252 | .. include:: api-v1-discover.response.json 253 | :code: 254 | 255 | The API git repository contains a full copy of the "discover" response 256 | at ``api/devs.ouya.tv/api-v1-discover.response-full.json``. 257 | 258 | 259 | Bundle example 260 | -------------- 261 | 262 | .. include:: api-v1-discover.response-bundle.json 263 | :code: 264 | -------------------------------------------------------------------------------- /api/configuration.rst: -------------------------------------------------------------------------------- 1 | ===================== 2 | Configuration options 3 | ===================== 4 | 5 | It is possible to modify the behavior of the OUYA console by setting config 6 | options. 7 | 8 | They can be set in two ways: 9 | 10 | 1. In an ini-style file ``ouya_config.properties`` in the root OUYA directory 11 | when attached via USB to a PC (``/sdcard/`` on the OUYA itself). 12 | 2. On the server, via the `GET https://devs.ouya.tv/api/v1/console_configuration`_ 13 | JSON file. 14 | 15 | 16 | Available options 17 | ================= 18 | 19 | ``ATTRACT_LOOP_FILENAME`` 20 | ------------------------- 21 | Full path to the not-in-use-autoplay video in kiosk mode. 22 | 23 | Default: ``/sdcard/ouya_attract_loop.mp4`` 24 | 25 | 26 | ``CCTEST`` 27 | ---------- 28 | When set to ``1``, the "Manage" menu shows a "[DEBUG] Test CC signup" entry. 29 | 30 | 31 | ``CRASH_REPORTS`` 32 | ----------------- 33 | When set to ``1``, the "Manage" menu shows a "[DEBUG] Send crash reports" entry. 34 | It immediately sends stored crash reports to the server. 35 | 36 | 37 | ``DEBUG`` 38 | --------- 39 | When set to ``1``, additional output is shown in ``adb logcat``. 40 | You will see the remote server URLs that the OUYA is trying to fetch. 41 | 42 | 43 | ``DELETE_ACCOUNTS`` 44 | ------------------- 45 | When set to ``1``, the "Manage" menu shows a "[DEBUG] Delete user accounts" entry 46 | that immediately deletes the user account. 47 | 48 | 49 | ``DONT_DELETE_OTA`` 50 | ------------------- 51 | When an over-the-air update has been downloaded, it gets moved to 52 | ``/cache/update.zip``. 53 | After moving, the original file gets deleted. 54 | This option disabled this deletion. 55 | 56 | Default: ``0`` 57 | 58 | (in ``ouya-framework.jar``) 59 | 60 | 61 | ``DUMP_DISCOVER_PAGES`` 62 | ----------------------- 63 | Store the downloaded API responses for discover category pages on 64 | ``/sdcard/``. 65 | 66 | 67 | ``ENABLE_AGREEMENTS`` 68 | --------------------- 69 | When disabled, the regular fetch of ``/api/v1/gamers/me/agreements`` will not happen. 70 | 71 | Also does not show the agreements during user registration in OOBE. 72 | 73 | Default: ``1`` 74 | 75 | 76 | ``ENABLE_BUY_NOW`` 77 | ------------------ 78 | When set to ``1``, the store details view shows a "buy now" button 79 | for games that have the "premium" flag set and a promoted product. 80 | 81 | Default: ``1`` 82 | 83 | 84 | ``ENABLE_BUY_NOW_PRICE`` 85 | ------------------------ 86 | When set to ``1``, the store details view shows the product price on 87 | the "buy now" button (see ``ENABLE_BUY_NOW``). 88 | 89 | Default: ``1`` 90 | 91 | 92 | ``ENABLE_BUY_NOW_PRICE_GUIDE`` 93 | ------------------------------ 94 | When set to ``1``, the guide menu 95 | (that appears when double-clicking the ouya logo button) 96 | shows the price of the promoted product. 97 | 98 | 99 | ``ENABLE_UPLOAD_LOGS`` 100 | ---------------------- 101 | Automatically update system logs. Needs super user access for uploading. 102 | 103 | Default: ``1`` 104 | 105 | 106 | ``FORCE_OTA`` 107 | ------------- 108 | When set to ``1``: Force the OUYA to install an over-the-air update. 109 | 110 | Default: ``0`` 111 | 112 | 113 | ``FORCE_VIDEO_ERROR`` 114 | --------------------- 115 | When set to ``1``: Show an error whenever a video shall be played. 116 | 117 | Default: ``0`` 118 | 119 | 120 | ``KIOSK_MODE`` 121 | -------------- 122 | When set to ``1``, the OUYA is set to a read-only mode. 123 | 124 | Only the "play" menu is visible, and it only allows to start games - not even see their 125 | details. 126 | 127 | Upon inactivity after some minutes, a video 128 | ``/storage/sdcard0/ouya_attract_loop.mp4`` is being played. 129 | (See ``ATTRACT_LOOP_FILENAME``) 130 | 131 | 132 | ``LOC_MULTIPLIER`` 133 | ------------------ 134 | Float value between 1.0 and 3.0 135 | 136 | Increases the string length by the given factor by repeating the letters 137 | in translatable strings. 138 | 139 | 140 | ``LOC_XXX`` 141 | ----------- 142 | When set to ``1``, all letters in translatable strings are replaced with ``X``. 143 | 144 | Needs a reboot. 145 | 146 | 147 | ``METRIC_APP_DETAILS`` 148 | ---------------------- 149 | When set to ``1``: Send a tracking notification whenever a details page 150 | in the store is shown, along with the app UUID. 151 | 152 | 153 | ``OE_MAX_DOWNLOADS`` 154 | -------------------- 155 | Number of maximum downloads in the queue for non-ouya devices. 156 | 157 | Default: ``10`` 158 | 159 | 160 | ``OUYA_MAX_DOWNLOADS`` 161 | ---------------------- 162 | Number of maximum downloads in the queue for original OUYA devices. 163 | 164 | Default: ``5`` 165 | 166 | 167 | ``OUYA_SERVER_URL`` 168 | ------------------- 169 | Base URL of the API server to connect. 170 | By modifying this value, you can switch the OUYA to another server. 171 | 172 | Default: ``https://devs.ouya.tv`` 173 | 174 | 175 | ``OUYA_STATUS_SERVER_URL`` 176 | -------------------------- 177 | Used to check if the OUYA can reach the internet. 178 | 179 | This URL needs to return a "204" HTTP status code. 180 | 181 | Default: ``http://status.ouya.tv/api/v1/status`` 182 | 183 | 184 | ``QUERY_GENDER_DOB`` 185 | -------------------- 186 | Show the gender and birthday input fields during registration in OOBE. 187 | 188 | Default: ``1`` 189 | 190 | 191 | ``RATING_PROMPT_DELAY`` 192 | ----------------------- 193 | Number of game launches until the "rate this game" prompt is shown. 194 | 195 | Default: ``0`` (after the first launch) 196 | 197 | 198 | ``RATING_PROMPT_FREQ`` 199 | ---------------------- 200 | When rating a game has been skipped, it will be tried again after X launches. 201 | 202 | ``0`` to disable rating popups. 203 | 204 | Default: ``5`` 205 | 206 | 207 | ``RATING_PROMPT_MAX`` 208 | --------------------- 209 | Maximum number of "Rate this game" popups per game. 210 | 211 | Default: ``0`` (infinite) 212 | 213 | 214 | ``SAFE_ZONE`` 215 | ------------- 216 | Show a grey border around the OOBE screen. 217 | 218 | Default: ``0`` 219 | 220 | 221 | ``UPDATE_TEXT_URL`` 222 | ------------------- 223 | When installing an update, funny messages are shown. 224 | They are downloaded from this URL. 225 | 226 | Default: ``https://devs.ouya.tv/update_strings.txt`` 227 | 228 | 229 | ``USER_MESSAGES`` 230 | ----------------- 231 | Comma-separated list of URLs to show to the user. 232 | See `GET https://devs.ouya.tv/api/v1/gamers/me/user_messages`_. 233 | 234 | Default: empty 235 | 236 | 237 | ``WIFI_STATUS_DISPLAY`` 238 | ----------------------- 239 | When set to ``1``: 240 | Shows the current wifi status on the top right of all screens. 241 | 242 | Example: 243 | 244 | Wifi: INTERFACE_DISABLED, Strenght (0-8): 0 245 | 246 | 247 | 248 | Undocumented options 249 | ==================== 250 | Only the name of this variables is known:: 251 | 252 | BTC_LAUNCHER_PACKAGES 253 | BTC_PARAMS_APP 254 | BTC_PARAMS_LAUNCHER 255 | COMPARE_OTA_SETTINGS 256 | UPDATE_READY_UI_TIMEOUT 257 | UPLOAD_LOGS_SEQ_NUM 258 | 259 | 260 | Unused options 261 | ============== 262 | They are defined in the code, but not used anywhere in ``OUYALauncher.apk``:: 263 | 264 | APP_UPDATE_CHECK_INTERVAL 265 | ATTRACT_LOOP_TIMEOUT 266 | COMMUNITY_CONTENT_ENABLED 267 | DEBUG_PICASSO 268 | DISCOVER_HEADER_TEXT 269 | ENABLE_REMOTES 270 | ENABLE_TRACES 271 | INPUT_REMAPPING_JSON_FILE 272 | LOCALE 273 | METRIC_EXIT_GENRE 274 | METRIC_EXIT_STORE 275 | METRICS_SPEW 276 | NUM_RECENT_DOWNLOADS_IN_DISCOVER 277 | OUYA_RENAME_CONTROLLER 278 | SESSION_UPDATE_DELAY_SEC 279 | SHOW_DISCOUNTS 280 | SYSTEM_MESSAGE_URL 281 | THEME_CHECK_INTERVAL 282 | USE_FAKE_VIDEOS 283 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-discover-home.response.json: -------------------------------------------------------------------------------- 1 | { 2 | "rows": [ 3 | { 4 | "showPrice": true, 5 | "ranked": false, 6 | "tiles": [ 7 | 0, 8 | 1, 9 | 2, 10 | 3, 11 | 4, 12 | 5, 13 | 6, 14 | 7, 15 | 8, 16 | 9 17 | ], 18 | "title": "FEATURED" 19 | } 20 | ], 21 | "tiles": [ 22 | { 23 | "bundle": { 24 | "apps": [ 25 | "com.GoldenTricycle.Clark", 26 | "com.Tripleslash.MagneticByNature", 27 | "com.Thinice.TwinRobots", 28 | "com.scaryrobot.badbadbots" 29 | ], 30 | "currency": "EUR", 31 | "price": 6.99, 32 | "contentRating": "9+", 33 | "purchaseUrl": "ouya://launcher/purchase?developer=ec1a9ccd-373f-4047-bd07-36466ab7e25d&product=ROBOBUNDLE" 34 | }, 35 | "url": "ouya://launcher/details?page=be239ca4-10fd-42dd-89cd-1806e80b1362", 36 | "image": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150202-3-6hikjv.jpeg", 37 | "uuid": "be239ca4-10fd-42dd-89cd-1806e80b1362", 38 | "title": "ROBO GAME BUNDLE!", 39 | "type": "details_page" 40 | }, 41 | { 42 | "gamerNumbers": [ 43 | 1, 44 | 2 45 | ], 46 | "genres": [ 47 | "Adventure", 48 | "Fight!", 49 | "Multiplayer", 50 | "Platformer", 51 | "Retro", 52 | "Role-Playing" 53 | ], 54 | "url": "ouya://launcher/details?app=com.ethanonengine.ouya.magicrampage", 55 | "latestVersion": { 56 | "apk": { 57 | "md5sum": "d49198f7863e86e16289cc57e98d2b51" 58 | }, 59 | "versionNumber": "1.8.9", 60 | "uuid": "b7addbde-907a-4ffb-9964-0681f288b16d" 61 | }, 62 | "inAppPurchases": false, 63 | "promotedProduct": { 64 | "type": "entitlement", 65 | "developerName": "Asantee Games", 66 | "identifier": "mr_full", 67 | "name": "Magic Rampage Full Upgrade", 68 | "localPrice": 3, 69 | "originalPrice": 5.99, 70 | "percentOff": 50, 71 | "currency": "EUR", 72 | "description": "Grants full access to all Dungeons, Survival scenarios and all features available in the game." 73 | }, 74 | "premium": false, 75 | "type": "app", 76 | "package": "com.ethanonengine.ouya.magicrampage", 77 | "updated_at": 1433347308, 78 | "updatedAt": "2015-06-03T16:01:48Z", 79 | "title": "Magic Rampage", 80 | "image": "https://www.filepicker.io/api/file/szh3Jvi4RlCsP5csZCCA", 81 | "contentRating": "9+", 82 | "rating": { 83 | "count": 467, 84 | "average": 4.3 85 | } 86 | }, 87 | { 88 | "gamerNumbers": [ 89 | 1 90 | ], 91 | "genres": [ 92 | "FPS/Shooter", 93 | "Kids List", 94 | "Meditative", 95 | "Sim/Strategy" 96 | ], 97 | "url": "ouya://launcher/details?app=com.ChrisChung.CatlateralDamage", 98 | "latestVersion": { 99 | "apk": { 100 | "md5sum": "a1128ceef7cb758d3f7b5b1b8aba08fd" 101 | }, 102 | "versionNumber": "1.0", 103 | "uuid": "ed25db89-3819-42aa-86a6-1995d147f8b0" 104 | }, 105 | "inAppPurchases": false, 106 | "promotedProduct": { 107 | "type": "entitlement", 108 | "developerName": "Chris Chung", 109 | "identifier": "CatlateralDamageFull", 110 | "name": "Catlateral Damage", 111 | "localPrice": 8.99, 112 | "originalPrice": 8.99, 113 | "percentOff": 0, 114 | "currency": "EUR", 115 | "description": "See the world through the eyes of a domestic house cat and make a mess!" 116 | }, 117 | "premium": true, 118 | "type": "app", 119 | "package": "com.ChrisChung.CatlateralDamage", 120 | "updated_at": 1433878173, 121 | "updatedAt": "2015-06-09T19:29:33Z", 122 | "title": "Catlateral Damage", 123 | "image": "https://www.filepicker.io/api/file/GlAx27RQ8mvDiWzOyYfy", 124 | "contentRating": "Everyone", 125 | "rating": { 126 | "count": 62, 127 | "average": 4.4 128 | } 129 | }, 130 | { 131 | "gamerNumbers": [ 132 | 1 133 | ], 134 | "genres": [ 135 | "Adventure", 136 | "Puzzle/Trivia" 137 | ], 138 | "url": "ouya://launcher/details?app=com.nightlightinteractive.ww", 139 | "latestVersion": { 140 | "apk": { 141 | "md5sum": "fc10c2fdebc0941aebe45ca42d6de125" 142 | }, 143 | "versionNumber": "1.21", 144 | "uuid": "7a6f354d-2078-4da5-8f87-31c9afcf6793" 145 | }, 146 | "inAppPurchases": true, 147 | "promotedProduct": { 148 | "type": "entitlement", 149 | "developerName": "Night Light Interactive", 150 | "identifier": "0", 151 | "name": "Full Game", 152 | "localPrice": 8.99, 153 | "originalPrice": 8.99, 154 | "percentOff": 0, 155 | "currency": "EUR", 156 | "description": "Full game unlock for Whispering Willows!" 157 | }, 158 | "premium": false, 159 | "type": "app", 160 | "package": "com.nightlightinteractive.ww", 161 | "updated_at": 1421708589, 162 | "updatedAt": "2015-01-19T23:03:09Z", 163 | "title": "Whispering Willows", 164 | "image": "https://www.filepicker.io/api/file/J656P6lKRdWUxMno98NJ", 165 | "contentRating": "12+", 166 | "rating": { 167 | "count": 316, 168 | "average": 4.36 169 | } 170 | }, 171 | { 172 | "gamerNumbers": [ 173 | 1 174 | ], 175 | "genres": [ 176 | "Meditative", 177 | "Platformer", 178 | "Puzzle/Trivia" 179 | ], 180 | "url": "ouya://launcher/details?app=com.bedtime.backtobed", 181 | "latestVersion": { 182 | "apk": { 183 | "md5sum": "b11997273b836cac5dc81c667c0214da" 184 | }, 185 | "versionNumber": "1.0.3", 186 | "uuid": "e5a6c616-c5ed-413f-9894-7f6675ca7aaf" 187 | }, 188 | "inAppPurchases": false, 189 | "promotedProduct": { 190 | "type": "entitlement", 191 | "developerName": "Bedtime Digital Games", 192 | "identifier": "backtobed", 193 | "name": "Back to Bed", 194 | "localPrice": 3.59, 195 | "originalPrice": 3.59, 196 | "percentOff": 0, 197 | "currency": "EUR", 198 | "description": "3D puzzle with a unique and artistic dream world wherein you guide a sleepwalker." 199 | }, 200 | "premium": true, 201 | "type": "app", 202 | "package": "com.bedtime.backtobed", 203 | "updated_at": 1410959937, 204 | "updatedAt": "2014-09-17T13:18:57Z", 205 | "title": "Back to Bed", 206 | "image": "https://www.filepicker.io/api/file/s8TYVxSsQNOiJvyGcYIv", 207 | "contentRating": "9+", 208 | "rating": { 209 | "count": 132, 210 | "average": 4.56 211 | } 212 | }, 213 | { 214 | "gamerNumbers": [ 215 | 1, 216 | 2 217 | ], 218 | "genres": [ 219 | "Adventure", 220 | "Arcade/Pinball", 221 | "Dual Stick", 222 | "FPS/Shooter", 223 | "Fight!", 224 | "Kids List", 225 | "Multiplayer", 226 | "Racing", 227 | "Short on Time?" 228 | ], 229 | "url": "ouya://launcher/details?app=com.media.playcast.OUYA.BAA", 230 | "latestVersion": { 231 | "apk": { 232 | "md5sum": "39931a3179e6c984771f0f1f49b59e87" 233 | }, 234 | "versionNumber": "1.6.35707.8", 235 | "uuid": "abe8eeb3-4fd9-45bb-ba6b-50eb9d60478b" 236 | }, 237 | "inAppPurchases": true, 238 | "promotedProduct": null, 239 | "premium": false, 240 | "type": "app", 241 | "package": "com.media.playcast.OUYA.BAA", 242 | "updated_at": 1433234808, 243 | "updatedAt": "2015-06-02T08:46:48Z", 244 | "title": "GameFly Packful Of Fun", 245 | "image": "https://www.filepicker.io/api/file/05y2T8cKTY6cUfX7RYFR", 246 | "contentRating": "17+", 247 | "rating": { 248 | "count": 394, 249 | "average": 4.09 250 | } 251 | }, 252 | { 253 | "gamerNumbers": [ 254 | 1 255 | ], 256 | "genres": [ 257 | "Arcade/Pinball", 258 | "Kids List", 259 | "Platformer", 260 | "Racing" 261 | ], 262 | "url": "ouya://launcher/details?app=uk.co.hellogames.jdtouch", 263 | "latestVersion": { 264 | "apk": { 265 | "md5sum": "0b32a6ba390be2cdf72356843bf4a195" 266 | }, 267 | "versionNumber": "0.0.31", 268 | "uuid": "28355ffd-8586-41dd-802a-e14837d54717" 269 | }, 270 | "inAppPurchases": true, 271 | "promotedProduct": { 272 | "type": "entitlement", 273 | "developerName": "Hello Games Ltd", 274 | "identifier": "jd_touch", 275 | "name": "Joe Danger", 276 | "localPrice": 3.59, 277 | "originalPrice": 3.59, 278 | "percentOff": 0, 279 | "currency": "EUR", 280 | "description": "Wear the cape of the World’s Most Determined Stuntman, and take your trusty motorbike on a wild ride from zero to hero!" 281 | }, 282 | "premium": true, 283 | "type": "app", 284 | "package": "uk.co.hellogames.jdtouch", 285 | "updated_at": 1425985136, 286 | "updatedAt": "2015-03-10T10:58:56Z", 287 | "title": "Joe Danger", 288 | "image": "https://www.filepicker.io/api/file/WzgsPzYQFeROlL2HuNeg", 289 | "contentRating": "Everyone", 290 | "rating": { 291 | "count": 76, 292 | "average": 4.38 293 | } 294 | }, 295 | { 296 | "gamerNumbers": [ 297 | 1 298 | ], 299 | "genres": [ 300 | "Adventure", 301 | "Puzzle/Trivia" 302 | ], 303 | "url": "ouya://launcher/details?app=com.AmanitaDesign.Machinarium.OUYA", 304 | "latestVersion": { 305 | "apk": { 306 | "md5sum": "d6efc43c841636440ca9de2ab537c96e" 307 | }, 308 | "versionNumber": "2.6", 309 | "uuid": "cf2f8034-4511-4f50-8528-3ff60b711048" 310 | }, 311 | "inAppPurchases": false, 312 | "promotedProduct": { 313 | "type": "entitlement", 314 | "developerName": "Amanita Design s.r.o.", 315 | "identifier": "Machinarium_Unlock", 316 | "name": "Machinarium_Unlock", 317 | "localPrice": 4.49, 318 | "originalPrice": 4.49, 319 | "percentOff": 0, 320 | "currency": "EUR", 321 | "description": "test" 322 | }, 323 | "premium": true, 324 | "type": "app", 325 | "package": "com.AmanitaDesign.Machinarium.OUYA", 326 | "updated_at": 1432571539, 327 | "updatedAt": "2015-05-25T16:32:19Z", 328 | "title": "Machinarium", 329 | "image": "https://www.filepicker.io/api/file/tdHkw3pYT0axhP6JkHrK", 330 | "contentRating": "Everyone", 331 | "rating": { 332 | "count": 38, 333 | "average": 4.87 334 | } 335 | }, 336 | { 337 | "gamerNumbers": [ 338 | 1 339 | ], 340 | "genres": [ 341 | "Arcade/Pinball", 342 | "Puzzle/Trivia", 343 | "Retro" 344 | ], 345 | "url": "ouya://launcher/details?app=com.toa.tetrisFusionOuya", 346 | "latestVersion": { 347 | "apk": { 348 | "md5sum": "ad1f58f365859e5bc0db8c237b4c4514" 349 | }, 350 | "versionNumber": "2.0.1r", 351 | "uuid": "0fba3bba-83e0-4e3e-9f29-409258429757" 352 | }, 353 | "inAppPurchases": true, 354 | "promotedProduct": { 355 | "type": "entitlement", 356 | "developerName": "Tetris Online, Inc.", 357 | "identifier": "TBOE_Mode2P_1-50", 358 | "name": "2P VS Battle Mode", 359 | "localPrice": 4.49, 360 | "originalPrice": 4.49, 361 | "percentOff": 0, 362 | "currency": "EUR", 363 | "description": "Play head-to-head against another opponent. If you don't have a second controller connected, you can play against a CPU-controlled opponent." 364 | }, 365 | "premium": false, 366 | "type": "app", 367 | "package": "com.toa.tetrisFusionOuya", 368 | "updated_at": 1417574067, 369 | "updatedAt": "2014-12-03T02:34:27Z", 370 | "title": "Tetris Battle Fusion", 371 | "image": "https://www.filepicker.io/api/file/l08xBSjORUKUn7H8jSlp", 372 | "contentRating": "Everyone", 373 | "rating": { 374 | "count": 861, 375 | "average": 3.73 376 | } 377 | }, 378 | { 379 | "gamerNumbers": [ 380 | 1 381 | ], 382 | "genres": [ 383 | "Arcade/Pinball", 384 | "Platformer" 385 | ], 386 | "url": "ouya://launcher/details?app=com.AGameAWeek.SpikeDislike3", 387 | "latestVersion": { 388 | "apk": { 389 | "md5sum": "b966974271e1b2f1f31f44ada0e6f7b4" 390 | }, 391 | "versionNumber": "1.0", 392 | "uuid": "f5584c0a-b891-4d8d-925e-eb54f5834319" 393 | }, 394 | "inAppPurchases": false, 395 | "promotedProduct": null, 396 | "premium": false, 397 | "type": "app", 398 | "package": "com.AGameAWeek.SpikeDislike3", 399 | "updated_at": 1433161456, 400 | "updatedAt": "2015-06-01T12:24:16Z", 401 | "title": "SpikeDislike3", 402 | "image": "https://www.filepicker.io/api/file/sixoRxauRdGNySvdFQMi", 403 | "contentRating": "Everyone", 404 | "rating": { 405 | "count": 13, 406 | "average": 4.54 407 | } 408 | } 409 | ], 410 | "title": "home" 411 | } 412 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-events.request.urlencoded: -------------------------------------------------------------------------------- 1 | current_time=1434577856574&console_id=015d4b33bc64141b&events=%5B%7B%22data%22%3A%22num_connected_controllers%3D1+controller_names%3D%5C%22OUYA+Game+Controller%5C%22+controller_versions%3D%5C%22104%5C%22%22%2C%22timestamp%22%3A1434577827864%2C%22name%22%3A%22connected_controllers%22%2C%22uuid%22%3A%2247ebb367-ce5f-4249-88f1-312bfac9efa2%22%7D%2C%7B%22data%22%3A%22num_apps_sideloaded%3D0+sideloaded_packages%3Dnone%22%2C%22timestamp%22%3A1434577827849%2C%22name%22%3A%22sideloaded_apps%22%2C%22uuid%22%3A%227ab19279-0308-4a65-93d2-bc83f3bc518b%22%7D%2C%7B%22data%22%3A%22hardware_version%3D0+ouya_version%3D1.2.1427_r1+system_language%3Deng+age_gate%3Dnull+pin_code%3Dfalse+num_apps_ouya%3D0+num_apps_sideloaded%3D0+num_buried_packages%3D0+hd_space_used%3D0+hd_space_free%3D0+mem_free%3D436621312+mem_total%3D1018093568+tv_resolution%3D1920x1080+network_device%3Dethernet+adb_enabled%3Dtrue%22%2C%22timestamp%22%3A1434577827834%2C%22name%22%3A%22console_snapshot%22%2C%22uuid%22%3A%22308b7829-a357-4d0d-a79b-2456c40dc678%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.console.launcher.agreements.AgreementsActivity+app_session_start_tick%3D37+app_session_current_tick%3D605+app_session_active_ticks%3D568+app_session_last_analog_tick%3D597+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577800458%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22161d3457-4469-42e3-bbc5-4c8e4a45743f%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.console.launcher.agreements.AgreementsActivity+app_session_start_tick%3D37+app_session_current_tick%3D605+app_session_active_ticks%3D568+app_session_last_analog_tick%3D597+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577800331%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22ce209f8e-c564-4264-afdd-9e139b4d99fd%22%7D%2C%7B%22data%22%3A%22url%3Dhttps%3A%5C%2F%5C%2Fdevs.ouya.tv%5C%2Fagreements%5C%2Fmarketplace.html+loadTime%3D1.826+viewTime%3D4.908%22%2C%22timestamp%22%3A1434577800196%2C%22name%22%3A%22AgreementsDialog%22%2C%22uuid%22%3A%227d6d231e-9d6e-45f1-9c4e-3be7360e4f9a%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.console.launcher.agreements.AgreementsActivity+app_session_start_tick%3D37+app_session_current_tick%3D598+app_session_active_ticks%3D561+app_session_last_analog_tick%3D597+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577793490%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22c8054c0c-ba8e-4024-afdd-31c123745e5e%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.CreateUserPromptActivity+app_session_start_tick%3D37+app_session_current_tick%3D585+app_session_active_ticks%3D548+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577781047%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%220f9bcf75-5cfd-4c30-97f4-a6190f0fb861%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.UpdateActivity+app_session_start_tick%3D37+app_session_current_tick%3D585+app_session_active_ticks%3D548+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577781039%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22a7b4bffd-55a6-4aa8-ad05-c2c36acc046c%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.UpdateActivity+app_session_start_tick%3D37+app_session_current_tick%3D585+app_session_active_ticks%3D548+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577780686%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%220ee66da1-fbe4-4b09-a036-429c365be980%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.UpdateActivity+app_session_start_tick%3D37+app_session_current_tick%3D585+app_session_active_ticks%3D548+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577780608%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%2218780fea-89d3-4b34-9c60-b03eb2522b3f%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.UpdateActivity+app_session_start_tick%3D37+app_session_current_tick%3D581+app_session_active_ticks%3D544+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577776955%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22fb6b0006-901b-4e78-925d-4d471bfe8d73%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.NetworkSetupActivity+app_session_start_tick%3D37+app_session_current_tick%3D581+app_session_active_ticks%3D544+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577776942%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%2282d25266-58bd-492b-b582-31c26b505ac2%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.NetworkSetupActivity+app_session_start_tick%3D37+app_session_current_tick%3D581+app_session_active_ticks%3D544+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577776609%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22ccda1f7d-8c57-4ad1-ab46-7402927c40f7%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.NetworkSetupActivity+app_session_start_tick%3D37+app_session_current_tick%3D581+app_session_active_ticks%3D544+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577776449%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%223d984c56-c2a5-4182-9794-185ef968b95d%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.NetworkSetupActivity+app_session_start_tick%3D37+app_session_current_tick%3D577+app_session_active_ticks%3D540+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577772739%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%2288e40ac3-dc0d-4a1d-be77-f7855854877c%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.LocaleActivity+app_session_start_tick%3D37+app_session_current_tick%3D577+app_session_active_ticks%3D540+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577772731%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%227cb1fea0-5415-444c-ab0f-df36b4d4fa90%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.LocaleActivity+app_session_start_tick%3D37+app_session_current_tick%3D577+app_session_active_ticks%3D540+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577772221%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%2238cd9bcd-2277-419f-875c-6d195f148c02%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.LocaleActivity+app_session_start_tick%3D37+app_session_current_tick%3D576+app_session_active_ticks%3D539+app_session_last_analog_tick%3D576+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577772087%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%224525614b-d158-4678-b559-53cabe75af1e%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.LocaleActivity+app_session_start_tick%3D37+app_session_current_tick%3D77+app_session_active_ticks%3D40+app_session_last_analog_tick%3D71+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577272237%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%221f1fb7c4-d5fb-4c63-b344-e33afe1a4316%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.PairControllersActivity+app_session_start_tick%3D37+app_session_current_tick%3D77+app_session_active_ticks%3D40+app_session_last_analog_tick%3D71+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577272229%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%221acaf070-969a-4638-8c3b-6f6203643f2c%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.PairControllersActivity+app_session_start_tick%3D37+app_session_current_tick%3D76+app_session_active_ticks%3D39+app_session_last_analog_tick%3D71+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577271825%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%221316a488-2bcb-4294-9bac-584ae6bd5a12%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.PairControllersActivity+app_session_start_tick%3D37+app_session_current_tick%3D76+app_session_active_ticks%3D39+app_session_last_analog_tick%3D71+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577271771%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22d66cb353-f249-42e2-82ad-e7c275cbebcf%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.PairControllersActivity+app_session_start_tick%3D37+app_session_current_tick%3D47+app_session_active_ticks%3D10+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577242937%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22aa11379d-3345-4616-a902-be160340040c%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da0e88f3f-e661-49d5-a59c-8b3c011a81c0+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.console+app_session_current_activity%3Dtv.ouya.console.launcher.startup.PlayVideoActivity+app_session_start_tick%3D32+app_session_current_tick%3D47+app_session_active_ticks%3D6+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577242929%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%223170b01a-362c-4311-bf88-b7249b5bf43b%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.PairControllersActivity+app_session_start_tick%3D37+app_session_current_tick%3D47+app_session_active_ticks%3D10+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577242924%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22c88625ea-09ba-435f-8a24-435ed7c2f484%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da0e88f3f-e661-49d5-a59c-8b3c011a81c0+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.console+app_session_current_activity%3Dtv.ouya.console.launcher.startup.PlayVideoActivity+app_session_start_tick%3D32+app_session_current_tick%3D38+app_session_active_ticks%3D6+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577233483%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%2247f21fae-8ca2-405c-964d-9f747c8ff5d1%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.PairControllersActivity+app_session_start_tick%3D37+app_session_current_tick%3D38+app_session_active_ticks%3D1+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577233480%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22bd519f90-aa42-461c-bf49-69ac6a78bb2b%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da0e88f3f-e661-49d5-a59c-8b3c011a81c0+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.console+app_session_current_activity%3Dtv.ouya.console.launcher.startup.PlayVideoActivity+app_session_start_tick%3D32+app_session_current_tick%3D37+app_session_active_ticks%3D5+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577233029%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%2247d09f5b-0fd1-46ea-a15c-439196446191%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da963561b-a6e8-49f5-bcfa-218bc5a1d6c8+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.oobe+app_session_current_activity%3Dtv.ouya.oobe.OOBEController+app_session_start_tick%3D37+app_session_current_tick%3D37+app_session_active_ticks%3D0+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577233026%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%229b09e3f9-1d16-459c-8f1b-8aad8d688e22%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da0e88f3f-e661-49d5-a59c-8b3c011a81c0+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.console+app_session_current_activity%3Dtv.ouya.console.launcher.startup.PlayVideoActivity+app_session_start_tick%3D32+app_session_current_tick%3D33+app_session_active_ticks%3D1+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577228909%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22bb2bfb8f-8d9a-4164-a59e-141116a9ddf7%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da0e88f3f-e661-49d5-a59c-8b3c011a81c0+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.console+app_session_current_activity%3Dtv.ouya.console.launcher.startup.PlayVideoActivity+app_session_start_tick%3D32+app_session_current_tick%3D32+app_session_active_ticks%3D0+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577227905%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%220dd6ac90-7153-4b9d-a7c5-b7aac836b799%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Da0e88f3f-e661-49d5-a59c-8b3c011a81c0+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.console+app_session_current_activity%3Dtv.ouya.console.launcher.startup.PlayVideoActivity+app_session_start_tick%3D32+app_session_current_tick%3D32+app_session_active_ticks%3D0+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577227898%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22148093b2-7ad0-426f-950f-2d1574c0ebf4%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3D817b5728-efa4-4029-821d-6d6a2962ebf5+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.console+app_session_current_activity%3Dtv.ouya.console.launcher.startup.PlayVideoActivity+app_session_start_tick%3D32+app_session_current_tick%3D32+app_session_active_ticks%3D0+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577227684%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%22cab548f8-d2ca-4974-b567-45f1b9ffff73%22%7D%2C%7B%22data%22%3A%22app_session_uuid%3Dc1c59721-7889-4d8a-83f3-a732f1bb3a03+app_session_ouya_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+app_session_package%3Dtv.ouya.console+app_session_current_activity%3Dtv.ouya.console.launcher.guide.GuideActivity+app_session_start_tick%3D32+app_session_current_tick%3D32+app_session_active_ticks%3D0+app_session_last_analog_tick%3D32+app_session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577227684%2C%22name%22%3A%22app_session_update%22%2C%22uuid%22%3A%225d3042bf-90c3-4e4f-a30a-723bc1753d78%22%7D%2C%7B%22data%22%3A%22session_uuid%3De0eef5de-624c-42f8-9b1b-a0968a27eb03+session_start_tick%3D32+session_current_tick%3D32+session_last_analog_tick%3D32+session_last_digital_tick%3D32%22%2C%22timestamp%22%3A1434577227681%2C%22name%22%3A%22ouya_session_update%22%2C%22uuid%22%3A%22ee792b57-8cff-4868-bf01-4417613bc96b%22%7D%5D&auth_token=96bfeaae-212d-447b-b4bf-caa5e86c0502 -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-events.request.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "data": "num_connected_controllers=1 controller_names=\"OUYA Game Controller\" controller_versions=\"104\"", 4 | "timestamp": 1434577827864, 5 | "name": "connected_controllers", 6 | "uuid": "47ebb367-ce5f-4249-88f1-312bfac9efa2" 7 | }, 8 | { 9 | "data": "num_apps_sideloaded=0 sideloaded_packages=none", 10 | "timestamp": 1434577827849, 11 | "name": "sideloaded_apps", 12 | "uuid": "7ab19279-0308-4a65-93d2-bc83f3bc518b" 13 | }, 14 | { 15 | "data": "hardware_version=0 ouya_version=1.2.1427_r1 system_language=eng age_gate=null pin_code=false num_apps_ouya=0 num_apps_sideloaded=0 num_buried_packages=0 hd_space_used=0 hd_space_free=0 mem_free=436621312 mem_total=1018093568 tv_resolution=1920x1080 network_device=ethernet adb_enabled=true", 16 | "timestamp": 1434577827834, 17 | "name": "console_snapshot", 18 | "uuid": "308b7829-a357-4d0d-a79b-2456c40dc678" 19 | }, 20 | { 21 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.console.launcher.agreements.AgreementsActivity app_session_start_tick=37 app_session_current_tick=605 app_session_active_ticks=568 app_session_last_analog_tick=597 app_session_last_digital_tick=32", 22 | "timestamp": 1434577800458, 23 | "name": "app_session_update", 24 | "uuid": "161d3457-4469-42e3-bbc5-4c8e4a45743f" 25 | }, 26 | { 27 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.console.launcher.agreements.AgreementsActivity app_session_start_tick=37 app_session_current_tick=605 app_session_active_ticks=568 app_session_last_analog_tick=597 app_session_last_digital_tick=32", 28 | "timestamp": 1434577800331, 29 | "name": "app_session_update", 30 | "uuid": "ce209f8e-c564-4264-afdd-9e139b4d99fd" 31 | }, 32 | { 33 | "data": "url=https:\/\/devs.ouya.tv\/agreements\/marketplace.html loadTime=1.826 viewTime=4.908", 34 | "timestamp": 1434577800196, 35 | "name": "AgreementsDialog", 36 | "uuid": "7d6d231e-9d6e-45f1-9c4e-3be7360e4f9a" 37 | }, 38 | { 39 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.console.launcher.agreements.AgreementsActivity app_session_start_tick=37 app_session_current_tick=598 app_session_active_ticks=561 app_session_last_analog_tick=597 app_session_last_digital_tick=32", 40 | "timestamp": 1434577793490, 41 | "name": "app_session_update", 42 | "uuid": "c8054c0c-ba8e-4024-afdd-31c123745e5e" 43 | }, 44 | { 45 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.CreateUserPromptActivity app_session_start_tick=37 app_session_current_tick=585 app_session_active_ticks=548 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 46 | "timestamp": 1434577781047, 47 | "name": "app_session_update", 48 | "uuid": "0f9bcf75-5cfd-4c30-97f4-a6190f0fb861" 49 | }, 50 | { 51 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.UpdateActivity app_session_start_tick=37 app_session_current_tick=585 app_session_active_ticks=548 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 52 | "timestamp": 1434577781039, 53 | "name": "app_session_update", 54 | "uuid": "a7b4bffd-55a6-4aa8-ad05-c2c36acc046c" 55 | }, 56 | { 57 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.UpdateActivity app_session_start_tick=37 app_session_current_tick=585 app_session_active_ticks=548 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 58 | "timestamp": 1434577780686, 59 | "name": "app_session_update", 60 | "uuid": "0ee66da1-fbe4-4b09-a036-429c365be980" 61 | }, 62 | { 63 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.UpdateActivity app_session_start_tick=37 app_session_current_tick=585 app_session_active_ticks=548 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 64 | "timestamp": 1434577780608, 65 | "name": "app_session_update", 66 | "uuid": "18780fea-89d3-4b34-9c60-b03eb2522b3f" 67 | }, 68 | { 69 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.UpdateActivity app_session_start_tick=37 app_session_current_tick=581 app_session_active_ticks=544 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 70 | "timestamp": 1434577776955, 71 | "name": "app_session_update", 72 | "uuid": "fb6b0006-901b-4e78-925d-4d471bfe8d73" 73 | }, 74 | { 75 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.NetworkSetupActivity app_session_start_tick=37 app_session_current_tick=581 app_session_active_ticks=544 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 76 | "timestamp": 1434577776942, 77 | "name": "app_session_update", 78 | "uuid": "82d25266-58bd-492b-b582-31c26b505ac2" 79 | }, 80 | { 81 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.NetworkSetupActivity app_session_start_tick=37 app_session_current_tick=581 app_session_active_ticks=544 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 82 | "timestamp": 1434577776609, 83 | "name": "app_session_update", 84 | "uuid": "ccda1f7d-8c57-4ad1-ab46-7402927c40f7" 85 | }, 86 | { 87 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.NetworkSetupActivity app_session_start_tick=37 app_session_current_tick=581 app_session_active_ticks=544 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 88 | "timestamp": 1434577776449, 89 | "name": "app_session_update", 90 | "uuid": "3d984c56-c2a5-4182-9794-185ef968b95d" 91 | }, 92 | { 93 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.NetworkSetupActivity app_session_start_tick=37 app_session_current_tick=577 app_session_active_ticks=540 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 94 | "timestamp": 1434577772739, 95 | "name": "app_session_update", 96 | "uuid": "88e40ac3-dc0d-4a1d-be77-f7855854877c" 97 | }, 98 | { 99 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.LocaleActivity app_session_start_tick=37 app_session_current_tick=577 app_session_active_ticks=540 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 100 | "timestamp": 1434577772731, 101 | "name": "app_session_update", 102 | "uuid": "7cb1fea0-5415-444c-ab0f-df36b4d4fa90" 103 | }, 104 | { 105 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.LocaleActivity app_session_start_tick=37 app_session_current_tick=577 app_session_active_ticks=540 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 106 | "timestamp": 1434577772221, 107 | "name": "app_session_update", 108 | "uuid": "38cd9bcd-2277-419f-875c-6d195f148c02" 109 | }, 110 | { 111 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.LocaleActivity app_session_start_tick=37 app_session_current_tick=576 app_session_active_ticks=539 app_session_last_analog_tick=576 app_session_last_digital_tick=32", 112 | "timestamp": 1434577772087, 113 | "name": "app_session_update", 114 | "uuid": "4525614b-d158-4678-b559-53cabe75af1e" 115 | }, 116 | { 117 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.LocaleActivity app_session_start_tick=37 app_session_current_tick=77 app_session_active_ticks=40 app_session_last_analog_tick=71 app_session_last_digital_tick=32", 118 | "timestamp": 1434577272237, 119 | "name": "app_session_update", 120 | "uuid": "1f1fb7c4-d5fb-4c63-b344-e33afe1a4316" 121 | }, 122 | { 123 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.PairControllersActivity app_session_start_tick=37 app_session_current_tick=77 app_session_active_ticks=40 app_session_last_analog_tick=71 app_session_last_digital_tick=32", 124 | "timestamp": 1434577272229, 125 | "name": "app_session_update", 126 | "uuid": "1acaf070-969a-4638-8c3b-6f6203643f2c" 127 | }, 128 | { 129 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.PairControllersActivity app_session_start_tick=37 app_session_current_tick=76 app_session_active_ticks=39 app_session_last_analog_tick=71 app_session_last_digital_tick=32", 130 | "timestamp": 1434577271825, 131 | "name": "app_session_update", 132 | "uuid": "1316a488-2bcb-4294-9bac-584ae6bd5a12" 133 | }, 134 | { 135 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.PairControllersActivity app_session_start_tick=37 app_session_current_tick=76 app_session_active_ticks=39 app_session_last_analog_tick=71 app_session_last_digital_tick=32", 136 | "timestamp": 1434577271771, 137 | "name": "app_session_update", 138 | "uuid": "d66cb353-f249-42e2-82ad-e7c275cbebcf" 139 | }, 140 | { 141 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.PairControllersActivity app_session_start_tick=37 app_session_current_tick=47 app_session_active_ticks=10 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 142 | "timestamp": 1434577242937, 143 | "name": "app_session_update", 144 | "uuid": "aa11379d-3345-4616-a902-be160340040c" 145 | }, 146 | { 147 | "data": "app_session_uuid=a0e88f3f-e661-49d5-a59c-8b3c011a81c0 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.console app_session_current_activity=tv.ouya.console.launcher.startup.PlayVideoActivity app_session_start_tick=32 app_session_current_tick=47 app_session_active_ticks=6 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 148 | "timestamp": 1434577242929, 149 | "name": "app_session_update", 150 | "uuid": "3170b01a-362c-4311-bf88-b7249b5bf43b" 151 | }, 152 | { 153 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.PairControllersActivity app_session_start_tick=37 app_session_current_tick=47 app_session_active_ticks=10 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 154 | "timestamp": 1434577242924, 155 | "name": "app_session_update", 156 | "uuid": "c88625ea-09ba-435f-8a24-435ed7c2f484" 157 | }, 158 | { 159 | "data": "app_session_uuid=a0e88f3f-e661-49d5-a59c-8b3c011a81c0 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.console app_session_current_activity=tv.ouya.console.launcher.startup.PlayVideoActivity app_session_start_tick=32 app_session_current_tick=38 app_session_active_ticks=6 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 160 | "timestamp": 1434577233483, 161 | "name": "app_session_update", 162 | "uuid": "47f21fae-8ca2-405c-964d-9f747c8ff5d1" 163 | }, 164 | { 165 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.PairControllersActivity app_session_start_tick=37 app_session_current_tick=38 app_session_active_ticks=1 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 166 | "timestamp": 1434577233480, 167 | "name": "app_session_update", 168 | "uuid": "bd519f90-aa42-461c-bf49-69ac6a78bb2b" 169 | }, 170 | { 171 | "data": "app_session_uuid=a0e88f3f-e661-49d5-a59c-8b3c011a81c0 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.console app_session_current_activity=tv.ouya.console.launcher.startup.PlayVideoActivity app_session_start_tick=32 app_session_current_tick=37 app_session_active_ticks=5 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 172 | "timestamp": 1434577233029, 173 | "name": "app_session_update", 174 | "uuid": "47d09f5b-0fd1-46ea-a15c-439196446191" 175 | }, 176 | { 177 | "data": "app_session_uuid=a963561b-a6e8-49f5-bcfa-218bc5a1d6c8 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.oobe app_session_current_activity=tv.ouya.oobe.OOBEController app_session_start_tick=37 app_session_current_tick=37 app_session_active_ticks=0 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 178 | "timestamp": 1434577233026, 179 | "name": "app_session_update", 180 | "uuid": "9b09e3f9-1d16-459c-8f1b-8aad8d688e22" 181 | }, 182 | { 183 | "data": "app_session_uuid=a0e88f3f-e661-49d5-a59c-8b3c011a81c0 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.console app_session_current_activity=tv.ouya.console.launcher.startup.PlayVideoActivity app_session_start_tick=32 app_session_current_tick=33 app_session_active_ticks=1 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 184 | "timestamp": 1434577228909, 185 | "name": "app_session_update", 186 | "uuid": "bb2bfb8f-8d9a-4164-a59e-141116a9ddf7" 187 | }, 188 | { 189 | "data": "app_session_uuid=a0e88f3f-e661-49d5-a59c-8b3c011a81c0 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.console app_session_current_activity=tv.ouya.console.launcher.startup.PlayVideoActivity app_session_start_tick=32 app_session_current_tick=32 app_session_active_ticks=0 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 190 | "timestamp": 1434577227905, 191 | "name": "app_session_update", 192 | "uuid": "0dd6ac90-7153-4b9d-a7c5-b7aac836b799" 193 | }, 194 | { 195 | "data": "app_session_uuid=a0e88f3f-e661-49d5-a59c-8b3c011a81c0 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.console app_session_current_activity=tv.ouya.console.launcher.startup.PlayVideoActivity app_session_start_tick=32 app_session_current_tick=32 app_session_active_ticks=0 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 196 | "timestamp": 1434577227898, 197 | "name": "app_session_update", 198 | "uuid": "148093b2-7ad0-426f-950f-2d1574c0ebf4" 199 | }, 200 | { 201 | "data": "app_session_uuid=817b5728-efa4-4029-821d-6d6a2962ebf5 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.console app_session_current_activity=tv.ouya.console.launcher.startup.PlayVideoActivity app_session_start_tick=32 app_session_current_tick=32 app_session_active_ticks=0 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 202 | "timestamp": 1434577227684, 203 | "name": "app_session_update", 204 | "uuid": "cab548f8-d2ca-4974-b567-45f1b9ffff73" 205 | }, 206 | { 207 | "data": "app_session_uuid=c1c59721-7889-4d8a-83f3-a732f1bb3a03 app_session_ouya_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 app_session_package=tv.ouya.console app_session_current_activity=tv.ouya.console.launcher.guide.GuideActivity app_session_start_tick=32 app_session_current_tick=32 app_session_active_ticks=0 app_session_last_analog_tick=32 app_session_last_digital_tick=32", 208 | "timestamp": 1434577227684, 209 | "name": "app_session_update", 210 | "uuid": "5d3042bf-90c3-4e4f-a30a-723bc1753d78" 211 | }, 212 | { 213 | "data": "session_uuid=e0eef5de-624c-42f8-9b1b-a0968a27eb03 session_start_tick=32 session_current_tick=32 session_last_analog_tick=32 session_last_digital_tick=32", 214 | "timestamp": 1434577227681, 215 | "name": "ouya_session_update", 216 | "uuid": "ee792b57-8cff-4868-bf01-4417613bc96b" 217 | } 218 | ] 219 | -------------------------------------------------------------------------------- /api/devs.ouya.tv/api-v1-details.response-bundle-full.json: -------------------------------------------------------------------------------- 1 | { 2 | "bundle": { 3 | "apps": [ 4 | { 5 | "gamerNumbers": [ 6 | 1 7 | ], 8 | "genres": [ 9 | "Adventure", 10 | "Kids List", 11 | "Puzzle/Trivia" 12 | ], 13 | "url": "ouya://launcher/details?app=com.GoldenTricycle.Clark", 14 | "latestVersion": { 15 | "apk": { 16 | "md5sum": "a674b6c205502d9b4a907ade90307ba0" 17 | }, 18 | "versionNumber": "1.24", 19 | "uuid": "7230ac05-d24c-4347-a990-7ac283c17063" 20 | }, 21 | "inAppPurchases": true, 22 | "promotedProduct": { 23 | "type": "entitlement", 24 | "developerName": "GoldenTricycle / Hahn Film AG", 25 | "identifier": "clark_full_license_test", 26 | "name": "Clarc Full Version", 27 | "localPrice": 3.99, 28 | "originalPrice": 3.99, 29 | "percentOff": 0, 30 | "currency": "USD", 31 | "description": "This item unlocks the full game with 25 levels, more than 100 puzzles and more than 10 hours of gameplay." 32 | }, 33 | "premium": false, 34 | "type": "app", 35 | "package": "com.GoldenTricycle.Clark", 36 | "updated_at": 1384854785, 37 | "updatedAt": "2013-11-19T09:53:05Z", 38 | "title": "CLARC", 39 | "image": "https://www.filepicker.io/api/file/VzCsgc3BTx2RiGpTr4Uw", 40 | "contentRating": "Everyone", 41 | "rating": { 42 | "count": 716, 43 | "average": 4.25 44 | } 45 | }, 46 | { 47 | "gamerNumbers": [ 48 | 1 49 | ], 50 | "genres": [ 51 | "Adventure", 52 | "Kids List", 53 | "Platformer", 54 | "Puzzle/Trivia", 55 | "Short on Time?" 56 | ], 57 | "url": "ouya://launcher/details?app=com.Tripleslash.MagneticByNature", 58 | "latestVersion": { 59 | "apk": { 60 | "md5sum": "292ab563a8433605cdf23451f11b08eb" 61 | }, 62 | "versionNumber": "1.1", 63 | "uuid": "3cf737cb-8056-4749-be66-e0c6a6fd2d47" 64 | }, 65 | "inAppPurchases": true, 66 | "promotedProduct": { 67 | "type": "entitlement", 68 | "developerName": "Team Tripleslash", 69 | "identifier": "MBN", 70 | "name": "Magnetic By Nature", 71 | "localPrice": 9.99, 72 | "originalPrice": 9.99, 73 | "percentOff": 0, 74 | "currency": "USD", 75 | "description": "" 76 | }, 77 | "premium": false, 78 | "type": "app", 79 | "package": "com.Tripleslash.MagneticByNature", 80 | "updated_at": 1413442225, 81 | "updatedAt": "2014-10-16T06:50:25Z", 82 | "title": "Magnetic By Nature", 83 | "image": "https://www.filepicker.io/api/file/ZdNdXMJ9SGKWt606otxg", 84 | "contentRating": "9+", 85 | "rating": { 86 | "count": 101, 87 | "average": 4.09 88 | } 89 | }, 90 | { 91 | "gamerNumbers": [ 92 | 1 93 | ], 94 | "genres": [ 95 | "Arcade/Pinball", 96 | "Platformer", 97 | "Puzzle/Trivia" 98 | ], 99 | "url": "ouya://launcher/details?app=com.scaryrobot.badbadbots", 100 | "latestVersion": { 101 | "apk": { 102 | "md5sum": "dfeb384a80a2cb4edb81124549378876" 103 | }, 104 | "versionNumber": "1.0.1", 105 | "uuid": "6baabf0d-ab12-45bf-ba84-d939fd449553" 106 | }, 107 | "inAppPurchases": true, 108 | "promotedProduct": { 109 | "type": "entitlement", 110 | "developerName": "Scary Robot Productions", 111 | "identifier": "stb_full_game", 112 | "name": "Unlock the Full Game", 113 | "localPrice": 1.99, 114 | "originalPrice": 1.99, 115 | "percentOff": 0, 116 | "currency": "USD", 117 | "description": "Unlock the full game, including 75 new levels." 118 | }, 119 | "premium": false, 120 | "type": "app", 121 | "package": "com.scaryrobot.badbadbots", 122 | "updated_at": 1393472817, 123 | "updatedAt": "2014-02-27T03:46:57Z", 124 | "title": "Stop The Bots", 125 | "image": "https://www.filepicker.io/api/file/8oZUmfyQ226UHr3DE5Pw", 126 | "contentRating": "Everyone", 127 | "rating": { 128 | "count": 248, 129 | "average": 3.79 130 | } 131 | }, 132 | { 133 | "gamerNumbers": [ 134 | 1 135 | ], 136 | "genres": [ 137 | "Multiplayer", 138 | "Platformer", 139 | "Short on Time?" 140 | ], 141 | "url": "ouya://launcher/details?app=com.Thinice.TwinRobots", 142 | "latestVersion": { 143 | "apk": { 144 | "md5sum": "8f7b2014d649297df255ef6ddf0380b5" 145 | }, 146 | "versionNumber": "1.83", 147 | "uuid": "d6192b56-9ca9-4f06-901c-e6b585b76091" 148 | }, 149 | "inAppPurchases": true, 150 | "promotedProduct": { 151 | "type": "entitlement", 152 | "developerName": "Thinice", 153 | "identifier": "TwinRobots_Unlock", 154 | "name": "Twin Robots - Unlock all levels", 155 | "localPrice": 4.99, 156 | "originalPrice": 4.99, 157 | "percentOff": 0, 158 | "currency": "USD", 159 | "description": "" 160 | }, 161 | "premium": false, 162 | "type": "app", 163 | "package": "com.Thinice.TwinRobots", 164 | "updated_at": 1410191849, 165 | "updatedAt": "2014-09-08T15:57:29Z", 166 | "title": "Twin Robots", 167 | "image": "https://www.filepicker.io/api/file/yHSrQGsSTSGBodBUnvss", 168 | "contentRating": "9+", 169 | "rating": { 170 | "count": 196, 171 | "average": 3.58 172 | } 173 | } 174 | ], 175 | "currency": "EUR", 176 | "price": 6.99, 177 | "contentRating": "9+", 178 | "purchased": false, 179 | "games": [ 180 | "com.GoldenTricycle.Clark", 181 | "com.Tripleslash.MagneticByNature", 182 | "com.Thinice.TwinRobots", 183 | "com.scaryrobot.badbadbots" 184 | ], 185 | "purchaseUrl": "ouya://launcher/purchase?developer=ec1a9ccd-373f-4047-bd07-36466ab7e25d&product=ROBOBUNDLE" 186 | }, 187 | "buttons": [], 188 | "apps": [], 189 | "muted": true, 190 | "metaData": [ 191 | "Golden Tricycle", 192 | "Team Tripleslash", 193 | "Scary Robot", 194 | "Thinice" 195 | ], 196 | "mediaTiles": [ 197 | { 198 | "url": "https://vimeo.com/84689664", 199 | "type": "video" 200 | }, 201 | { 202 | "url": "http://vimeo.com/112085754", 203 | "type": "video" 204 | }, 205 | { 206 | "url": "https://vimeo.com/87213061", 207 | "type": "video" 208 | }, 209 | { 210 | "url": "https://vimeo.com/82265024", 211 | "type": "video" 212 | }, 213 | { 214 | "urls": { 215 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150202-3-6hikjv.jpeg", 216 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/oivu9a_RackMultipart20150202-15-1sg3fmt" 217 | }, 218 | "type": "image" 219 | }, 220 | { 221 | "urls": { 222 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-9dup5r.jpeg", 223 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/it2iwu_RackMultipart20150203-15-1rsk4n7" 224 | }, 225 | "type": "image" 226 | }, 227 | { 228 | "urls": { 229 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1lsw4o3.jpeg", 230 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/r2829b_RackMultipart20150203-15-1mz6yga" 231 | }, 232 | "type": "image" 233 | }, 234 | { 235 | "urls": { 236 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-v8f93p.jpeg", 237 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/4smu51_RackMultipart20150203-15-60bm65" 238 | }, 239 | "type": "image" 240 | }, 241 | { 242 | "urls": { 243 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1rrfr00.jpeg", 244 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/xx5n68_RackMultipart20150203-15-8tyd1h" 245 | }, 246 | "type": "image" 247 | }, 248 | { 249 | "urls": { 250 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-o5quh2.jpeg", 251 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/n2w6zx_RackMultipart20150203-15-khs6c1" 252 | }, 253 | "type": "image" 254 | }, 255 | { 256 | "urls": { 257 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-gmo8ch.jpeg", 258 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/lzgp7x_RackMultipart20150203-15-qxzbvu" 259 | }, 260 | "type": "image" 261 | }, 262 | { 263 | "urls": { 264 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-j5xj97.jpeg", 265 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/d1yia6_RackMultipart20150203-15-1ckakhz" 266 | }, 267 | "type": "image" 268 | }, 269 | { 270 | "urls": { 271 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1xj6qi6.jpeg", 272 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/2mmztz_RackMultipart20150203-15-12hxjwy" 273 | }, 274 | "type": "image" 275 | }, 276 | { 277 | "urls": { 278 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-xfmb0v.jpeg", 279 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/ml0cbi_RackMultipart20150203-15-iyo0ya" 280 | }, 281 | "type": "image" 282 | }, 283 | { 284 | "urls": { 285 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1jn5r7e.jpeg", 286 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/h9gr8e_RackMultipart20150203-15-1pux7n7" 287 | }, 288 | "type": "image" 289 | }, 290 | { 291 | "urls": { 292 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-a0ofa.jpeg", 293 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/a7ymrn_RackMultipart20150203-15-1f6hwe7" 294 | }, 295 | "type": "image" 296 | }, 297 | { 298 | "urls": { 299 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1tdqlsg.jpeg", 300 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/b7tad7_RackMultipart20150203-15-1suh5wt" 301 | }, 302 | "type": "image" 303 | }, 304 | { 305 | "urls": { 306 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1s4ovl8.jpeg", 307 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/s3siag_RackMultipart20150203-15-ozm6k9" 308 | }, 309 | "type": "image" 310 | }, 311 | { 312 | "urls": { 313 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-ynvowx.jpeg", 314 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/5edm7z_RackMultipart20150203-15-5vh22f" 315 | }, 316 | "type": "image" 317 | }, 318 | { 319 | "urls": { 320 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1oeosg8.jpeg", 321 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/teee71_RackMultipart20150203-15-1vls2my" 322 | }, 323 | "type": "image" 324 | }, 325 | { 326 | "urls": { 327 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1rp8ioe.jpeg", 328 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/ofp916_RackMultipart20150203-15-1nvqswn" 329 | }, 330 | "type": "image" 331 | }, 332 | { 333 | "urls": { 334 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-nuuwya.jpeg", 335 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/3w19rt_RackMultipart20150203-15-uko82z" 336 | }, 337 | "type": "image" 338 | }, 339 | { 340 | "urls": { 341 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1ffdniz.jpeg", 342 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/ybe0uw_RackMultipart20150203-15-s9qlam" 343 | }, 344 | "type": "image" 345 | }, 346 | { 347 | "urls": { 348 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-7xljq4.jpeg", 349 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/c7yl4p_RackMultipart20150203-15-mq9mod" 350 | }, 351 | "type": "image" 352 | }, 353 | { 354 | "urls": { 355 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-6mnqij.jpeg", 356 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/pakgt_RackMultipart20150203-15-6bwsmp" 357 | }, 358 | "type": "image" 359 | }, 360 | { 361 | "urls": { 362 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1krrt1f.jpeg", 363 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/tnojnx_RackMultipart20150203-15-17kcxzw" 364 | }, 365 | "type": "image" 366 | }, 367 | { 368 | "urls": { 369 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-gmqqox.jpeg", 370 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/lweo58_RackMultipart20150203-15-1cwiytp" 371 | }, 372 | "type": "image" 373 | }, 374 | { 375 | "urls": { 376 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-lvop3m.jpeg", 377 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/1vo70l_RackMultipart20150203-15-v164w7" 378 | }, 379 | "type": "image" 380 | }, 381 | { 382 | "urls": { 383 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1l8hwmj.jpeg", 384 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/iyp1um_RackMultipart20150203-15-aq3pvk" 385 | }, 386 | "type": "image" 387 | }, 388 | { 389 | "urls": { 390 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1talrh8.jpeg", 391 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/2mg5u_RackMultipart20150203-15-fygoqx" 392 | }, 393 | "type": "image" 394 | }, 395 | { 396 | "urls": { 397 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1ki5wfc.jpeg", 398 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/2qos5v_RackMultipart20150203-15-1u70f29" 399 | }, 400 | "type": "image" 401 | }, 402 | { 403 | "urls": { 404 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1hm6ppk.jpeg", 405 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/9fe0c1_RackMultipart20150203-15-186dcnu" 406 | }, 407 | "type": "image" 408 | }, 409 | { 410 | "urls": { 411 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-etc8xe.jpeg", 412 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/tfsn92_RackMultipart20150203-15-112zb8a" 413 | }, 414 | "type": "image" 415 | }, 416 | { 417 | "urls": { 418 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-c0ygib.jpeg", 419 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/5amjzu_RackMultipart20150203-15-8s2tg2" 420 | }, 421 | "type": "image" 422 | }, 423 | { 424 | "urls": { 425 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1ob8z47.jpeg", 426 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/cqadpo_RackMultipart20150203-15-wngkd6" 427 | }, 428 | "type": "image" 429 | }, 430 | { 431 | "urls": { 432 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-kyy1h2.jpeg", 433 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/td2kt9_RackMultipart20150203-15-1avgqyl" 434 | }, 435 | "type": "image" 436 | }, 437 | { 438 | "urls": { 439 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-16ybd5l.jpeg", 440 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/eavtya_RackMultipart20150203-15-1kmbygh" 441 | }, 442 | "type": "image" 443 | }, 444 | { 445 | "urls": { 446 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-df2gxi.jpeg", 447 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/ffitne_RackMultipart20150203-15-3srbzi" 448 | }, 449 | "type": "image" 450 | }, 451 | { 452 | "urls": { 453 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1dddd6w.jpeg", 454 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/7eecuz_RackMultipart20150203-15-zwnx6u" 455 | }, 456 | "type": "image" 457 | }, 458 | { 459 | "urls": { 460 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-10j3uu.jpeg", 461 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/pzyki0_RackMultipart20150203-15-i4pd2l" 462 | }, 463 | "type": "image" 464 | }, 465 | { 466 | "urls": { 467 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-1kg7cja.jpeg", 468 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/hw312z_RackMultipart20150203-15-1uuf5gp" 469 | }, 470 | "type": "image" 471 | }, 472 | { 473 | "urls": { 474 | "thumbnail": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/thumbnails/thumbnail20150203-3-33hwsd.jpeg", 475 | "full": "https://s3.amazonaws.com/ouya-screenshots/be239ca4-10fd-42dd-89cd-1806e80b1362/u9ronc_RackMultipart20150203-15-1u4k10p" 476 | }, 477 | "type": "image" 478 | } 479 | ], 480 | "description": "CLARC, Magnetic By Nature, Stop The Bots, & Twin Robots all for 60% off the price of purchasing them all separately! This bundle will only be available until February 17th, so act faster than a cyborg on skates!\r\n\r\nAbout CLARC\r\nCLARC is an action-loaded puzzle adventure. It combines complex spatial puzzles with arcade style action elements and an epic storyline. As the story unfolds, the nerdy forklift robot Clarc will encounter partying robots, attractive nuclear missiles, intoxicated supercomputers, save the facility from an intruding spaceship and kill M.O.T.H.E.R. CLARC features 25 levels with 100 puzzles and more than 10 hours of gaming. Our grid-based gameplay and tight controls will give you the retro feel of your first console.\r\n\r\nAdditional language support for German, Spanish, Russian, and French.\r\n\r\n\r\nAbout Magnetic By Nature\r\nMagnetic By Nature is platforming without platforms: a fast-paced, single-player, 2D adventure mixing fluid motion, split-second decision making, machine-age visuals, and a dynamic soundscape. Unique magnet physics propel the player from one challenge to the next. Point One, the last remaining robot, must journey through dangerous caverns and forgotten ruins to reactivate friends damaged in a magnetic cataclysm.\r\n\r\nFeaturing:\r\n• physics-based puzzles action\r\n• cross platform leaderboards\r\n• 120+ levels, including unlockable challenges and hidden bonus rounds!\r\n• 100+ optional collectibles requiring greater skill\r\n• 2 unlockable Speedrun play modes\r\n• 9 types of magnets\r\n• 2 types of magnetic force fields\r\n\r\nAccolades:\r\n• 2014 Indie Mix Featured Game\r\n• Best Developed Game And Audience Choice Award - 2013 Utah Game Wars\r\n• Soundtrack featured in Loudr’s Game Music Bundle #7\r\n• \"Magnetic By Nature delivers an unforgettable experience\" - Hardcore Gamer\r\n\r\n\r\nAbout Stop The Bots\r\nOnly you can stop the robot filled alien ship from attacking Earth by sneaking on board and disabling it from the inside! \"Stop The Bots\" perfectly blends arcade action and logic puzzles over 90 brain bending levels!\r\n\r\n\r\nAbout Twin Robots\r\nRescue your twin and find the way out of each level together!\r\nSwitch control between the two robots at any time, or even better: play with a friend in local multiplayer!\r\nYou'll be running, jumping & solving puzzles together, but beware: Both robots are battery-powered so they consume energy in everything they do. Watch out for their battery levels!\r\n\r\nNew in this update:\r\n- Changed leaderboards to a self-hosted solution.\r\n- Fixed a bug that made the robots fall through the floor when jumping from a moving platform.", 481 | "title": "ROBO GAME BUNDLE!" 482 | } 483 | --------------------------------------------------------------------------------