---
title: "Calculates LoRa duty cycle budget for EU868, US915, AS923, and AU915 regulatory regions. Computes maximum messages per hour, minimum transmission interval, and effective data rate under regional duty cycle constraints. EU868 and AS923 enforce 1% duty cycle (ETSI); US915 has no duty cycle limit but a 400 ms dwell time per channel (FCC); AU915 has no duty cycle limit. Flags dwell-time-limited regions where packet airtime must not exceed the dwell time. Chain from lora_airtime to get airtime_ms input for end-to-end regulatory compliance analysis."
method: POST
path: "/api/duty_cycle_budget"
tags: ["mesh"]
---

# Calculates LoRa duty cycle budget for EU868, US915, AS923, and AU915 regulatory regions. Computes maximum messages per hour, minimum transmission interval, and effective data rate under regional duty cycle constraints. EU868 and AS923 enforce 1% duty cycle (ETSI); US915 has no duty cycle limit but a 400 ms dwell time per channel (FCC); AU915 has no duty cycle limit. Flags dwell-time-limited regions where packet airtime must not exceed the dwell time. Chain from lora_airtime to get airtime_ms input for end-to-end regulatory compliance analysis.

`POST /api/duty_cycle_budget`

## Request

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

## Request body

- object
  - `airtime_ms` number, required: Packet time-on-air in milliseconds. Obtain from the lora_airtime tool.
  - `region` 'EU868' | 'US915' | 'AS923' | 'AU915': LoRa regulatory region. EU868: 1% duty cycle (ETSI). US915: no duty cycle but 400 ms dwell time (FCC). AS923: 1% duty cycle (varies by country). AU915: no duty cycle limit.

## Response `200`

Computed result for duty_cycle_budget

- object
  - `result` object, required
    - `max_messages_per_hour` number, required: Maximum messages per hour allowed under the regional duty cycle constraint.
    - `min_interval_s` number, required: Minimum interval between transmissions in seconds to comply with duty cycle regulation.
    - `duty_cycle_pct` number, required: Applicable duty cycle limit as a percentage. 100 means no duty cycle restriction.
    - `dwell_time_limited` boolean, required: True if the region enforces a per-transmission dwell time limit (e.g., US915 400 ms).
    - `effective_data_rate_bps` number, required: Effective throughput in bits per second considering duty cycle. For duty-cycle-limited regions, this reflects actual achievable throughput.
  - `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)
