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

# Adafruit IO REST API

Adafruit IO is the cloud service paired with Adafruit's maker hardware, used to log sensor data, build dashboards, and trigger automations from connected devices. This REST API exposes feeds, dashboards, blocks, groups, triggers, tokens, ACL, throttle status, and webhook endpoints across 71 operations. Authentication uses the X-AIO-Key header (or query parameter) and an optional X-AIO-Signature for signed requests. The /{username}/groups/{group_key}/feeds/{feed_key}/data/batch path supports batched ingest scoped to a group, and the /{username}/triggers resource lets devices fire automations based on feed values.

## For AI agents

Manage feeds, dashboards, triggers, tokens, ACLs, and webhooks across the full Adafruit IO REST surface for IoT projects.

## Scope

Does not handle device firmware OTA, cellular connectivity, or paid IoT SIMs - use for Adafruit IO feeds, dashboards, triggers, tokens, ACL, and webhooks only.

## Capabilities

- Create feeds and ingest data points individually or in batches under /{username}/feeds and group-scoped /{username}/groups/{group_key}/feeds/{feed_key}/data/batch
- Build IoT dashboards and add blocks via /{username}/dashboards and /{username}/dashboards/{dashboard_id}/blocks
- Create triggers that fire automations on feed values via /{username}/triggers
- Manage device tokens through /{username}/tokens and /{username}/tokens/{id}
- Configure resource-level access control via /{username}/{type}/{type_id}/acl
- Receive device telemetry through webhook endpoints at /webhooks/feed/:token and /webhooks/feed/:token/raw
- Inspect throttle status with /{username}/throttle and recent activity via /{username}/activities

## Use cases

### Trigger-based automations

Adafruit IO triggers fire when feed data crosses a threshold or matches a value, useful for hobbyist alerting (e.g. notify when humidity drops below 30%). An agent can POST to /{username}/triggers with the feed and condition, and pair the trigger output with an external notification API. This avoids polling feed values from a separate service.

Example prompt: POST a trigger to /{username}/triggers when the temp feed exceeds 30 and connect it to a notification webhook

### Group-level batch ingest

Devices that publish multiple feeds (e.g. a weather station publishing temperature, humidity, and pressure together) can post a group-scoped batch via /{username}/groups/{group_key}/feeds/{feed_key}/data/batch. This lets the group's feeds stay in lockstep, which simplifies later analysis and dashboard rendering.

Example prompt: Post a 10-minute window of telemetry to /{username}/groups/weather/feeds/temp/data/batch and then to humidity

### Token and ACL management for fleets

Operators of small device fleets issue per-device tokens and apply ACL rules so each device only reads or writes its own feed. /{username}/tokens manages token creation and rotation, while /{username}/{type}/{type_id}/acl applies access rules. An agent can rotate a compromised token and update ACL entries in a single workflow.

Example prompt: List tokens at /{username}/tokens, revoke the compromised id, create a new token, and update the ACL on the affected feed

### Webhook telemetry capture

Some devices push data to Adafruit IO's webhook endpoints (e.g. /webhooks/feed/:token) rather than calling REST endpoints directly. An agent acting as the device's gateway can sign and forward payloads, and the /webhooks/feed/:token/raw variant handles non-JSON sensor payloads. This is helpful for legacy hardware or third-party trackers.

Example prompt: Forward a raw sensor payload to /webhooks/feed/<token>/raw and confirm the response status

### AI agent integration

Makers building agent assistants for their lab or smart home expose Adafruit IO REST through Jentic alongside notification APIs. The X-AIO-Key (and signature, when used) lives in your Jentic One instance, so the agent searches by intent - 'create a trigger', 'add a dashboard block' - without seeing raw keys.

Example prompt: Search Jentic for 'create an Adafruit IO trigger when temp exceeds 30', load the schema, and execute it

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /{username}/feeds/{feed_key}/data/batch | Batch ingest data points |
| POST | /{username}/groups/{group_key}/feeds/{feed_key}/data/batch | Group-scoped batch ingest |
| POST | /{username}/triggers | Create a trigger |
| POST | /{username}/dashboards | Create a dashboard |
| POST | /{username}/dashboards/{dashboard_id}/blocks | Add a dashboard block |
| POST | /{username}/tokens | Create a device token |
| GET | /{username}/throttle | Read throttle status |
| GET | /{username}/feeds/{feed_key}/data/chart | Get chart-aggregated data |

## Key resources

- **Feeds** — Telemetry streams with batch, chart, retain, and positional accessors
- **Groups** — Logical groupings of feeds with their own batch ingest path
- **Dashboards** — Visual layouts of feeds with blocks
- **Triggers** — Threshold and event-driven automations on feed values
- **Tokens** — Per-device API tokens
- **ACL** — Resource-level access control rules
- **Webhooks** — Inbound webhook endpoints for device telemetry
- **Throttle** — Per-account throughput status

## Why Jentic

- **Setup:** Wiring the Adafruit IO REST API by hand means attaching the X-AIO-Key and X-AIO-Signature headers on every call and threading the username, feed key, and dashboard id through feeds, triggers, tokens, and webhooks. Through Jentic you install once, import the Adafruit IO REST API from the API Directory, store the key and signature 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 batch data into that feed and read its chart and nothing else. You choose the operations it may call, so creating triggers or rotating tokens is not included unless you add it.
- **Credential handling:** Your Adafruit IO X-AIO-Key and X-AIO-Signature are stored once, encrypted, by your own Jentic One instance and injected as headers at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create an Adafruit IO trigger' or 'rotate a device token', and Jentic returns the matching operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Adafruit IO API** — Slimmer 18-endpoint Adafruit IO surface - feeds, groups, and user only.
- **Particle API** — End-to-end IoT platform with hardware, cellular SIM, and OTA firmware updates.
- **Blynk API** — Mobile-first IoT platform with a drag-and-drop dashboard builder.

## FAQ

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

The API supports an X-AIO-Key API key, in either the request header or query string, and an X-AIO-Signature header for signed requests. Through Jentic, both values are stored encrypted in your Jentic One instance and the agent receives a scoped execution handle, so the raw key and signature never appear in prompts.

### Can I create triggers and tokens with the Adafruit IO REST API?

Yes. POST /{username}/triggers creates a feed-value trigger, and POST /{username}/tokens issues a per-device token. Both are useful for fleet deployments where each device needs its own credentials and event automations bound to specific feeds.

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

Adafruit IO enforces a per-minute throughput cap that depends on the account tier. Use GET /{username}/throttle to read your current remaining capacity, and prefer batch ingest via /{username}/feeds/{feed_key}/data/batch or /{username}/groups/{group_key}/feeds/{feed_key}/data/batch over single-point posts.

### How do I create a trigger when a feed crosses a threshold through Jentic?

Run pip install jentic, search Jentic for 'create an Adafruit IO trigger', load the schema for POST /{username}/triggers, and execute it with the feed_key, condition, and threshold value. Jentic injects the X-AIO-Key from the vault.

### Does the Adafruit IO REST API support access control on feeds?

Yes. The /{username}/{type}/{type_id}/acl and /{username}/{type}/{type_id}/acl/{id} endpoints manage access control rules per resource. That lets you keep a feed writable by one device token but read-only for another or for collaborators.

### Can devices push telemetry to Adafruit IO via webhooks?

Yes. /webhooks/feed/:token accepts JSON payloads and /webhooks/feed/:token/raw accepts arbitrary raw payloads, which is useful for legacy hardware or third-party trackers that cannot be easily reconfigured to call the REST endpoints directly.

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

Yes. Because you self-host Jentic One, your own rules decide which operations and credentials the agent may use, and Adafruit IO puts the feed key in the URL path (/{username}/feeds/{feed_key}/...), so you can pin the agent to a single feed. You might allow it to batch data into that feed via /{username}/feeds/{feed_key}/data/batch and read its chart data while excluding everything else. Higher-impact operations like creating triggers at /{username}/triggers or rotating device tokens at /{username}/tokens stay off unless you explicitly grant them. Your X-AIO-Key and X-AIO-Signature are held by your own instance and injected at execution time, so the agent can only call the operations you scoped.
