Disclaimer: This documentation and API are for personal use only.

Public API

Forecasts for Grass Pollen, Other Allergens, and Air Quality/Woodsmoke.

Getting Started

Welcome to the Air Health Services Public API. Our API provides access to environmental health data including grass pollen forecasts, other allergen forecasts, and air quality/woodsmoke information across Australia.

1

Sign Up

Create a free account to get started.

2

Purchase a Plan

Choose a plan that fits your needs and complete payment through Stripe.

3

Generate API Token

Navigate to your dashboard and generate your API key to start making requests.

Available Plans

Choose from three specialized APIs or get full access with Total Access. Plans use a monthly credits model. Each call targets one specific SAL (Suburb and Locality -- see below for details), essentially a geographical region slightly smaller than a suburb. All forecasts provide 3-day predictions for anywhere in Australia.

Grass Pollen

3-day grass pollen forecast for anywhere in Australia. These are daily forecasts to help manage hay fever symptoms powered by ML models and automated pollen counters around Australia.

$2.99/month

300 credits/month • 300 API requests/month

1 API request = 1 credit

Other Allergens

3-day forecasts for tree pollen (Birch, Cypress, Eucalypt, Olive, Plane), weed pollen (Plantain), and fungal spores (Alternaria) across Australia.

$2.99/month

300 credits/month • 300 API requests/month

1 API request = 1 credit

AQ & Woodsmoke

3-day air quality index and woodsmoke exposure forecasts for any Australian location, including PM2.5 and O3 data.

$2.99/month

300 credits/month • 7200 API requests/month

24 API requests = 1 credit

Total Access

Full access to all three APIs. Call any endpoint with a single plan for comprehensive environmental health data across Australia.

$4.99/month

$29.99/year

300 credits/month

Grass/Other: 1 API request = 1 credit. AQ & Woodsmoke: 24 API requests = 1 credit.

Understanding SAL Codes

SAL (Suburb and Locality) codes are geographic identifiers used by the Australian Bureau of Statistics (ABS) to represent suburbs and localities across Australia. Each SAL code corresponds to a specific geographic area, it is similar but not identical to a suburb.

Use the Find Your Location tool below to convert coordinates (latitude, longitude) into the corresponding SAL code for your area of interest.

Also you can learn more about SAL design criteria at the ABS website →

Endpoint Specs

Base URL: https://api-public.airhealthservices.au

Grass Pollen Forecast

GET /api/v1/grass-pollen
https://api-public.airhealthservices.au/api/v1/grass-pollen?sal=<YOUR_SAL_CODE>

Update Schedule: New forecasts are available by 7:30 AM AEST each day.

Response shape: forecast is a 3-item array (today + next 2 days).

{
  "sal": "string",
  "forecast": [
    {
      "date": "YYYY-MM-DD",
      "grass_level": "Low | Moderate | High | Extreme | Unknown"
    }
  ]
}

grass_level values: Low, Moderate, High, Extreme, Unknown.

View Example Response
{
  "sal": "",
  "forecast": [
    {
      "date": "2025-11-10",
      "grass_level": "Low"
    },
    {
      "date": "2025-11-11",
      "grass_level": "Moderate"
    },
    {
      "date": "2025-11-12",
      "grass_level": "Moderate"
    }
  ]
}

Other Allergens Forecast

GET /api/v1/other-allergens
https://api-public.airhealthservices.au/api/v1/other-allergens?sal=<YOUR_SAL_CODE>

Update Schedule: New forecasts are available by 8:30-9:00 AM AEST each day.

Response shape: forecast is a 3-item array (today + next 2 days).

{
  "sal": "string",
  "forecast": [
    {
      "date": "YYYY-MM-DD",
      "overall_level": "Low | Moderate | High | Extreme | Unknown",
      "allergens": [
        {
          "name": "Plantain | Birch | Cypress | Eucalypts | Olive | Plane | Alternaria",
          "level": "string"
        }
      ]
    }
  ]
}

overall_level values: Low, Moderate, High, Extreme, Unknown.

allergens[].name values: Plantain, Birch, Cypress, Eucalypts, Olive, Plane, Alternaria.

allergens[].level: category text from the source forecast model (for example Low/Moderate/High/Extreme).

View Example Response
{
  "sal": "",
  "forecast": [
    {
      "date": "2025-11-10",
      "overall_level": "Extreme",
      "allergens": [
        {"name": "Plantain", "level": "Low"},
        {"name": "Birch", "level": "Extreme"},
        {"name": "Cypress", "level": "High"},
        {"name": "Eucalypts", "level": "Low"},
        {"name": "Olive", "level": "Extreme"},
        {"name": "Plane", "level": "High"},
        {"name": "Alternaria", "level": "Low"}
      ]
    },
    ...
  ]
}

AQ & Woodsmoke Forecast

GET /api/v1/aq-woodsmoke
https://api-public.airhealthservices.au/api/v1/aq-woodsmoke?sal=<YOUR_SAL_CODE>

Update Schedule: Woodsmoke forecasts are updated once daily in the morning. PM2.5 and O3 air quality data are updated 4 times per day.

Response shape: forecast is a 3-item array (today + next 2 days).

{
  "sal": "string",
  "forecast": [
    {
      "date": "YYYY-MM-DD",
      "aq_level": "Very Good | Good | Fair | Poor | Very Poor | Extremely Poor | Unknown",
      "woodsmoke_level": "Low | Moderate | High | Unknown",
      "supporting_data": [
        {
          "name": "PM2.5 | O3",
          "level": "string"
        }
      ]
    }
  ]
}

aq_level values: Very Good, Good, Fair, Poor, Very Poor, Extremely Poor, Unknown.

woodsmoke_level values: Low, Moderate, High, Unknown.

supporting_data[].name values: PM2.5, O3.

supporting_data[].level: category text from the source forecast model.

View Example Response
{
  "sal": "",
  "forecast": [
    {
      "date": "2025-11-10",
      "aq_level": "Very Good",
      "woodsmoke_level": "Low",
      "supporting_data": [
        {"name": "PM2.5", "level": "Very Good"},
        {"name": "O3", "level": "Very Good"}
      ]
    },
    ...
  ]
}

Authentication

All API requests require authentication using your API Key. Include your key in the Authorization header of each request.

Header Format:

Authorization: Api-Key YOUR_API_KEY

Error Handling

Code Description
200 Success
400 Bad Request
401 Unauthorized
403 Forbidden (Credits exceeded or invalid permissions)
404 Data or location not found for provided input
429 Too Many Requests
500 Server Error
503 Service Unavailable

Credits & Limits

Each plan includes monthly credits. Credits reset at 00:00:01 UTC on the 1st of each month and are tracked in UTC. Grass/Other Allergens: 1 API request = 1 credit. AQ & Woodsmoke: 24 API requests = 1 credit. Additional per-second limits may apply.

Code Examples

Choose your preferred language or format to get started quickly.

curl -X GET "https://api-public.airhealthservices.au/api/v1/grass-pollen?sal=20601" \
     -H "Authorization: Api-Key YOUR_API_KEY"

Find Your Location (SAL Code)

Our API uses SAL (Statistical Area Level) codes to identify locations. Use this tool to find the SAL code for a specific coordinate.
Note: This request requires your API Key but does not count towards your monthly credits.

Tip: To find coordinates of a location, use Google Maps. Click on any location or right-click to see the coordinates.

Request: GET /api/v1/find-location?coordinate=-37.839,144.882

Response shape:

{
  "sal_code": "string",
  "sal_name": "string"
}

Result

Enter key and coordinates...

Try it Live

Response

Click "Call endpoint" to test...

FAQ

If I already subscribe to an AirHealth app (e.g. MelbournePollen), do I still need an API subscription?

We would genuinely love to match these together, but due to current technical limitations, app subscriptions and API subscriptions are billed separately for now.

If I cancel my subscription, when does cancellation take effect?

Cancellation takes effect at the end of your current billing cycle.

What happens to my API token if I cancel?

Your API token remains the same for the rest of your current billing period.

Can I change plans during the current billing period?

Mid-cycle plan swapping is not supported. To change plans, either create a new account or wait until your current subscription period ends, then purchase the new plan.

Are billing cycle dates and quota reset dates the same?

No. Payment cycle dates and quota reset limits are separate.

If I cancel, do I still have access before the period ends?

Yes. Once canceled, you still have access to your current plan (up to your quota limits) until the end of the billing cycle.