{
    "$schema": "http://json-schema.org/draft-03/schema",
    "required": true,
    "type": "object",
    "additionalProperties": false,
    "properties": {
        "track_id": {
            "required": true,
            "type": "integer",
            "description": "Maps to track.id."
        },
        "track_number": {
            "type": "integer",
            "minimum": 0,
            "maximum": 65535,
            "description": "Maps to track.track_id. The sequence of this track on the disc. Required to create."
        },
        "track_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Maps to track.name. Required to create."
        },
        "side": {
            "type": ["string", "null"],
            "pattern": "^[a-zA-Z\\d]*$",
            "minLength": 1,
            "maxLength": 5,
            "description": "Maps to track.side."
        },
        "performer": {
            "type": "array",
            "minLength": 1,
            "description": "Maps one-to-many from track to to track_artist. Each item should map to track_artist.artist_name, and track_artist.type should be set to 'performer'. Required to create."
        },
        "song_writers": {
            "type": "array",
            "minLength": 0,
            "description": "Maps one-to-many from track to to track_writers. Each item should map to track_writer.writer_name."
        },
        "isrc": {
            "type": ["string", "null"],
            "pattern": "^[a-zA-Z\\d]*$",
            "minLength": 12,
            "maxLength": 12,
            "description": "Maps to track.isrc."
        },
        "disc": {
            "type": ["integer", "null"],
            "description": "Maps to track.cd."
        },
        "length": {
            "type": ["string", "null"],
            "minLength": 1,
            "pattern": "[0-9]{1,3}:[0-5]?[0-9]:[0-5][0-9]",
            "description": "String representation of time in HH:MM:SS or H:M:SS format. Maps to track.length_minutes and track.length_seconds."
        },
        "us_publishing_obligation": {
            "type": "string",
            "minLength": 1,
            "maxLength": 50,
            "required": false,
            "enum": ["Composition", "ControlledByYourLabel", "PublicDomain"]
        },
        "third_party_publisher": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1,
            "required": false,
            "enum": ["Y", "N"]
        }
    }
}
