--- /dev/null
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "http://cweiske.de/ouya-game.schema.json",
+ "title": "OUYA game metadata",
+ "description": "Game data importable in OUYA API servers.",
+ "type": "object",
+
+ "required": [
+ "packageName",
+ "title",
+ "releases",
+ "media",
+ "developer"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "packageName": {
+ "description": "Java package names",
+ "type": "string",
+ "examples": [
+ "com.vendor.gamename"
+ ]
+ },
+
+ "title": {
+ "description": "Game name",
+ "type": "string"
+ },
+
+ "description": {
+ "description": "Text describing the game. Newlines (CRLF) allowed",
+ "type": "string"
+ },
+
+ "players": {
+ "description": "How many players can play this game at the same time?",
+ "type": "array",
+ "items": {
+ "type": "number",
+ "minimum": 1
+ }
+ },
+
+ "genres": {
+ "description": "Categories",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "uniqueItems": true,
+ "enum": [
+ "Adventure",
+ "App",
+ "Arcade/Pinball",
+ "Card/Casino",
+ "Dual Stick",
+ "Entertainment",
+ "Fight!",
+ "FPS/Shooter",
+ "Kids List",
+ "Meditative",
+ "Multiplayer",
+ "Music",
+ "Platformer",
+ "Puzzle/Trivia",
+ "Racing",
+ "Retro",
+ "Role-Playing",
+ "Short on Time?",
+ "Sim/Strategy",
+ "Sports",
+ "Utility",
+ "Video",
+
+ "Open Source"
+ ]
+ }
+ },
+
+ "releases": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "name",
+ "versionCode",
+ "uuid",
+ "date",
+ "url",
+ "size",
+ "md5sum"
+ ],
+ "additionalProperties": false,
+ "properties": {
+
+ "name": {
+ "description": "Human readable version number",
+ "type": "string",
+ "examples": [
+ "1.6"
+ ]
+ },
+
+ "versionCode": {
+ "description": "APK-internal version code. Run \"aapt dump badging file.apk\", field \"versionCode\"",
+ "type": ["string", "null"]
+ },
+
+ "uuid": {
+ "description": "Unique ID for the release. Use uuid-gen to get one",
+ "type": "string"
+ },
+
+ "date": {
+ "description": "When the version has been released",
+ "type": "string",
+ "format": "date|datetime"
+ },
+
+ "latest": {
+ "description": "Marker for the latest release",
+ "type": "boolean"
+ },
+
+ "url": {
+ "description": ".apk download link",
+ "type": "string",
+ "format": "url"
+ },
+
+ "size": {
+ "description": "File size in bytes",
+ "type": "number",
+ "minimum": 1
+ },
+
+ "md5sum": {
+ "description": "MD5 hash of the .apk file contents",
+ "type": "string"
+ },
+
+ "publicSize": {
+ "description": "FIXME",
+ "type": "number"
+ },
+
+ "nativeSize": {
+ "description": "FIXME",
+ "type": "number"
+ }
+ }
+ }
+ },
+
+ "media": {
+ "type": "object",
+ "required": [
+ "discover",
+ "large"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "discover": {
+ "description": "Image for the OUYA discover store. FIXME: Size",
+ "type": "string",
+ "format": "url"
+ },
+
+ "large": {
+ "description": "Large game cover image for the store details page.",
+ "type": "string",
+ "format": "url"
+ },
+
+ "video": {
+ "description": "Video for the store details page. Vimeo and Youtube URLs supported",
+ "type": "string",
+ "format": "url"
+ },
+
+ "screenshots": {
+ "description": "Additional images for the store details page.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "url"
+ }
+ },
+
+ "details": {
+ "description": "Images and videos for the details page. Can be in any order. If no detail images and videos are given, the large image, video and screenshots are used instead",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "type",
+ "url"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "description": "Medium type: image or video",
+ "type": "string",
+ "enum": ["image", "video"]
+ },
+
+ "url": {
+ "description": "Image URL or video URL. Vimeo and Youtube URLs supported",
+ "type": "string",
+ "format": "url"
+ },
+
+ "thumb": {
+ "description": "Small preview image",
+ "type": "string",
+ "format": "url"
+ }
+ }
+ }
+ }
+ }
+ },
+
+ "developer": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "additionalProperties": false,
+ "properties": {
+
+ "uuid": {
+ "description": "Unique ID for the developer",
+ "type": "string"
+ },
+
+ "name": {
+ "description": "Developer (company or person) name",
+ "type": "string"
+ },
+
+ "supportEmail": {
+ "description": "E-Mail address for support questions",
+ "type": "string",
+ "format": "email",
+ "default": null
+ },
+
+ "supportPhone": {
+ "description": "Telephone number",
+ "type": "string",
+ "default": null
+ },
+
+ "founder": {
+ "description": "If the developer was an OUYA founder",
+ "type": "boolean",
+ "default": false
+ }
+ }
+ },
+
+ "contentRating": {
+ "description": "Which audience is this game for?",
+ "type": "string",
+ "enum": [
+ "Everyone",
+ "9+",
+ "12+",
+ "17+"
+ ]
+ },
+
+ "website": {
+ "description": "Game website",
+ "type": "string",
+ "format": "url"
+ },
+
+ "firstPublishedAt": {
+ "description": "When the game has first been published to the world",
+ "type": "string",
+ "format": "date|date-time"
+ },
+
+ "inAppPurchases": {
+ "description": "If you can buy things in the game",
+ "type": "boolean"
+ },
+
+ "overview": {
+ "description": "FIXME",
+ "type": "string"
+ },
+
+ "premium": {
+ "description": "FIXME",
+ "type": "boolean"
+ },
+
+ "rating": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+
+ "likeCount": {
+ "description": "Number of likes this game has",
+ "type": "number",
+ "minimum": 0
+ },
+
+ "average": {
+ "description": "Average rating for this game",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 5
+ },
+
+ "count": {
+ "description": "Number of ratings",
+ "type": "number",
+ "minimum": 0
+ }
+ }
+ },
+
+ "products": {
+ "description": "Items that could be bought via the discover store",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "identifier",
+ "name",
+ "description",
+ "localPrice",
+ "originalPrice",
+ "currency"
+ ],
+ "additionalProperties": false,
+ "properties": {
+
+ "promoted": {
+ "description": "If this product is the currently promoted/visible one",
+ "type": "boolean"
+ },
+
+ "identifier": {
+ "description": "Internal key",
+ "type": "string",
+ "examples": [
+ "full_version"
+ ]
+ },
+
+ "name": {
+ "description": "Human readable name",
+ "type": "string",
+ "examples": [
+ "Unlock full game"
+ ]
+ },
+
+ "description": {
+ "description": "Explanation of the features you will buy",
+ "type": "string"
+ },
+
+ "localPrice": {
+ "description": "Current price (maybe discounted)",
+ "type": "number"
+ },
+
+ "originalPrice": {
+ "description": "Previous price",
+ "type": "number"
+ },
+
+ "currency": {
+ "description": "Three-letter currency code, depending on the player that was logged in",
+ "type": "string",
+ "enum": ["EUR", "USD"]
+ }
+ }
+ }
+ }
+ }
+}