{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://collectionlists.org/tokenlist.schema.json", "title": "SYNC Collection List", "description": "Schema for lists of collections compatible with the SYNC Interface", "definitions": { "Version": { "type": "object", "description": "The version of the list, used in change detection", "examples": [ { "major": 1, "minor": 0, "patch": 1 } ], "additionalProperties": false, "properties": { "major": { "type": "integer", "description": "The major version of the list. Must be incremented when tokens are removed from the list or token addresses are changed.", "minimum": 0, "examples": [1, 2] }, "minor": { "type": "integer", "description": "The minor version of the list. Must be incremented when tokens are added to the list.", "minimum": 0, "examples": [0, 1] }, "patch": { "type": "integer", "description": "The patch version of the list. Must be incremented for any changes to the list.", "minimum": 0, "examples": [0, 1] } }, "required": ["major", "minor", "patch"] }, "TagIdentifier": { "type": "string", "description": "The unique identifier of a tag", "minLength": 1, "maxLength": 20, "pattern": "^[\\w]+$", "examples": ["compound", "stablecoin"] }, "ExtensionIdentifier": { "type": "string", "description": "The name of a token extension property", "minLength": 1, "maxLength": 40, "pattern": "^[\\w]+$", "examples": ["color", "is_fee_on_transfer", "aliases"] }, "ExtensionMap": { "type": "object", "description": "An object containing any arbitrary or vendor-specific token metadata", "maxProperties": 10, "propertyNames": { "$ref": "#/definitions/ExtensionIdentifier" }, "additionalProperties": { "$ref": "#/definitions/ExtensionValue" }, "examples": [ { "color": "#000000", "is_verified_by_me": true }, { "x-bridged-addresses-by-chain": { "1": { "bridgeAddress": "0x4200000000000000000000000000000000000010", "tokenAddress": "0x4200000000000000000000000000000000000010" } } } ] }, "ExtensionPrimitiveValue": { "anyOf": [ { "type": "string", "minLength": 1, "maxLength": 42, "examples": ["#00000"] }, { "type": "boolean", "examples": [true] }, { "type": "number", "examples": [15] }, { "type": "null" } ] }, "ExtensionValue": { "anyOf": [ { "$ref": "#/definitions/ExtensionPrimitiveValue" }, { "type": "object", "maxProperties": 10, "propertyNames": { "$ref": "#/definitions/ExtensionIdentifier" }, "additionalProperties": { "$ref": "#/definitions/ExtensionValueInner0" } } ] }, "ExtensionValueInner0": { "anyOf": [ { "$ref": "#/definitions/ExtensionPrimitiveValue" }, { "type": "object", "maxProperties": 10, "propertyNames": { "$ref": "#/definitions/ExtensionIdentifier" }, "additionalProperties": { "$ref": "#/definitions/ExtensionValueInner1" } } ] }, "ExtensionValueInner1": { "anyOf": [ { "$ref": "#/definitions/ExtensionPrimitiveValue" } ] }, "TagDefinition": { "type": "object", "description": "Definition of a tag that can be associated with a collection via its identifier", "additionalProperties": false, "properties": { "name": { "type": "string", "description": "The name of the tag", "pattern": "^[ \\w]+$", "minLength": 1, "maxLength": 40 }, "description": { "type": "string", "description": "A user-friendly description of the tag", "pattern": "^[ \\w\\.,:]+$", "minLength": 1, "maxLength": 400 } }, "required": ["name", "description"], "examples": [ { "name": "Stablecoin", "description": "A token with value pegged to another asset" } ] }, "CollectionInfo": { "type": "object", "description": "Metadata for a single collection in a collection list", "additionalProperties": false, "properties": { "chainId": { "type": "integer", "description": "The chain ID of the Ethereum network where this collection is deployed", "minimum": 1, "examples": [1, 42] }, "address": { "type": "string", "description": "The checksummed address of the collection on the specified chain ID", "pattern": "^0x[a-fA-F0-9]{40}$", "examples": ["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"] }, "name": { "type": "string", "description": "The name of the collection", "minLength": 1, "maxLength": 80, "pattern": "^[ \\w.'+\\-%/À-ÖØ-öø-ÿ:&\\[\\]\\(\\)]+$", "examples": ["SYNC Collection"] }, "logoURI": { "type": "string", "description": "A URI to the collection logo asset", "format": "uri", "examples": ["ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM"] }, "tags": { "type": "array", "description": "An array of tag identifiers associated with the token; tags are defined at the list level", "items": { "$ref": "#/definitions/TagIdentifier" }, "maxItems": 10, "examples": ["stablecoin", "compound"] }, "extensions": { "$ref": "#/definitions/ExtensionMap" } }, "required": ["chainId", "address", "name"] } }, "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "description": "The name of the collection list", "minLength": 1, "maxLength": 40, "pattern": "^[\\w ]+$", "examples": ["My Token List"] }, "timestamp": { "type": "string", "format": "date-time", "description": "The timestamp of this list version; i.e. when this immutable version of the list was created" }, "version": { "$ref": "#/definitions/Version" }, "collections": { "type": "array", "description": "The list of collections included in the list", "items": { "$ref": "#/definitions/CollectionInfo" }, "minItems": 1, "maxItems": 10000 }, "keywords": { "type": "array", "description": "Keywords associated with the contents of the list; may be used in list discoverability", "items": { "type": "string", "description": "A keyword to describe the contents of the list", "minLength": 1, "maxLength": 20, "pattern": "^[\\w ]+$", "examples": ["compound", "lending", "personal tokens"] }, "maxItems": 50, "uniqueItems": true }, "tags": { "type": "object", "description": "A mapping of tag identifiers to their name and description", "propertyNames": { "$ref": "#/definitions/TagIdentifier" }, "additionalProperties": { "$ref": "#/definitions/TagDefinition" }, "maxProperties": 100, "examples": [ { "stablecoin": { "name": "Stablecoin", "description": "A token with value pegged to another asset" } } ] }, "logoURI": { "type": "string", "description": "A URI for the logo of the collection list; prefer SVG or PNG of size 256x256", "format": "uri", "examples": ["ipfs://QmXfzKRvjZz3u5JRgC4v5mGVbm9ahrUiB4DgzHBsnWbTMM"] }, "baseURL": { "type": "string", "description": "The link to the marketplace where the collection can be found.", "format": "uri", "examples": ["https://neonrain.io"] }, "collectionURL": { "type": "string", "description": "The link to the collection on the marketplace. {collectionId} will be replaced by the collection address.", "format": "uri-template", "examples": ["https://neonrain.io/explore?collections={collectionId}"] }, "itemURL": { "type": "string", "description": "The link to an individual NFT of the collection on the marketplace. {chainId} will be replaced by the Chain ID, {collectionId} will be replaced by the collection address, and {tokenId} will be replaced by the Token ID", "format": "uri-template", "examples": [ "https://neonrain.io/explore/{chainID}/{collectionId}/{tokenId}" ] } }, "required": ["name", "timestamp", "version", "collections"] }