canonical: https://jentic.com/apis/adafruit.com/adafruit-adafruit-io

# Adafruit IO API

Jentic publishes the only available OpenAPI specification for Adafruit IO API, keeping it validated and agent-ready. Adafruit IO is a cloud service for connected devices and the Internet of Things, exposing endpoints for feeds, groups, batched data points, and the authenticated user. The spec covers 18 operations under three tags - feeds, groups, and user - with the API key passed in the X-AIO-Key header. Feeds support last-value reads and batch ingest, which suit microcontroller-based projects that buffer telemetry.

## For AI agents

Read and write sensor telemetry, manage feeds and groups, and look up account data on Adafruit IO.

## Scope

Does not handle device firmware updates, OTA management, or dashboard layout - use for Adafruit IO feeds, groups, and feed data only.

## Capabilities

- Create and list feeds for sensor telemetry via /{username}/feeds
- Read the latest data point from a feed at /{username}/feeds/{feed_key}/data/last
- Submit batch sensor readings to a feed via /{username}/feeds/{feed_key}/data/batch
- Pull historical feed data through /{username}/feeds/{feed_key}/data and /{username}/feeds/{feed_key}/data/{id}
- Organise related feeds into groups using /{username}/groups and /{username}/groups/{group_key}
- Look up the authenticated user via /{username}/user

## Use cases

### Microcontroller telemetry ingest

Hobbyist and educational IoT projects use Adafruit IO to log sensor data from a Feather, ESP32, or Raspberry Pi. The microcontroller (or an agent on its behalf) creates feeds via /{username}/feeds and posts readings in batches to /{username}/feeds/{feed_key}/data/batch. Batch ingest reduces the number of TLS handshakes a memory-constrained device has to perform.

Example prompt: POST a batch of 30 temperature readings to /{username}/feeds/temp/data/batch and confirm the count in the response

### Live dashboard polling

Smart-home and weather-station dashboards poll Adafruit IO for the latest values. An agent or front-end calls /{username}/feeds/{feed_key}/data/last for each feed in the dashboard and renders the result. Grouping related feeds via /{username}/groups simplifies the read pattern to a single group key per panel.

Example prompt: Fetch the last value of each feed in group 'weather-station' and render a dashboard summary

### Historical analysis

Researchers and tinkerers analyse historical sensor data - for example averaging temperature over a week or charting humidity trends. An agent can pull /{username}/feeds/{feed_key}/data with a date range, aggregate the values, and feed them into a notebook or analytics tool. This avoids exporting CSVs by hand from the Adafruit IO UI.

Example prompt: GET /{username}/feeds/temp/data with start_time and end_time and compute the daily average

### AI agent integration

Makers building agent assistants for their lab or smart home wire Adafruit IO into Jentic alongside notification APIs. The X-AIO-Key lives in your Jentic One instance and the agent searches by intent - e.g. 'read the latest soil moisture' - without juggling raw keys in the conversation context.

Example prompt: Search Jentic for 'read latest Adafruit IO feed value', load the schema, and execute it for feed_key 'soil-moisture'

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /{username}/feeds | List feeds |
| POST | /{username}/feeds | Create a feed |
| POST | /{username}/feeds/{feed_key}/data | Add a data point |
| POST | /{username}/feeds/{feed_key}/data/batch | Batch add data points |
| GET | /{username}/feeds/{feed_key}/data/last | Get the latest data point |
| GET | /{username}/feeds/{feed_key}/data | Get historical feed data |
| GET | /{username}/groups | List groups |
| GET | /{username}/user | Get authenticated user |

## Key resources

- **Feeds** — Streams of telemetry - create, list, read, and write data
- **Groups** — Logical groupings of related feeds
- **User** — Authenticated user lookup

## Why Jentic

- **Setup:** Wiring the Adafruit IO API by hand means attaching the X-AIO-Key header on every call and threading the username and feed key through feed and group endpoints. Through Jentic you install once, import the Adafruit IO API from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** Adafruit IO puts the feed key in the URL path (/{username}/feeds/{feed_key}/...), so a rule can pin your agent to one feed: it can push and read data for that feed and nothing else. You choose the operations it may call, so creating feeds or reading groups is not included unless you add it.
- **Credential handling:** Your Adafruit IO X-AIO-Key is stored once, encrypted, by your own Jentic One instance and injected as a header at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'read latest Adafruit IO feed' or 'send a batch of sensor readings', and Jentic returns the matching operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Particle API** — End-to-end IoT platform with hardware, cloud, and OTA firmware updates.
- **Blynk API** — Mobile-first IoT platform with drag-and-drop dashboard builder.
- **Adafruit IO REST API** — Wider 71-endpoint Adafruit IO REST surface including dashboards, blocks, and webhooks.

## FAQ

### Why is there no official OpenAPI spec for Adafruit IO API?

Adafruit IO does not publish an OpenAPI specification in this trimmed shape. Jentic generates and maintains this spec so that AI agents and developers can call Adafruit IO API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Adafruit IO API use?

Adafruit IO uses an API key in the X-AIO-Key header, generated from the user's Adafruit IO profile page. Through Jentic, the X-AIO-Key value is stored encrypted in your Jentic One instance and the agent receives a scoped execution handle, so raw keys never appear in prompts.

### Can I send batch sensor readings with the Adafruit IO API?

Yes. POST to /{username}/feeds/{feed_key}/data/batch with an array of data points to ingest several readings in a single request. This reduces the number of TLS handshakes a memory-constrained microcontroller has to perform compared with single-point POSTs.

### What are the rate limits for the Adafruit IO API?

Adafruit IO enforces a per-minute data throughput limit that depends on the account tier (free vs IO Plus). The OpenAPI spec does not declare exact numbers - see Adafruit's IO docs for the current ceiling, and use batch ingest to stay within budget.

### How do I read the latest sensor value through Jentic?

Run pip install jentic, search Jentic for 'read latest Adafruit IO feed', load the schema for GET /{username}/feeds/{feed_key}/data/last, and execute it with the username and feed_key. Jentic injects the X-AIO-Key from the vault.

### Does the Adafruit IO API support grouping multiple feeds?

Yes. /{username}/groups lets you create and list groups, and a feed can be associated with a group so that related feeds (e.g. all sensors on a weather station) can be queried as a single unit.

### Can I limit what my agent is allowed to do with the Adafruit IO API?

Yes. Because Jentic One is self-hosted, you write the rules that decide which Adafruit IO operations and credentials your agent may use. Since the feed key sits in the URL path (/{username}/feeds/{feed_key}/...), you can pin the agent to a single feed so it only pushes and reads that feed's data and nothing else. You also choose which operations are exposed, so creating feeds or reading groups stays off unless you add it.
