{"openapi":"3.1.0","info":{"title":"Sunscreen & UV API","version":"1.0.0","description":"Sun-safety maths as an API, computed locally and deterministically — the burn-time, SPF and reapplication numbers a sunscreen, weather or outdoor app keeps people safe with. The burntime endpoint estimates how long until sunburn from the Fitzpatrick skin type (1 very fair to 6 deeply pigmented), the UV index and the SPF: unprotected time is a skin-type base (type II around 15 minutes) scaled by 6 ÷ UV index, and protected time is that times the SPF — so fair type-II skin at UV 8 burns in about 11 minutes bare, or roughly 5½ hours under SPF 30, while very fair type-I skin in extreme UV 11 burns in 5 minutes. The spf endpoint flips it: the SPF needed = your desired minutes outdoors ÷ the unprotected time, with the reminder that real protection plateaus around SPF 30–50. The amount endpoint covers the part people get wrong — about 2 mg/cm², roughly 1 ounce (30 g, a shot glass) for a full adult body, reapplied every two hours — and totals the sunscreen for a day out. Everything is computed locally and deterministically, so it is instant and private. Ideal for sun-safety, weather, skincare and outdoor app developers, UV-alert and reminder tools, and wellness software. Pure local computation — no key, no third-party service, instant. Educational estimates, not medical advice. Live, nothing stored. 3 compute endpoints.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/sunscreen-api","description":"oanor gateway"}],"tags":[{"name":"Sun"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/amount":{"get":{"operationId":"get_v1_amount","tags":["Sun"],"summary":"Sunscreen amount + reapply","description":"","parameters":[{"name":"hours_outdoors","in":"query","required":true,"description":"Hours outdoors","schema":{"type":"string"},"example":"6"},{"name":"coverage","in":"query","required":false,"description":"Body fraction exposed 0-1 (default 1)","schema":{"type":"string"},"example":"1"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/burntime":{"get":{"operationId":"get_v1_burntime","tags":["Sun"],"summary":"Time to sunburn","description":"","parameters":[{"name":"skin_type","in":"query","required":true,"description":"Fitzpatrick type 1-6","schema":{"type":"string"},"example":"2"},{"name":"uv_index","in":"query","required":true,"description":"UV index (0-16)","schema":{"type":"string"},"example":"8"},{"name":"spf","in":"query","required":false,"description":"Sunscreen SPF (default 1 = none)","schema":{"type":"string"},"example":"30"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/spf":{"get":{"operationId":"get_v1_spf","tags":["Sun"],"summary":"SPF needed for a duration","description":"","parameters":[{"name":"skin_type","in":"query","required":true,"description":"Fitzpatrick type 1-6","schema":{"type":"string"},"example":"3"},{"name":"uv_index","in":"query","required":true,"description":"UV index","schema":{"type":"string"},"example":"8"},{"name":"desired_minutes","in":"query","required":true,"description":"Minutes outdoors","schema":{"type":"string"},"example":"240"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":7160,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":431,"monthly_call_quota":56100,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1176,"monthly_call_quota":229200,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3712,"monthly_call_quota":1339000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/sunscreen-api"}