Skip to content

Adafruit IO REST API API

by adafruit.com

API keyHTTPSIoT
Open documentation ↗

Overview

### The Internet of Things for Everyone The Adafruit IO HTTP API provides access to your Adafruit IO data from any programming language or hardware environment that can speak HTTP. The easiest way to get started is with [an Adafruit IO learn guide](https://learn.adafruit.com/series/adafruit-io-basics) and [a simple Internet of Things capable device like the Feather Huzzah](https://www.adafruit.com/product/2821). This API documentation is hosted on GitHub Pages and is available at [https://github.com/adafruit/io-api](https://github.com/adafruit/io-api). For questions or comments visit the [Adafruit IO Forums](https://forums.adafruit.com/viewforum.php?f=56) or the [adafruit-io channel on the Adafruit Discord server](https://discord.gg/adafruit). #### Authentication Authentication for every API request happens through the `X-AIO-Key` header or query parameter and your IO API key. A simple cURL request to get all available feeds for a user with the username "io_username" and the key "io_key_12345" could look like this: $ curl -H "X-AIO-Key: io_key_12345" https://io.adafruit.com/api/v2/io_username/feeds Or like this: $ curl "https://io.adafruit.com/api/v2/io_username/feeds?X-AIO-Key=io_key_12345 Using the node.js [request](https://github.com/request/request) library, IO HTTP requests are as easy as: ```js var request = require('request'); var options = { url: 'https://io.adafruit.com/api/v2/io_username/feeds', headers: { 'X-AIO-Key': 'io_key_12345', 'Content-Type': 'application/json' } }; function callback(error, response, body) { if (!error && response.statusCode == 200) { var feeds = JSON.parse(body); console.log(feeds.length + " FEEDS AVAILABLE"); feeds.forEach(function (feed) { console.log(feed.name, feed.key); }) } } request(options, callback); ``` Using the ESP8266 Arduino HTTPClient library, an HTTPS GET request would look like this (replacing `---` with your own values in the appropriate locations): ```arduino /// based on /// https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/examples/Authorization/Authorization.ino #include <Arduino.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> ESP8266WiFiMulti WiFiMulti; const char* ssid = "---"; const char* password = "---"; const char* host = "io.adafruit.com"; const char* io_key = "---"; const char* path_with_username = "/api/v2/---/dashboards"; // Use web browser to view and copy // SHA1 fingerprint of the certificate const char* fingerprint = "77 00 54 2D DA E7 D8 03 27 31 23 99 EB 27 DB CB A5 4C 57 18"; void setup() { Serial.begin(115200); for(uint8_t t = 4; t > 0; t--) { Serial.printf("[SETUP] WAIT %d...\n", t); Serial.flush(); delay(1000); } WiFi.mode(WIFI_STA); WiFiMulti.addAP(ssid, password); // wait for WiFi connection while(WiFiMulti.run() != WL_CONNECTED) { Serial.print('.'); delay(1000); } Serial.println("[WIFI] connected!"); HTTPClient http; // start request with URL and TLS cert fingerprint for verification http.begin("https://" + String(host) + String(path_with_username), fingerprint); // IO API authentication http.addHeader("X-AIO-Key", io_key); // start connection and send HTTP header int httpCode = http.GET(); // httpCode will be negative on error if(httpCode > 0) { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET response: %d\n", httpCode); // HTTP 200 OK if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } http.end(); } } void loop() {} ``` #### Client Libraries We have client libraries to help you get started with your project: [Python](https://github.com/adafruit/io-client-python), [Ruby](https://github.com/adafruit/io-client-ruby), [Arduino C++](https://github.com/adafruit/Adafruit_IO_Arduino), [Javascript](https://github.com/adafruit/adafruit-io-node), and [Go](https://github.com/adafruit/io-client-go) are available. They're all open source, so if they don't already do what you want, you can fork and add any

Adafruit IO REST API is an iot API from adafruit.com. Requests are authenticated with an API key. It is served over HTTPS. Its OpenAPI description documents 71 endpoints.

At a glance

Authentication
API key
HTTPS
Yes
CORS
Unknown
Category
IoT
Base URL
https://io.adafruit.com/api/v2
Version
2.0.0
Endpoints
71
Spec updated
2021-06-21

Make a first request

Replace the placeholders; the documentation says exactly where credentials go.

cURL
curl -X GET "https://io.adafruit.com/api/v2/user" \
  -H "Accept: application/json" \
  -H "X-API-Key: YOUR_API_KEY"
JavaScript
const response = await fetch("https://io.adafruit.com/api/v2/user", {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "X-API-Key": "YOUR_API_KEY",
  },
});
const data = await response.json();
console.log(data);
Python
import requests

response = requests.request(
    "GET",
    "https://io.adafruit.com/api/v2/user",
    headers={
    "Accept": "application/json",
    "X-API-Key": "YOUR_API_KEY",
    },
    timeout=30,
)
print(response.json())

Endpoints

MethodPathWhat it does
GET/userGet information about the current user
POST/webhooks/feed/:tokenSend data to a feed via webhook URL.
POST/webhooks/feed/:token/rawSend arbitrary data to a feed via webhook URL.
GET/{username}/activitiesAll activities for current user
DELETE/{username}/activitiesAll activities for current user
GET/{username}/activities/{type}Get activities by type for current user
GET/{username}/dashboardsAll dashboards for current user
POST/{username}/dashboardsCreate a new Dashboard
GET/{username}/dashboards/{dashboard_id}/blocksAll blocks for current user
POST/{username}/dashboards/{dashboard_id}/blocksCreate a new Block
GET/{username}/dashboards/{dashboard_id}/blocks/{id}Returns Block based on ID
PUT/{username}/dashboards/{dashboard_id}/blocks/{id}Replace an existing Block
PATCH/{username}/dashboards/{dashboard_id}/blocks/{id}Update properties of an existing Block
DELETE/{username}/dashboards/{dashboard_id}/blocks/{id}Delete an existing Block
GET/{username}/dashboards/{id}Returns Dashboard based on ID
PUT/{username}/dashboards/{id}Replace an existing Dashboard
PATCH/{username}/dashboards/{id}Update properties of an existing Dashboard
DELETE/{username}/dashboards/{id}Delete an existing Dashboard
GET/{username}/feedsAll feeds for current user
POST/{username}/feedsCreate a new Feed
GET/{username}/feeds/{feed_key}Get feed by feed key
PUT/{username}/feeds/{feed_key}Replace an existing Feed
PATCH/{username}/feeds/{feed_key}Update properties of an existing Feed
DELETE/{username}/feeds/{feed_key}Delete an existing Feed
GET/{username}/feeds/{feed_key}/dataGet all data for the given feed
POST/{username}/feeds/{feed_key}/dataCreate new Data
POST/{username}/feeds/{feed_key}/data/batchCreate multiple new Data records
GET/{username}/feeds/{feed_key}/data/chartChart data for current feed
GET/{username}/feeds/{feed_key}/data/firstFirst Data in Queue
GET/{username}/feeds/{feed_key}/data/lastLast Data in Queue
GET/{username}/feeds/{feed_key}/data/nextNext Data in Queue
GET/{username}/feeds/{feed_key}/data/previousPrevious Data in Queue
GET/{username}/feeds/{feed_key}/data/retainLast Data in MQTT CSV format
GET/{username}/feeds/{feed_key}/data/{id}Returns data based on feed key
PUT/{username}/feeds/{feed_key}/data/{id}Replace existing Data
PATCH/{username}/feeds/{feed_key}/data/{id}Update properties of existing Data
DELETE/{username}/feeds/{feed_key}/data/{id}Delete existing Data
GET/{username}/feeds/{feed_key}/detailsGet detailed feed by feed key
GET/{username}/groupsAll groups for current user
POST/{username}/groupsCreate a new Group
GET/{username}/groups/{group_key}Returns Group based on ID
PUT/{username}/groups/{group_key}Replace an existing Group
PATCH/{username}/groups/{group_key}Update properties of an existing Group
DELETE/{username}/groups/{group_key}Delete an existing Group
POST/{username}/groups/{group_key}/addAdd an existing Feed to a Group
POST/{username}/groups/{group_key}/dataCreate new data for multiple feeds in a group
GET/{username}/groups/{group_key}/feedsAll feeds for current user in a given group
POST/{username}/groups/{group_key}/feedsCreate a new Feed in a Group
GET/{username}/groups/{group_key}/feeds/{feed_key}/dataAll data for current feed in a specific group
POST/{username}/groups/{group_key}/feeds/{feed_key}/dataCreate new Data in a feed belonging to a particular group
POST/{username}/groups/{group_key}/feeds/{feed_key}/data/batchCreate multiple new Data records in a feed belonging to a particular group
POST/{username}/groups/{group_key}/removeRemove a Feed from a Group
GET/{username}/throttleGet the user's data rate limit and current activity level.
GET/{username}/tokensAll tokens for current user
POST/{username}/tokensCreate a new Token
GET/{username}/tokens/{id}Returns Token based on ID
PUT/{username}/tokens/{id}Replace an existing Token
PATCH/{username}/tokens/{id}Update properties of an existing Token
DELETE/{username}/tokens/{id}Delete an existing Token
GET/{username}/triggersAll triggers for current user
POST/{username}/triggersCreate a new Trigger
GET/{username}/triggers/{id}Returns Trigger based on ID
PUT/{username}/triggers/{id}Replace an existing Trigger
PATCH/{username}/triggers/{id}Update properties of an existing Trigger
DELETE/{username}/triggers/{id}Delete an existing Trigger
GET/{username}/{type}/{type_id}/aclAll permissions for current user and type
POST/{username}/{type}/{type_id}/aclCreate a new Permission
GET/{username}/{type}/{type_id}/acl/{id}Returns Permission based on ID
PUT/{username}/{type}/{type_id}/acl/{id}Replace an existing Permission
PATCH/{username}/{type}/{type_id}/acl/{id}Update properties of an existing Permission
DELETE/{username}/{type}/{type_id}/acl/{id}Delete an existing Permission

Questions

Does the Adafruit IO REST API API need an API key?

Yes. The Adafruit IO REST API API uses API key authentication; the documentation explains how to get credentials.

Does the Adafruit IO REST API API support HTTPS?

Yes, the Adafruit IO REST API API is served over HTTPS.

How many endpoints does the Adafruit IO REST API API have?

Its OpenAPI description lists 71 endpoints in version 2.0.0. All of them are shown on this page.

What are alternatives to the Adafruit IO REST API API?

Other IoT APIs include Brain Web API, Netatmo, Influx OSS API Service, ClearBlade API, Hardware Sentry TrueSight Presentation Server REST API.

Compare alternatives →

Brain Web API

IoT

This document describes the [Intellifi Brain](https://intellifi.zendesk.com/hc/en-us/categories/360000685454) Web API specification using the [OpenAPI specification](https://github.com/OAI/OpenAPI-Specification). The Brain Web API is a RESTful API that allows you to interact with the [Intellifi devices](https://intellifi.zendesk.com/hc/en-us/categories/360000685434) and services in a powerful and simple way. Our end-to-end solution allows you to localize your items/assets based on technologies such as RFID and Bluetooth. # Try it out! The API can be tried out and tested using the ['api-doc/tryitout' endpoint on this site](./tryitout/). This UI allows anyone to visualize and interact with the API’s resources without having any of the implementation logic in place. It’s automatically generated from this Specification, with the visual documentation making it easy for back end implementation and client side consumption. # Authentication Applications are required to provide some form of authentication to the API for every secured endpoint. The Brain offers two forms of authentication. - API key (Via an HTTP request header or URL parameter) - Session cookie <!-- ReDoc-Inject: <security-definitions> --> # See also - About Intellifi and what we do: [intellifi.nl](https://intellifi.nl) - Technical and background information: [intellifi.zendesk.com](https://intellifi.zendesk.com)

API key77 endpoints

Netatmo

IoT

<h3>Welcome to the Netatmo swagger on-line documentation !</h3> This site is a complement to the official <a href="https://dev.netatmo.com/">Netatmo developper documentation</a> using swagger to bring interactivity and easy testing of requests with the "try it" button (authenticate with the authorization code OAuth2 flow by clicking the authenticate button in the methods). You can find the source code for this site can be found in the project <a href="https://github.com/cbornet/netatmo-swagger-ui">netatmo-swagger-ui</a>. You can also use the online <a href="./swagger.json">swagger declaration</a> file to generate code or static documentation (see <a href="https://github.com/cbornet/netatmo-swagger-api">netatmo-swagger-api</a>).

OAuth22 endpoints

Influx OSS API Service

IoT

# Authentication &lt;!-- ReDoc-Inject: &lt;security-definitions&gt; --&gt;

HTTP Basic197 endpoints

ClearBlade API

IoT

A friendly little API to help you interact with the ClearBlade platform.

No auth220 endpoints

Hardware Sentry TrueSight Presentation Server REST API

IoT

Hardware Sentry TrueSight Presentation Server REST API

API key23 endpoints

Quick start - Telematics SDK

IoT

# Introduction We have prepared a set of APIs for quick start to integrate telematics SDK that powers mobile telematics inside 3rd party mobile applications. * [CONTACT US](https://telematicssdk.com) * [SANDBOX](https://userdatahub.com) * [DEV.PORTAL](https://docs.telematicssdk.com) * [DEMO APP](https://raxeltelematics.com/telematics-app) # Overview Datamotion provides telematics infrastructure for mobile applications. Telematics SDK turns any smartphone into telematics data gathering device to collect Location, driving and behavior data. API services unlocks power of your mobile application There are 3 groups of methods: * 1 - user management * 2 - statistics for mobile app * 3 - statistics for back-end(s) in certain cases you will need SNS or any other notification services. read more [here](https://docs.telematicssdk.com/platform-features/sns) # Possible architecture There are three common schemes that are used by our clients. These schemes can be combined * Collect, Process, Store (required: 1&2) * Collect, Process (required: 1& sns) * Collect (required 1&sns) ## Collect, Process, Store ![Collect, Process, Store](https://website-cliparts-datamotion.s3.us-east-2.amazonaws.com/Dev.portal/Architecture+-+Collection%2C+processing%2C+storage) ## Collect, Process ![Collect, Process](https://website-cliparts-datamotion.s3.us-east-2.amazonaws.com/Dev.portal/Architecture+-+Collection+and+processing) ## Collect ![Collect](https://website-cliparts-datamotion.s3.us-east-2.amazonaws.com/Dev.portal/Architecture+-+Collection+only) *** ![Telematic sdk](https://website-cliparts-datamotion.s3.us-east-2.amazonaws.com/Github/transportation_small.png) # Common use-cases: * Safe and efficient driving * Usage-based insurance * Safe driving assessment * Driver assessment * Trip log * Geo-analysis * Accident monitoring * Driving engagements * Location based services * Realtime Tracking and beyond # How to start * Register a [SANDBOX ACCOUNT](https://userdatahub.com) * Get [CREDENTIALS](https://docs.userdatahub.com/sandbox/credentials) * Follow the guide from [DEVELOPER POERTAL](https://docs.telematicssdk.com) # Authentication To create a user on datamotion platform, you require to use InstanceID and InstanceKEY. You can get it in Datahub -> management -> user-service credentials Once you create a user, you will get Device token, JWT token and refresh token. then, you will use it for APIs

No auth9 endpoints

Listed from APIs.guru (CC0).