---
title: "Estimates Meshtastic or LoRa mesh channel utilization percentage based on node count, message rate, and per-packet airtime. Determines how much of the shared radio channel is occupied and computes the maximum number of nodes before exceeding a configurable duty cycle limit (default 10%). Returns utilization percentage, headroom, and total packet count. Chain from lora_airtime to get airtime_ms input. Essential for Meshtastic mesh deployment planning to avoid channel congestion and packet collisions."
method: POST
path: "/api/channel_utilization"
tags: ["mesh"]
---

# Estimates Meshtastic or LoRa mesh channel utilization percentage based on node count, message rate, and per-packet airtime. Determines how much of the shared radio channel is occupied and computes the maximum number of nodes before exceeding a configurable duty cycle limit (default 10%). Returns utilization percentage, headroom, and total packet count. Chain from lora_airtime to get airtime_ms input. Essential for Meshtastic mesh deployment planning to avoid channel congestion and packet collisions.

`POST /api/channel_utilization`

## Request

- Base URL: `https://calc.engineer`
- URL: `https://calc.engineer/api/channel_utilization`
- Auth: none declared

## Request body

- object
  - `nodes` number, required: Number of active nodes in the mesh network.
  - `messages_per_hour_per_node` number: Average messages transmitted per hour per node. Includes position beacons and user messages.
  - `airtime_ms` number, required: Time-on-air per packet in milliseconds. Obtain from lora_airtime tool.
  - `max_duty_cycle_pct` number: Maximum acceptable channel utilization percentage. Default 10% is a common Meshtastic guideline.

## Response `200`

Computed result for channel_utilization

- object
  - `result` object, required
    - `utilization_pct` number, required: Current channel utilization as a percentage of total airtime.
    - `max_nodes_at_limit` number, required: Maximum number of nodes before exceeding the duty cycle limit.
    - `headroom_pct` number, required: Remaining headroom before hitting the duty cycle limit (can be negative if over limit).
    - `packets_per_hour` number, required: Total packets per hour across all nodes.
  - `tool` string, required
  - `version` string, required
  - `computed_at` string, date-time, required
  - `chain` object, required
    - `feeds` unknown[]
      - unknown
    - `accepts_from` unknown[]
      - unknown

## Other responses

- `400`: Validation error or invalid JSON
- `404`: Tool not found

---

[API](https://skmtc.dev/calc/apis/calc-engineer-api.md) · [All operations](https://skmtc.dev/calc/apis/calc-engineer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/calc/apis/calc-engineer-api/revisions/8830480ec488?raw)
