Airthings Webhooks API

The Webhooks API from Airthings — 2 operation(s) for webhooks.

Operations 4

GET /v1/webhooks Webhook list #
POST /v1/webhooks Add Webhook #
DELETE /v1/webhooks/{hookId} Delete Webhook #
PATCH /v1/webhooks/{hookId} Edit Webhook #

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/airthings:airthings-webhooks-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

airthings-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Airthings Webhooks API
  version: v1
  contact:
    name: Airthings Support
    email: support@airthings.com
servers:
- url: https://ext-api.airthings.com
security:
- AirthingsAccounts: []
tags:
- name: Webhooks
paths:
  /v1/webhooks:
    parameters:
    - name: organizationId
      in: query
      schema:
        type: string
        format: uuid
      description: Use `accountId`
      required: false
      deprecated: true
    - name: userGroupId
      in: query
      schema:
        type: string
        format: uuid
      description: Use `accountId`
      required: false
      deprecated: true
    - name: accountId
      in: query
      schema:
        type: string
        format: uuid
      required: true
      deprecated: false
    get:
      tags:
      - Webhooks
      summary: Webhook list
      description: Get all added webhooks
      parameters: []
      responses:
        '200':
          description: List of webhooks
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetWebhooksResponse-enriched'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      deprecated: false
      security:
      - AirthingsAccounts:
        - read:device
        - write:device
      operationId: getV1Webhooks
      x-operation-id-source: derived
    post:
      tags:
      - Webhooks
      summary: Add Webhook
      description: Add a new webhook
      parameters: []
      requestBody:
        description: Add webhook request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddHookRequest-enriched'
        required: true
      responses:
        '200':
          description: The webhook
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HookResponse-enriched'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      deprecated: false
      security:
      - AirthingsAccounts:
        - read:device
        - write:device
      operationId: postV1Webhooks
      x-operation-id-source: derived
  /v1/webhooks/{hookId}:
    parameters:
    - name: organizationId
      in: query
      schema:
        type: string
        format: uuid
      description: Use `accountId`
      required: false
      deprecated: true
    - name: userGroupId
      in: query
      schema:
        type: string
        format: uuid
      description: Use `accountId`
      required: false
      deprecated: true
    - name: accountId
      in: query
      schema:
        type: string
        format: uuid
      required: true
      deprecated: false
    - name: hookId
      in: path
      schema:
        type: string
        format: uuid
      required: true
      deprecated: false
    delete:
      tags:
      - Webhooks
      summary: Delete Webhook
      description: Delete a webhook
      parameters: []
      responses:
        '204':
          description: Webhook successfully deleted
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      deprecated: false
      security:
      - AirthingsAccounts:
        - write:device
      operationId: deleteV1WebhooksByHookId
      x-operation-id-source: derived
    patch:
      tags:
      - Webhooks
      summary: Edit Webhook
      description: 'Edit a webhook in an organization. Only locations is supported at this time.

        Value type of this endpoint is currently a list of location IDs that you wish to

        perform the operation on.'
      parameters: []
      requestBody:
        description: Edit webhook request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchWebhookRequest'
        required: true
      responses:
        '200':
          description: The webhook
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HookResponse-enriched'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      deprecated: false
      security:
      - AirthingsAccounts:
        - write:device
      operationId: patchV1WebhooksByHookId
      x-operation-id-source: derived
components:
  schemas:
    GetWebhooksResponse-enriched:
      type: object
      properties:
        webhooks:
          items:
            $ref: '#/components/schemas/HookResponse-enriched'
          description: List of webhooks
          type: array
      required:
      - webhooks
    DeviceType:
      type: string
      enum:
      - WAVE
      - WAVE_GEN2
      - WAVE_MINI
      - WAVE_PLUS
      - WAVE_CO2
      - VIEW_PLUS
      - VIEW_PLUS_BUSINESS
      - VIEW_POLLUTION
      - VIEW_RADON
      - VIEW_CO2
      - SPACE_CO2_MINI
      - SPACE_RADON
      - WAVE_NANO
      - WAVE_ENHANCE
      - HUB
      - HOME
      - HOME_COLIBRI
      - PRO
      - BREEZOMETER_WEATHER
      - BACNET
      - AP_1
      - RAVEN_RADON
      - UNKNOWN
    GetDeviceDetailedResponse:
      type: object
      properties:
        deviceType:
          $ref: '#/components/schemas/DeviceType'
        id:
          type: string
          maxLength: 10
          minLength: 10
        location:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/LocationSimpleResponse'
        productName:
          type: string
        segment:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/SegmentSimpleResponse'
        sensors:
          items:
            type: string
            enum:
            - radonShortTermAvg
            - radonLongTermAvg
            - hctsbk
            - hctsrn222l
            - hctsrn222h
            - hctssa
            - hctspo21xl
            - hctspo21xh
            - hctscomparator
            - hctsprocessed
            - temp
            - outdoorTemp
            - humidity
            - outdoorHumidity
            - co2
            - voc
            - pressure
            - outdoorPressure
            - pressureDifference
            - light
            - lux
            - batteryPercentage
            - batteryVoltage
            - orientation
            - pm1
            - pm25
            - pm10
            - mold
            - staleAir
            - transmissionEfficiency
            - virusSurvivalRate
            - virusRisk
            - windSpeed
            - windDirection
            - windGust
            - dewPoint
            - cloudCover
            - visibility
            - precipitation_probability
            - total_precipitation
            - outdoorWeather
            - hourlyRadonStandardDeviation
            - hourlyRadon
            - historicVentilationConfidence
            - daytimeBaseline
            - daytimePeak
            - nightBaseline
            - historicVentilation
            - ventilationRunningConfidence
            - occupantsUpper
            - occupantsLower
            - presence
            - occupants
            - relativeOccupants
            - ventilationAmount
            - historicVentilationRunning
            - ventilationRunning
            - ventilationAmountRelative
            - airExchangeRateUpper
            - airExchangeRateLower
            - airExchangeRate
            - sla
            - bacnet
          type: array
      required:
      - deviceType
      - id
      - productName
      - sensors
    PatchWebhookAction:
      type: string
      enum:
      - ADD
      - REMOVE
    AddHookRequest-enriched:
      type: object
      properties:
        active:
          type: boolean
        devices:
          items:
            type: string
            maxLength: 10
            minLength: 10
          deprecated: true
          description: List of device serial numbers to subscribe to (deprecated, use locations instead)
          type: array
        eventTypes:
          oneOf:
          - type: 'null'
          - items:
              type: string
            type: array
        headers:
          oneOf:
          - type: 'null'
          - additionalProperties:
              type: string
            type: object
        labels:
          oneOf:
          - type: 'null'
          - additionalProperties:
              type: string
            type: object
        locations:
          items:
            type: string
            format: uuid
          description: List of location IDs to subscribe to (needs to be empty if subscribedToAll is set true)
          type: array
        name:
          type: string
        sensorUnits:
          $ref: '#/components/schemas/HookSensorUnits'
        subscribedToAll:
          type: boolean
          description: Subscribe to all devices in all locations, including devices and locations that are added in the future
        url:
          type: string
      required:
      - name
      - url
    Code:
      type: string
      enum:
      - invalid_request
      - invalid_request_clients_limit_exceeded
      - access_denied
      - valid_subscription_required
      - device_not_supported
      - invalid_parameter
      - not_found
      - internal_server_error
      - unable_to_register_device
      - location_not_found
      - no_access_to_resource
      - missing_location_properties_for_report
      - radio_region_is_not_supported
      - max_number_of_devices_reached
      - unable_to_create_location
      - unable_to_update_space
    HookSensorUnits:
      type: object
      format: string
      properties:
        radonUnit:
          type: string
          enum:
          - pci
          - bq
        tempUnit:
          type: string
          enum:
          - c
          - f
        pressureUnit:
          type: string
          enum:
          - hpa
          - inhg
        vocUnit:
          type: string
          enum:
          - ppb
          - mgpc
    PatchLocation:
      type: object
      properties:
        op:
          $ref: '#/components/schemas/PatchWebhookAction'
        path:
          $ref: '#/components/schemas/PatchWebhookPath'
        value:
          oneOf:
          - type: 'null'
          - items:
              type: string
              format: uuid
            type: array
      required:
      - op
      - path
    LocationResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
        labels:
          additionalProperties:
            type: string
          type: object
        name:
          type: string
      required:
      - id
      - labels
      - name
    ErrorResponse:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/Code'
        error_code:
          oneOf:
          - type: 'null'
          - type: number
            format: int32
        error_description:
          type: string
      required:
      - error
      - error_description
    HookResponse-enriched:
      type: object
      properties:
        active:
          type: boolean
        devices:
          items:
            $ref: '#/components/schemas/GetDeviceDetailedResponse'
          deprecated: true
          description: List of devices the webhook is subscribed to (deprecated, use locations instead)
          type: array
        eventTypes:
          items:
            type: string
          type: array
        headers:
          additionalProperties:
            type: string
          type: object
        id:
          type: string
          format: uuid
        labels:
          additionalProperties:
            type: string
          type: object
        locations:
          items:
            $ref: '#/components/schemas/LocationResponse'
          description: List of locations the webhook is subscribed to
          type: array
        mostRecentEvent:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/HookEvent'
        name:
          type: string
        sensorUnits:
          $ref: '#/components/schemas/HookSensorUnits'
        subscribedToAll:
          type: boolean
          description: Webhook subscribes to all devices in all locations, including devices and locations that are added in the future
        url:
          type: string
      required:
      - active
      - devices
      - eventTypes
      - headers
      - id
      - labels
      - locations
      - name
      - sensorUnits
      - subscribedToAll
      - url
    PatchWebhookPath:
      type: string
      enum:
      - locations
    LocationSimpleResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
      required:
      - id
      - name
    PatchWebhookRequest:
      type: object
      properties:
        operations:
          items:
            $ref: '#/components/schemas/PatchLocation'
          type: array
      required:
      - operations
    HookEvent:
      type: object
      properties:
        completedAt:
          oneOf:
          - type: 'null'
          - type: string
            format: date-time
        correlationId:
          type: string
        createdAt:
          oneOf:
          - type: 'null'
          - type: string
            format: date-time
        hookId:
          type: string
          format: uuid
        statusCode:
          oneOf:
          - type: 'null'
          - type: number
            format: int32
        updatedAt:
          oneOf:
          - type: 'null'
          - type: string
            format: date-time
        url:
          type: string
      required:
      - correlationId
      - hookId
      - url
    SegmentSimpleResponse:
      type: object
      properties:
        active:
          type: boolean
        id:
          type: string
          format: uuid
        name:
          type: string
        spaceId:
          oneOf:
          - type: 'null'
          - type: string
            format: uuid
        started:
          type: string
          format: date-time
      required:
      - active
      - id
      - name
      - started
  securitySchemes:
    AirthingsAccounts:
      flows:
        authorizationCode:
          authorizationUrl: https://accounts.airthings.com/authorize
          tokenUrl: https://accounts-api.airthings.com/v1/token
          scopes:
            read:device: Allowing a user to read data from devices in their account
            write:device: Allowing a user to manage devices within their account
        clientCredentials:
          tokenUrl: https://accounts-api.airthings.com/v1/token
          scopes:
            read:device: Allowing a user to read data from devices in their account
            write:device: Allowing a user to manage devices within their account
      type: oauth2
x-provenance:
  method: searched
  source: https://developer-business.airthings.com/reference
  harvested: '2026-10-28'
  tool: harvest-readme-openapi.py
  note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
  assembled_from:
  - https://developer-business.airthings.com/reference/deletev1webhookshookid.md
  - https://developer-business.airthings.com/reference/getv1accounts.md
  - https://developer-business.airthings.com/reference/getv1devices.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumber.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumberbattery.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumberhourlyradonsamples.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumberlatestbattery.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumberlatestsamples.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumbermoldsamples.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumberoccupancysamples.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumbersamples.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumberthresholdbreaches.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumberventilationsamples.md
  - https://developer-business.airthings.com/reference/getv1devicesserialnumbervirusrisksamples.md
  - https://developer-business.airthings.com/reference/getv1locations.md
  - https://developer-business.airthings.com/reference/getv1locationslocationid.md
  - https://developer-business.airthings.com/reference/getv1locationslocationidlatestsamples.md
  - https://developer-business.airthings.com/reference/getv1organizations.md
  - https://developer-business.airthings.com/reference/getv1segments.md
  - https://developer-business.airthings.com/reference/getv1segmentssegmentid.md
  - https://developer-business.airthings.com/reference/getv1segmentssegmentidhourlyradonsamples.md
  - https://developer-business.airthings.com/reference/getv1segmentssegmentidmoldsamples.md
  - https://developer-business.airthings.com/reference/getv1segmentssegmentidoccupancysamples.md
  - https://developer-business.airthings.com/reference/getv1segmentssegmentidsamples.md
  - https://developer-business.airthings.com/reference/getv1segmentssegmentidventilationsamples.md
  - https://developer-business.airthings.com/reference/getv1segmentssegmentidvirusrisksamples.md
  - https://developer-business.airthings.com/reference/getv1thresholds.md
  - https://developer-business.airthings.com/reference/getv1webhooks.md
  - https://developer-business.airthings.com/reference/patch_v1-spaces.md
  - https://developer-business.airthings.com/reference/patchv1devices.md
  - https://developer-business.airthings.com/reference/patchv1deviceslabels.md
  - https://developer-business.airthings.com/reference/patchv1webhookshookid.md
  - https://developer-business.airthings.com/reference/postv1locations.md
  - https://developer-business.airthings.com/reference/postv1locationslocationiddevices.md
  - https://developer-business.airthings.com/reference/postv1webhooks.md
  merge:
    pages: 35
    deduped: 161
    conflicts_kept_first: 0