ForHosting KIT · Science

Air quality index from carbon monoxide

An eight-hour carbon monoxide average of 4 ppm equals AQI 45, in the Good category, on the official US EPA table. The concentration is truncated and interpolated exactly as EPA rules require. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Concentration ppm
4
You get
Concentration truncated ppm
4 ppm
Aqi
45
Aqi exact
45.4545454545
Category
Good

Carbon monoxide is a colorless, odorless gas that still drives many regional air-quality alerts, especially where traffic or incomplete combustion dominates. Journalists, facility managers, classroom labs, and automation pipelines often hold an eight-hour CO average in parts per million and need the matching US EPA Air Quality Index without re-deriving breakpoint tables by hand. This calculator accepts that concentration, truncates it to one decimal place exactly as EPA reporting rules require, finds the official CO breakpoint band, and applies the standard linear interpolation to return a whole-number AQI plus category label.

How the EPA AQI maps eight-hour CO to an index

The US Environmental Protection Agency defines the Air Quality Index as a piecewise-linear scale that converts a pollutant concentration into a unitless number from zero through five hundred, with fixed category thresholds that the public already knows: Good, Moderate, Unhealthy for Sensitive Groups, Unhealthy, Very Unhealthy, and Hazardous. For carbon monoxide the official concentration used in daily AQI reporting is the eight-hour average in parts per million.

Before any math, EPA rules truncate that concentration to one decimal place—not ordinary rounding—so a raw reading of eight point four five becomes eight point four. The truncated value is then located in one of seven published breakpoint intervals, for example zero point zero through four point four ppm for AQI zero through fifty, or four point five through nine point four ppm for AQI fifty-one through one hundred.

Inside a band the index is obtained by linear interpolation: I equals the ratio of the AQI span to the concentration span, times the distance of C above the low breakpoint, plus the low AQI of that band. The result is rounded to the nearest whole number for display and for comparison against category cut-points. When concentration is exactly a breakpoint high, the high AQI of that band is returned; when it is exactly a breakpoint low, the low AQI is returned.

Values above fifty point four ppm sit beyond the highest Hazardous band and are rejected rather than extrapolated, matching the published tables that stop at five hundred. Negative concentrations are physically meaningless for ambient CO AQI and are rejected as invalid input. This capability encodes those tables and that formula only—it does not fetch live monitor data, does not convert one-hour CO averages, and does not compute multi-pollutant composite AQI from NO2, ozone, or particulate matter.

Classroom and lab checks

Convert eight-hour CO concentrations to US EPA AQI so students can verify breakpoint interpolation and category labels against textbook tables.

Sensor dashboards and alerts

Map fixed-monitor or logger CO averages into whole-number AQI for thresholds, SMS rules, and compliance screens without embedding EPA tables in every service.

What concentration range is supported?

Non-negative values up to 50.4 ppm after EPA truncation.

Does this use one-hour or eight-hour CO averages?

Eight-hour averages only, matching the primary CO concentration series used in US EPA daily AQI reporting tables for carbon monoxide.

What AQI does 4 ppm of carbon monoxide give?

AQI 45, in the Good category. A reading of 4 ppm falls in the band from 0 to 4.4 ppm, which maps to AQI 0 to 50, and the interpolation gives 45.454545454545, reported as 45.

Why is the CO concentration truncated instead of rounded?

Because EPA reporting rules require it. The eight-hour average is cut to one decimal place before any calculation, so extra decimals are dropped rather than rounded up, and your index matches official reports.

Does it combine carbon monoxide with ozone or particles?

No. It converts a single eight-hour carbon monoxide average into its own AQI. It does not fetch live monitor data, convert one-hour averages or build a combined index from NO2, ozone or particulate matter.

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.

POSThttps://api.kit.forhosting.com/earth/aqi-co

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.

curl -X POST https://api.kit.forhosting.com/earth/aqi-co \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"concentration_ppm":4}'
{
  "concentration_ppm": 4
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "earth.aqi_co",
  "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.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Negative readings and values above the highest published breakpoint fail with invalid_input instead of inventing an index.

Input contract, response fields, and error behaviour

Example: four point zero ppm truncates to four point zero, falls in the Good band zero through four point four, interpolates to roughly forty-five point four five, and rounds to AQI forty-five. Another example: nine point five ppm sits at the low edge of Unhealthy for Sensitive Groups and yields AQI one hundred one. POST a JSON body with one required finite number, concentration_ppm: the eight-hour average carbon monoxide concentration in parts per million. Aliases co_ppm, co, ppm, concentration, and c are accepted so scripts can reuse common field names. Numeric strings are coerced; missing, empty, or non-finite values fail with invalid_input naming the field. On success the body echoes concentration_ppm and concentration_truncated_ppm, returns aqi as the rounded integer index, aqi_exact as the pre-round interpolation, category and category_code for the EPA band, the concentration and AQI breakpoint edges used, pollutant CO, averaging_period eight-hour, unit ppm, standard US EPA AQI, plus formula, equation, and step strings suitable for UI footnotes. Pair the response with your own maps or alerts if you need spatial context; this endpoint only converts a single concentration number into AQI.

Where a CO-only AQI calculator earns its keep

Environmental science classes and public-health modules use a carbon monoxide AQI calculator so students can check homework against EPA tables without a spreadsheet of breakpoints. Content that already explains multi-pollutant AQI still needs a CO-specific landing when search intent is explicitly carbon monoxide, because the breakpoints and truncation rules differ from ozone or PM2.5. Building automation and industrial hygiene scripts often store eight-hour rolling CO averages from fixed sensors and need a deterministic index for dashboards, SMS thresholds, or compliance logs—calling a tiny parse API avoids embedding fragile table copies in every service. Researchers comparing historical monitor files can recompute AQI offline by streaming concentrations through the API or by reusing the same pure lib in tests. Keep requests small, pin aqi and concentration_truncated_ppm in goldens, and you get reproducible EPA-style indices for education, ops, and edge workers without standing up an air-quality data platform of your own. Failed validation does not consume balance; only successful conversions bill at $0.002.

Content widgets and automation

Power an SEO landing or scripted bulk recompute with the same pure CO→AQI logic used in the free browser tool and the prepaid API.

How do I calculate AQI from carbon monoxide concentration?

Send concentration_ppm as the eight-hour average CO in ppm. The API truncates to one decimal place, finds the EPA breakpoint band, linearly interpolates, and returns a whole-number AQI with category.

Is the AQI rounded or left fractional?

aqi is the nearest integer (EPA display practice). aqi_exact keeps the pre-round interpolated value for audit and teaching.

What does the air quality index from carbon monoxide calculator cost?

The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.

Read the full KIT documentation →