Classify an Air Quality Index Category and Health Guidance
An AQI of 137 falls in the 101–150 band, unhealthy for sensitive groups: people with heart or lung disease, older adults and children should cut prolonged outdoor exertion. Six EPA categories, plain guidance. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Aqi
- 137
- Category
- unhealthy_for_sensitive_groups
- Range
- 101-150
The AQI category classifier turns a numeric U.S. Air Quality Index value into a clear EPA category and a short explanation of what that level generally means for health. Enter an AQI reading to distinguish good, moderate, unhealthy for sensitive groups, unhealthy, very unhealthy, and hazardous conditions. The result is deterministic and easy to use in dashboards, alerts, reports, and automated decisions. It does not fetch a current reading or replace local public-health advice; it classifies the value you provide.
What an AQI category tells you
The U.S. Air Quality Index compresses information about outdoor air pollution into a scale designed for public communication. A number alone can be difficult to interpret, so this classifier maps the supplied value to one of six familiar EPA categories: good, moderate, unhealthy for sensitive groups, unhealthy, very unhealthy, or hazardous. Lower values indicate cleaner air and less expected health concern, while higher values indicate increasing concern and a greater need to reduce exposure.
The distinction between the general public and sensitive groups matters particularly in the middle bands. Sensitive groups can include people with heart or lung disease, older adults, children, and others who are more susceptible to the pollutant driving the index. This tool interprets a completed AQI value; it does not calculate AQI from pollutant concentrations, identify the dominant pollutant, or retrieve live conditions for a location.
How the boundaries are applied
Classification uses the standard EPA category boundaries directly. Values from 0 through 50 are good, 51 through 100 are moderate, 101 through 150 are unhealthy for sensitive groups, 151 through 200 are unhealthy, 201 through 300 are very unhealthy, and values of 301 or more are hazardous. Boundary values belong to the range in which they are published, so 100 is moderate while 101 moves into unhealthy for sensitive groups.
The input may be any finite nonnegative number, which makes the function useful even when an upstream system supplies a decimal measurement. Comparisons are made without rounding: for example, 100.5 is above the moderate ceiling and therefore enters the next category. A negative AQI has no valid category and produces an invalid-input error.
Values above 500 remain hazardous instead of being rejected or capped, allowing the classifier to handle exceptional upstream readings while making no claim that they are ordinary official AQI reports. The algorithm has no network calls, randomness, time dependence, or hidden location settings.
Using the health guidance responsibly
The returned guidance is a general communication aid, not individualized medical advice. It is suitable for adding plain-language context to a sensor dashboard, weather display, school activity workflow, travel application, or operational alert. Applications can display the category as the prominent status and keep the numeric value and range beside it so users can see exactly why the classification was chosen.
For higher categories, a product may use the guidance to encourage reduced outdoor exertion or movement to cleaner indoor air. However, local agencies may issue more specific instructions based on the pollutant, duration, wildfire smoke, indoor conditions, or community risks. People with symptoms or health conditions should follow advice from health professionals and official local authorities.
The supplied AQI should also come from a trustworthy calculation or monitoring source, because this capability validates the number’s basic form but cannot verify how it was measured. Automated systems should preserve the original value, timestamp, location, and data source alongside this classification for traceability.
What you can do with it
Add meaning to an air-quality dashboard
Convert each incoming AQI value into a readable category, published range, and general guidance for display beside the measurement.
Create consistent exposure alerts
Use one deterministic classification across mobile notifications, workplace notices, school activity tools, and internal operations.
Normalize reports from multiple sources
Attach the same category fields to AQI readings from different trusted providers without duplicating boundary logic in every integration.
FAQ
Which AQI standard does this use?
It uses the six category boundaries of the U.S. EPA Air Quality Index: good through hazardous.
What happens at an exact boundary?
The published inclusive ranges are applied directly. For example, 100 is moderate, while 101 is unhealthy for sensitive groups.
Can I enter a decimal AQI value?
Yes. Any finite nonnegative number is accepted and compared directly without rounding.
Does it retrieve current air quality for my location?
No. It only classifies the AQI value you provide and makes no network request.
Is the guidance medical advice?
No. It is general health guidance for communicating AQI conditions. Follow official local alerts and professional medical advice when relevant.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/weather/air-quality-index-category \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"aqi":42}'const res = await fetch("https://api.kit.forhosting.com/weather/air-quality-index-category", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"aqi": 42
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/weather/air-quality-index-category",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"aqi": 42
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/weather/air-quality-index-category", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"aqi":42}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"aqi":42}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/weather/air-quality-index-category", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"aqi": 42
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "weather.air_quality_index_category",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical questions
What does it cost?
It runs free in your browser on this page, and API requests cost $0.002 each.