{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "http://nodeinfo.diaspora.software/ns/schema/2.0#",
    "description": "NodeInfo schema version 2.0.",
    "type": "object",
    "additionalProperties": false,
    "required": [
        "version",
        "software",
        "protocols",
        "services",
        "openRegistrations",
        "usage",
        "metadata"
    ],
    "properties": {
        "version": {
            "description": "The schema version, must be 2.0.",
            "enum": [
                "2.0"
            ]
        },
        "software": {
            "description": "Metadata about server software in use.",
            "type": "object",
            "additionalProperties": false,
            "required": [
                "name",
                "version"
            ],
            "properties": {
                "name": {
                    "description": "The canonical name of this server software.",
                    "type": "string",
                    "pattern": "^[a-z0-9-]+$"
                },
                "version": {
                    "description": "The version of this server software.",
                    "type": "string"
                }
            }
        },
        "protocols": {
            "description": "The protocols supported on this server.",
            "type": "array",
            "minItems": 1,
            "items": {
                "enum": [
                    "activitypub",
                    "buddycloud",
                    "dfrn",
                    "diaspora",
                    "libertree",
                    "ostatus",
                    "pumpio",
                    "tent",
                    "xmpp",
                    "zot"
                ]
            }
        },
        "services": {
            "description": "The third party sites this server can connect to via their application API.",
            "type": "object",
            "additionalProperties": false,
            "required": [
                "inbound",
                "outbound"
            ],
            "properties": {
                "inbound": {
                    "description": "The third party sites this server can retrieve messages from for combined display with regular traffic.",
                    "type": "array",
                    "minItems": 0,
                    "items": {
                        "enum": [
                            "atom1.0",
                            "gnusocial",
                            "imap",
                            "pnut",
                            "pop3",
                            "pumpio",
                            "rss2.0",
                            "twitter"
                        ]
                    }
                },
                "outbound": {
                    "description": "The third party sites this server can publish messages to on the behalf of a user.",
                    "type": "array",
                    "minItems": 0,
                    "items": {
                        "enum": [
                            "atom1.0",
                            "blogger",
                            "buddycloud",
                            "diaspora",
                            "dreamwidth",
                            "drupal",
                            "facebook",
                            "friendica",
                            "gnusocial",
                            "google",
                            "insanejournal",
                            "libertree",
                            "linkedin",
                            "livejournal",
                            "mediagoblin",
                            "myspace",
                            "pinterest",
                            "pnut",
                            "posterous",
                            "pumpio",
                            "redmatrix",
                            "rss2.0",
                            "smtp",
                            "tent",
                            "tumblr",
                            "twitter",
                            "wordpress",
                            "xmpp"
                        ]
                    }
                }
            }
        },
        "openRegistrations": {
            "description": "Whether this server allows open self-registration.",
            "type": "boolean"
        },
        "usage": {
            "description": "Usage statistics for this server.",
            "type": "object",
            "additionalProperties": false,
            "required": [
                "users"
            ],
            "properties": {
                "users": {
                    "description": "statistics about the users of this server.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "total": {
                            "description": "The total amount of on this server registered users.",
                            "type": "integer",
                            "minimum": 0
                        },
                        "activeHalfyear": {
                            "description": "The amount of users that signed in at least once in the last 180 days.",
                            "type": "integer",
                            "minimum": 0
                        },
                        "activeMonth": {
                            "description": "The amount of users that signed in at least once in the last 30 days.",
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                },
                "localPosts": {
                    "description": "The amount of posts that were made by users that are registered on this server.",
                    "type": "integer",
                    "minimum": 0
                },
                "localComments": {
                    "description": "The amount of comments that were made by users that are registered on this server.",
                    "type": "integer",
                    "minimum": 0
                }
            }
        },
        "metadata": {
            "description": "Free form key value pairs for software specific values. Clients should not rely on any specific key present.",
            "type": "object",
            "minProperties": 0,
            "additionalProperties": true
        }
    }
}