{
	"openapi": "3.1.0",
	"info": {
		"title": "Online Ruler API",
		"description": "The Online Ruler API currently exposes one operation: PPI calculation for a display given its diagonal size and pixel resolution. The result is used by the on-screen ruler for calibration. No authentication is required. There are no other endpoints and no write operations.",
		"version": "1.0.0",
		"contact": {
			"name": "Online Ruler"
		}
	},
	"servers": [{ "url": "https://online-ruler.net" }],
	"paths": {
		"/api/ppi": {
			"get": {
				"operationId": "calculatePpi",
				"summary": "Calculate pixels per inch for a display",
				"description": "Computes PPI = sqrt(width^2 + height^2) / diagonal for a display, plus pixels per centimeter. All parameters are required and must be positive numbers.",
				"parameters": [
					{
						"name": "diagonal",
						"in": "query",
						"required": true,
						"description": "Screen diagonal size in inches.",
						"schema": { "type": "number", "exclusiveMinimum": 0, "example": 27 }
					},
					{
						"name": "width",
						"in": "query",
						"required": true,
						"description": "Horizontal pixel resolution.",
						"schema": { "type": "integer", "exclusiveMinimum": 0, "example": 2560 }
					},
					{
						"name": "height",
						"in": "query",
						"required": true,
						"description": "Vertical pixel resolution.",
						"schema": { "type": "integer", "exclusiveMinimum": 0, "example": 1440 }
					}
				],
				"responses": {
					"200": {
						"description": "Successful calculation.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"required": ["diagonal_inches", "width_px", "height_px", "ppi", "pixels_per_cm", "formula"],
									"properties": {
										"diagonal_inches": { "type": "number", "description": "Input diagonal in inches." },
										"width_px": { "type": "integer", "description": "Input width in pixels." },
										"height_px": { "type": "integer", "description": "Input height in pixels." },
										"ppi": { "type": "number", "description": "Pixels per inch, rounded to one decimal." },
										"pixels_per_cm": { "type": "number", "description": "Pixels per centimeter (PPI / 2.54), rounded to two decimals." },
										"formula": { "type": "string", "description": "The formula used." }
									}
								},
								"example": {
									"diagonal_inches": 27,
									"width_px": 2560,
									"height_px": 1440,
									"ppi": 108.8,
									"pixels_per_cm": 42.83,
									"formula": "ppi = sqrt(width^2 + height^2) / diagonal"
								}
							}
						}
					},
					"400": {
						"description": "Invalid or missing parameters.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"required": ["error"],
									"properties": {
										"error": {
											"type": "object",
											"required": ["code", "message", "resolution"],
											"properties": {
												"code": { "type": "string", "description": "Stable error code.", "example": "invalid_params" },
												"message": { "type": "string", "description": "Human-readable error message." },
												"resolution": { "type": "string", "description": "How to fix the request." }
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}