{ "$schema": "http://treadspec.tireprofiles.com/documentation/schema/5.2", "title": "Tire Profiles Scan Distribution Request Schema Version V5.2", "type": "object", "description": "Tire Profiles Scan Distribution Request Schema Version V5.2", "properties": { "scan": { "$ref": "#/definitions/VehicleScan" } }, "_comment": "CMB - We do not need the 'scan' property anymore. It is just an unnecessary level of indirection.", "required": [ "scan" ], "additionalProperties": false, "definitions": { "VehicleScan": { "type": "object", "description": "Data related to the scanning of a given vehicle's tires by the Service Drive, Service Bay or Groove Glove.", "properties": { "_comment": { "type": "string", "description": "Support for a comment in JSON." }, "CustomDealerContent": { "type": "object", "description": "Custom content from the CustomDealerContent dealer setting in TreadSpec." }, "ScanID": { "type": "integer", "description": "TreadSpec Scan Identifier." }, "TreadTrackerReport": { "type": "string", "description": "The URL of the TreadSpec report PDF file." }, "TPIDealerName": { "type": "string", "description": "Internal Tire Profiles dealer name." }, "TPIDealerID": { "type": "number", "description": "Internal Tire Profiles dealer identifier." }, "JSONVersion": { "type": "string", "enum": [ "Legacy", "3.0", "3.1", "4.0", "4.1", "4.2", "5.0", "5.1", "5.2" ], "description": "The version of the JSON schema used to validate the file." }, "CustomerDealerID": { "type": "string", "description": "Interal ID used by Customers." }, "ScanDateTime": { "type": "string", "description": "Date and time of when the scan was performed." }, "CustomerDateTime": { "type": "string", "description": "Date and time of scan performed, converted to dealer timezone." }, "ServerDateTime": { "type": "string", "description": "Date and time of when the scan was performed, TS Server time." }, "ScanEquipment": { "type": "object", "description": "The device that performed the scan.", "properties": { "devicetype": { "type": "string", "enum": [ "SB", "SD", "GL", "PD" ], "description": "The type of device that performed the scan. One of Service Bay (SB), Service Drive (SD) or Groove Glove (GL)." }, "devicename": { "type": "string", "maxLength": 50, "description": "Internal TPI name of the data collection device." }, "MACAddress": { "type": "string", "maxLength": 17, "description": "MAC Address of the data collection device. (If avaiable.)" }, "SerialNumber": { "type": "string", "maxLength": 50, "description": "Serial Number of the data collection device. (If avaiable.)" } }, "additionalProperties": false, "required": [ "devicetype" ] }, "EmployeeID": { "type": [ "string", "null" ], "maxLength": 50, "description": "Employee who performed the scan. This can be set from the Service Bay or the Glove, null otherwise." }, "TPIVehicleType": { "type": "string", "enum": [ "Unknown", "Passenger", "Dually", "Tractor", "Trailer" ], "description": "The TPI defined vehicle type. One of Passenger (A passenger vehicle), Dually (Light Truck), Tractor (CMV) or Trailer (CMV)." }, "VehicleImage": { "type": [ "string", "null" ], "description": "The URL of an image taken of the vehicle. May be the entire vehicle, the back end of the vehicle, or a close up of the license plate." }, "LicensePlate": { "anyOf": [{ "type": "object", "properties": { "platestring": { "type": "string", "description": "The license plate string itself. (Note: Spaces are relevant in the EU.)" }, "jurisdiction": { "type": "string", "maxlength": 2, "description": "The state, province or country that issued the license plate." } }, "required": [ "jurisdiction", "platestring" ], "additionalProperties": false }, { "type": "null" } ], "description": "The license plate string and jurisdiction." }, "AlignmentRecommendation": { "type": "boolean", "description": "Indication of whether an alignment was recommended." }, "RotationRecommendation": { "type": "boolean", "description": "Indication of whether a rotation was recommended." }, "VehicleConditions": { "$ref": "#/definitions/ConditionCodeStrings", "description": "Set of strings representing the condition of the vehicle as a whole." }, "ReasonForVisit": { "type": [ "string", "null" ], "description": "The reason the vehicle owner visited the dealer as entered on the Glove." }, "TPMSStatus": { "type": "string", "enum": [ "Unknown", "On", "Off", "Flashing" ], "description": "Status of a vehicles TPMS system. One of 'Unknown' (The user did not enter it on the Glove), on, off, or flashing." }, "VehicleHasWheelLocks": { "type": "string", "enum": [ "Unknown", "Yes", "No" ], "description": "An indication of whether the vehicle has wheel locks." }, "VehicleHasWinterTires": { "type": "string", "enum": [ "Yes", "No" ], "description": "An indication of whether the vehicle was scanned as having winter tires." }, "VehicleColor": { "type": [ "string", "null" ], "description": "The color of the vehicle." }, "VehicleOdometer": { "anyOf": [{ "$ref": "#/definitions/OdometerReading" }, { "type": "null" } ], "description": "The current odometer reading for the vehicle." }, "VehicleUnitID": { "type": [ "string", "null" ], "description": "User defined vehicle identifier. Most frequently used for CMV." }, "VehicleTypeDetails": { "anyOf": [{ "$ref": "#/definitions/Vehicle" }, { "type": "null" } ], "description": "VIN and details, if avaiable." }, "VehicleOwnerDetails": { "anyOf": [{ "$ref": "#/definitions/VehicleOwner" }, { "type": "null" } ], "description": "Vehicle owner details, if avaiable." }, "BrakingDistance": { "type": [ "integer", "null" ], "minimum": 100, "maximum": 220, "description": "The percentage distance needed to stop on wet roads at 70 MPH (112 KPH) as compared to new tires. The tread depth of the worst tire on the vehicle is used to calculate this value." }, "Tires": { "type": "array", "items": { "$ref": "#/definitions/TireScan" }, "description": "A collection of tires and their scan analysis." } }, "required": [ "JSONVersion", "CustomDealerContent", "ScanID", "ScanDateTime", "CustomerDateTime", "ServerDateTime", "TPIDealerID", "TPIDealerName", "ScanEquipment", "EmployeeID", "TPIVehicleType", "VehicleUnitID", "VehicleImage", "LicensePlate", "VehicleTypeDetails", "VehicleColor", "VehicleOdometer", "VehicleOwnerDetails", "TreadTrackerReport", "AlignmentRecommendation", "RotationRecommendation", "VehicleConditions", "BrakingDistance", "ReasonForVisit", "TPMSStatus", "VehicleHasWheelLocks", "VehicleHasWinterTires", "Tires" ], "additionalProperties": false }, "File": { "type": "object", "properties": { "FileLink": { "type": [ "string", "null" ], "description": "The URL of the file." }, "FileContent": { "anyOf": [{ "type": "object", "properties": { "FileType": { "type": [ "string", "null" ], "enum": [ "jpg", "png", "svg", "pdf" ], "description": "File type of the file data." }, "FileData": { "type": [ "string", "null" ], "description": "HEX data of the file contents." } }, "required": [ "FileType", "FileData" ], "additionalProperties": false }, { "type": "null" } ] } }, "required": [ "FileLink", "FileContent" ], "additionalProperties": false }, "ConditionCodeStrings": { "type": "array", "items": { "type": "string" } }, "Vehicle": { "type": "object", "description": "Vehicle data to identify a specific vehicle (VIN), and its attributes (YMM).", "properties": { "vin": { "type": "string", "pattern": "^([ABCDEFGHJKLMNPRSTUVWXYZ]|[0123456789]){17}$", "description": "The Vehicle Identification Number (VIN)." }, "year": { "type": [ "integer", "null" ], "minimum": 1981, "description": "The current VIN format is only good going back to 1981." }, "make": { "type": [ "string", "null" ], "description": "The vehicle make." }, "model": { "type": [ "string", "null" ], "description": "The vehicle model." }, "trim": { "type": [ "string", "null" ], "description": "The vehicle trim line." }, "bodytype": { "type": [ "string", "null" ], "description": "The vehicle body type." }, "vehicletype": { "type": [ "string", "null" ], "description": "The vehicle type." }, "fronttiresize": { "anyOf": [{ "$ref": "#/definitions/TireSizeDescription" }, { "type": "null" } ], "description": "Specified Front Tire Size based on VIN." }, "reartiresize": { "anyOf": [{ "$ref": "#/definitions/TireSizeDescription" }, { "type": "null" } ], "description": "Specified Rear Tire Size based on VIN." } }, "required": [ "vin", "bodytype", "fronttiresize", "make", "model", "reartiresize", "trim", "vehicletype", "year" ], "additionalProperties": false }, "TireSizeDescription": { "type": "string", "maxlength": 24, "description": "The tire size from the sidewall. e.g. 'P215/65 R15'." }, "VehicleOwner": { "type": "object", "description": "Vehicle owner specific data", "properties": { "name": { "type": [ "string", "null" ], "maxLength": 50, "description": "The vehicle owner's name." }, "email": { "type": [ "string", "null" ], "maxLength": 50, "description": "The vehicle owner's email address." }, "phone": { "type": [ "string", "null" ], "maxLength": 25, "description": "The vehicle owner's preferred phone number." } }, "required": [ "name", "email", "phone" ], "additionalProperties": false }, "TireScan": { "type": "object", "properties": { "TirePosition": { "$ref": "#/definitions/TirePositionDescription", "description": "Describes the position (on a vehicle) for a given tire." }, "MinimumTreadDepth": { "type": "array", "items": { "$ref": "#/definitions/DepthMeasurement" }, "minItems": 2, "maxItems": 2, "description": "The minimum tread depth on this tire." }, "MaximumTreadDepth": { "type": "array", "items": { "$ref": "#/definitions/DepthMeasurement" }, "minItems": 2, "maxItems": 2, "description": "The maximum tread depth on this tire." }, "AverageTreadDepth": { "type": "array", "items": { "$ref": "#/definitions/DepthMeasurement" }, "minItems": 2, "maxItems": 2, "description": "The average tread depth on this tire." }, "GrooveDepths": { "type": "array", "items": { "$ref": "#/definitions/DepthMeasurementArray" }, "minItems": 2, "maxItems": 2, "description": "Individual groove depths on this tire." }, "GroovePositions": { "type": "array", "items": { "$ref": "#/definitions/DepthMeasurementArray" }, "minItems": 2, "maxItems": 2, "description": "Individual groove positions on this tire. (Same order as depths.)" }, "TireRecommendation": { "type": "string", "enum": [ "Good", "Marginal", "Replace Soon", "Replace Now", "Bad Scan" ], "description": "The replacement recommendation for a given tire." }, "TireConditions": { "$ref": "#/definitions/ConditionCodeStrings", "description": "Set of strings representing the condition of this tire." }, "ProfileImage": { "type": "string", "description": "The URL of the image of the tire profile for the TreadSpec report." }, "TireLoad": { "type": [ "string", "null" ], "description": "Load Index/Range - Manually entered on the Groove Glove." }, "TireNotes": { "type": [ "string", "null" ], "description": "Tire Notes - Manually entered on the Groove Glove." }, "TireSize": { "anyOf": [{ "$ref": "#/definitions/TireSizeDescription" }, { "type": "null" } ], "description": "Tire Size - Manually entered on the Groove Glove." }, "DOTTIN": { "type": [ "string", "null" ], "description": "The conmplete Department of Transportation (DOT) Tire Identification Number. - Manually entered on the Groove Glove." }, "TirePressure": { "anyOf": [{ "$ref": "#/definitions/PressureMeasurement" }, { "type": "null" } ], "description": "The recorded tire pressure. - Manually entered on the Groove Glove." } }, "required": [ "AverageTreadDepth", "DOTTIN", "GrooveDepths", "GroovePositions", "MaximumTreadDepth", "MinimumTreadDepth", "ProfileImage", "TireConditions", "TireLoad", "TireNotes", "TirePosition", "TirePressure", "TireRecommendation", "TireSize" ], "additionalProperties": false }, "OdometerReading": { "type": "object", "description": "The odometer reading, with unit of measure, of the vehicle if provided. Null otherwise.", "properties": { "Reading": { "type": "integer", "minimum": 0, "maximum": 9999999, "description": "The odometer reading itself." }, "UnitOfMeasure": { "type": "string", "enum": [ "KM", "MI" ], "description": "The unit of measure associated with the reading." } }, "required": [ "Reading", "UnitOfMeasure" ], "additionalProperties": false }, "TirePositionDescription": { "type": ["object", "null"], "properties": { "axle": { "type": "string", "pattern": "[A-Z]", "description": "Front axle is 'A', next is 'B', etc." }, "index": { "type": "integer", "minimum": 1, "maximum": 4, "description": "Left side tires are odd numbers starting with one (1). Right side tires are even starting with two (2). Number increments by two, from inside out." } }, "additionalProperties": false }, "PressureMeasurement": { "type": "object", "properties": { "Reading": { "type": "number", "description": "The pressure reading itself." }, "UnitOfMeasure": { "type": "string", "enum": [ "psi", "bar", "kPa" ], "description": "The unit of measure associated with the reading." } }, "required": [ "Reading", "UnitOfMeasure" ], "additionalProperties": false }, "DepthMeasurement": { "type": "object", "properties": { "value": { "type": "number", "description": "The depth measurement itself." }, "unit": { "type": "string", "enum": [ "mm", "32nds" ], "description": "The unit of measure associated with the depth measurement." } }, "required": [ "unit", "value" ], "additionalProperties": false }, "DepthMeasurementArray": { "type": "object", "properties": { "value": { "type": "array", "items": { "type": "number" }, "description": "The array of depth measurement itself." }, "unit": { "type": "string", "enum": [ "mm", "32nds" ], "description": "The unit of measure associated with the depth measurements." } }, "required": [ "unit", "value" ], "additionalProperties": false } } }