Bitfinder Air Data API

Time-series indoor air quality readings

Operations 4

GET /users/self/devices/{device_type}/{device_id}/air-data/latest Get the latest air-data reading #
GET /users/self/devices/{device_type}/{device_id}/air-data/raw Get raw (per-second) air-data #
GET /users/self/devices/{device_type}/{device_id}/air-data/5-min-avg Get 5-minute-average air-data #
GET /users/self/devices/{device_type}/{device_id}/air-data/15-min-avg Get 15-minute-average air-data #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/bitfinder-air-data-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

bitfinder-air-data-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Awair Home & OAuth Developer Air Data API
  version: v1
  description: The Awair Home & OAuth Developer API (operated by Bitfinder, Inc., d/b/a Awair) gives developers, partners, and hobbyists programmatic access to Awair indoor air quality (IAQ) devices on behalf of Awair users. It exposes the authenticated user profile, the user's registered devices, and time-series air-data readings (Awair Score plus temperature, humidity, CO2, VOC, and PM2.5) at latest, raw, 5-minute-average, and 15-minute-average granularity. Requests are authorized with an OAuth 2.0 access token (or a Developer Console access token) presented as an HTTP Bearer token.
  contact:
    name: Awair Developer Support
    email: developer@getawair.com
    url: https://docs.developer.getawair.com/
  termsOfService: https://getawair.com/pages/legal
  x-provenance:
    generated: '2026-07-18'
    method: generated
    source: https://docs.developer.getawair.com/ ; https://support.getawair.com/hc/en-us/articles/360049982333-Using-Awair-Developer-APIs ; https://python-awair.readthedocs.io/en/latest/python_awair.html
    note: Faithful capture of the publicly documented Awair cloud API surface. Awair does not publish an OpenAPI document; endpoints, methods, query parameters, and response fields are transcribed from the official developer docs and support articles. Response schemas are modeled from documented fields and kept minimal (no fabricated properties).
servers:
- url: https://developer-apis.awair.is/v1
  description: Awair cloud developer API (production)
security:
- bearerAuth: []
- oauth2: []
tags:
- name: Air Data
  description: Time-series indoor air quality readings
paths:
  /users/self/devices/{device_type}/{device_id}/air-data/latest:
    get:
      operationId: getLatestAirData
      summary: Get the latest air-data reading
      description: Returns the most recent air-data sample for the device.
      tags:
      - Air Data
      parameters:
      - $ref: '#/components/parameters/DeviceType'
      - $ref: '#/components/parameters/DeviceId'
      - $ref: '#/components/parameters/Fahrenheit'
      responses:
        '200':
          description: The latest air-data reading.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirDataResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/QuotaExceeded'
  /users/self/devices/{device_type}/{device_id}/air-data/raw:
    get:
      operationId: getRawAirData
      summary: Get raw (per-second) air-data
      description: Returns raw air-data samples. Maximum queryable window is 1 hour; up to 360 records per request.
      tags:
      - Air Data
      parameters:
      - $ref: '#/components/parameters/DeviceType'
      - $ref: '#/components/parameters/DeviceId'
      - $ref: '#/components/parameters/From'
      - $ref: '#/components/parameters/To'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Desc'
      - $ref: '#/components/parameters/Fahrenheit'
      responses:
        '200':
          description: Raw air-data readings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirDataResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/QuotaExceeded'
  /users/self/devices/{device_type}/{device_id}/air-data/5-min-avg:
    get:
      operationId: get5MinAvgAirData
      summary: Get 5-minute-average air-data
      description: Returns air-data averaged over 5-minute buckets. Maximum queryable window is 24 hours.
      tags:
      - Air Data
      parameters:
      - $ref: '#/components/parameters/DeviceType'
      - $ref: '#/components/parameters/DeviceId'
      - $ref: '#/components/parameters/From'
      - $ref: '#/components/parameters/To'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Desc'
      - $ref: '#/components/parameters/Fahrenheit'
      responses:
        '200':
          description: 5-minute-average air-data readings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirDataResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/QuotaExceeded'
  /users/self/devices/{device_type}/{device_id}/air-data/15-min-avg:
    get:
      operationId: get15MinAvgAirData
      summary: Get 15-minute-average air-data
      description: Returns air-data averaged over 15-minute buckets. Maximum queryable window is 7 days.
      tags:
      - Air Data
      parameters:
      - $ref: '#/components/parameters/DeviceType'
      - $ref: '#/components/parameters/DeviceId'
      - $ref: '#/components/parameters/From'
      - $ref: '#/components/parameters/To'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Desc'
      - $ref: '#/components/parameters/Fahrenheit'
      responses:
        '200':
          description: 15-minute-average air-data readings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirDataResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/QuotaExceeded'
components:
  responses:
    Unauthorized:
      description: Missing or invalid access token.
    Forbidden:
      description: The token is not permitted to access this device or resource.
    NotFound:
      description: Device or resource not found.
    QuotaExceeded:
      description: Per-device daily quota for this endpoint/tier has been exceeded.
  schemas:
    SensorReading:
      type: object
      properties:
        comp:
          type: string
          description: Component name (temp, humid, co2, voc, pm25).
        value:
          type: number
    AirDataResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/AirDataPoint'
    AirDataPoint:
      type: object
      description: A single air-data sample.
      properties:
        timestamp:
          type: string
          format: date-time
        score:
          type: number
          description: Awair Score (0-100).
        sensors:
          type: array
          items:
            $ref: '#/components/schemas/SensorReading'
        indices:
          type: array
          items:
            $ref: '#/components/schemas/SensorReading'
  parameters:
    DeviceType:
      name: device_type
      in: path
      required: true
      description: Device model type (e.g. awair-element, awair-omni, awair-r2).
      schema:
        type: string
    Limit:
      name: limit
      in: query
      required: false
      description: Maximum number of records to return (raw max 360).
      schema:
        type: integer
    Desc:
      name: desc
      in: query
      required: false
      description: Sort descending by timestamp (default true).
      schema:
        type: boolean
        default: true
    DeviceId:
      name: device_id
      in: path
      required: true
      description: Numeric device identifier.
      schema:
        type: integer
    Fahrenheit:
      name: fahrenheit
      in: query
      required: false
      description: Return temperature in Fahrenheit instead of Celsius.
      schema:
        type: boolean
        default: false
    To:
      name: to
      in: query
      required: false
      description: End of the time window (ISO 8601).
      schema:
        type: string
        format: date-time
    From:
      name: from
      in: query
      required: false
      description: Start of the time window (ISO 8601).
      schema:
        type: string
        format: date-time
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Awair Developer Console access token or OAuth 2.0 access token.
    oauth2:
      type: oauth2
      description: OAuth 2.0 authorization-code flow for third-party access to Awair user data.
      flows:
        authorizationCode:
          authorizationUrl: https://oauth2.awair.is/v2/authorize
          tokenUrl: https://oauth2.awair.is/v2/token
          scopes: {}