Adafruit IO Webhooks API

Token-authenticated inbound webhook endpoints that allow third-party services (IFTTT, Zapier, Make, or any HTTP client) to push data into an Adafruit IO feed without an API key. Endpoints include the standard JSON webhook (POST /webhooks/feed/:token), the raw-payload webhook (POST /webhooks/feed/:token/raw) for arbitrary request bodies, and a notify webhook (POST /webhooks/feed/:token/notify) for ping-style triggers. Tokens are generated per-feed and managed in the Adafruit IO UI.

Adafruit IO Webhooks API is one of 3 APIs that Adafruit IO publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include IoT, Internet of Things, Webhooks, and Feeds. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

adafruit-io-rest-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Adafruit IO REST API
  description: >+
    ### 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 feature you'd like.

  version: 2.0.0
  x-logo:
    url: https://io.adafruit.com/api/docs/adafruit-flower-left.png
security:
  - HeaderKey: []
  - HeaderSignature: []
  - QueryKey: []
paths:
  /user:
    get:
      x-swagger-router-controller: Users
      x-swagger-router-action: get
      operationId: currentUser
      summary: Get information about the current user
      tags:
        - Users
      responses:
        "200":
          description: A User record
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
            text/csv:
              schema:
                $ref: "#/components/schemas/User"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/throttle":
    get:
      x-swagger-router-controller: Users
      x-swagger-router-action: throttle
      operationId: getCurrentUserThrottle
      summary: Get the user's data rate limit and current activity level.
      tags:
        - Users
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
      responses:
        "200":
          description: Data rate limit and current actions.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data_rate_limit:
                    type: integer
                    description: Max possible actions inside the time window (usually 1 minute).
                  active_data_rate:
                    type: integer
                    description: Actions taken inside the time window.
            text/csv:
              schema:
                type: object
                properties:
                  data_rate_limit:
                    type: integer
                    description: Max possible actions inside the time window (usually 1 minute).
                  active_data_rate:
                    type: integer
                    description: Actions taken inside the time window.
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/activities":
    get:
      x-swagger-router-controller: Activities
      x-swagger-router-action: all
      operationId: allActivities
      summary: All activities for current user
      description: The Activities endpoint returns information about the user's activities.
      tags:
        - Activities
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/StartTime"
        - $ref: "#/components/parameters/EndTime"
        - $ref: "#/components/parameters/Limit"
      responses:
        "200":
          description: An array of activities
          headers:
            X-Pagination-Limit:
              description: The limit this request is using, either your given value or the
                default (1000).
              schema:
                type: integer
            X-Pagination-Count:
              description: The number of records returned.
              schema:
                type: integer
            X-Pagination-Start:
              description: The created_at value for the oldest record returned.
              schema:
                type: string
            X-Pagination-End:
              description: The created_at value for the newest record returned.
              schema:
                type: string
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Activity"
            text/csv:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Activity"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
    delete:
      x-swagger-router-controller: Activities
      x-swagger-router-action: destroy
      operationId: destroyActivities
      summary: All activities for current user
      description: Delete all your activities.
      tags:
        - Activities
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
      responses:
        "200":
          description: Deleted activities successfully
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/activities/{type}":
    get:
      x-swagger-router-controller: Activities
      x-swagger-router-action: get
      operationId: getActivity
      summary: Get activities by type for current user
      description: The Activities endpoint returns information about the user's activities.
      tags:
        - Activities
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/ActivityTypePath"
        - $ref: "#/components/parameters/StartTime"
        - $ref: "#/components/parameters/EndTime"
        - $ref: "#/components/parameters/Limit"
      responses:
        "200":
          description: An array of activities
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Activity"
            text/csv:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Activity"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds":
    get:
      x-swagger-router-controller: Feeds
      x-swagger-router-action: all
      operationId: allFeeds
      summary: All feeds for current user
      description: The Feeds endpoint returns information about the user's feeds. The
        response includes the latest value of each feed, and other metadata
        about each feed.
      tags:
        - Feeds
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
      responses:
        "200":
          description: An array of feeds
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Feed"
            text/csv:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Feed"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
    post:
      summary: Create a new Feed
      description: ""
      x-swagger-router-controller: Feeds
      x-swagger-router-action: create
      operationId: createFeed
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/GroupParam"
      requestBody:
        $ref: "#/components/requestBodies/createFeedFeed"
      tags:
        - Feeds
      responses:
        "200":
          description: New feed
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Feed"
            text/csv:
              schema:
                $ref: "#/components/schemas/Feed"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}":
    get:
      description: Returns feed based on the feed key
      summary: Get feed by feed key
      x-swagger-router-controller: Feeds
      x-swagger-router-action: get
      operationId: getFeed
      tags:
        - Feeds
      responses:
        "200":
          description: Feed response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Feed"
            text/csv:
              schema:
                $ref: "#/components/schemas/Feed"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
    put:
      summary: Replace an existing Feed
      x-swagger-router-controller: Feeds
      x-swagger-router-action: replace
      operationId: replaceFeed
      description: ""
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
      requestBody:
        $ref: "#/components/requestBodies/createFeedFeed"
      tags:
        - Feeds
      responses:
        "200":
          description: Updated feed
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Feed"
            text/csv:
              schema:
                $ref: "#/components/schemas/Feed"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
    patch:
      summary: Update properties of an existing Feed
      description: ""
      x-swagger-router-controller: Feeds
      x-swagger-router-action: update
      operationId: updateFeed
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
      requestBody:
        $ref: "#/components/requestBodies/createFeedFeed"
      tags:
        - Feeds
      responses:
        "200":
          description: Updated feed
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Feed"
            text/csv:
              schema:
                $ref: "#/components/schemas/Feed"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
    delete:
      summary: Delete an existing Feed
      description: ""
      x-swagger-router-controller: Feeds
      x-swagger-router-action: destroy
      operationId: destroyFeed
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
      tags:
        - Feeds
      responses:
        "200":
          description: Deleted feed successfully
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}/details":
    get:
      description: Returns more detailed feed record based on the feed key
      summary: Get detailed feed by feed key
      x-swagger-router-controller: Feeds
      x-swagger-router-action: details
      operationId: getFeedDetails
      tags:
        - Feeds
      responses:
        "200":
          description: Feed response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Feed"
            text/csv:
              schema:
                $ref: "#/components/schemas/Feed"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
  "/{username}/feeds/{feed_key}/data":
    get:
      x-swagger-router-controller: Data
      x-swagger-router-action: all
      operationId: allData
      summary: Get all data for the given feed
      description: ""
      tags:
        - Data
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
        - $ref: "#/components/parameters/StartTime"
        - $ref: "#/components/parameters/EndTime"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/DataInclude"
      responses:
        "200":
          description: An array of data
          headers:
            X-Pagination-Limit:
              description: The limit this request is using, either your given value or the
                default (1000).
              schema:
                type: integer
            X-Pagination-Count:
              description: The number of records returned.
              schema:
                type: integer
            X-Pagination-Start:
              description: The created_at value for the oldest record returned.
              schema:
                type: string
            X-Pagination-End:
              description: The created_at value for the newest record returned.
              schema:
                type: string
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/DataResponse"
            text/csv:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/DataResponse"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
    post:
      summary: Create new Data
      operationId: createData
      description: >-
        Create new data records on the given feed.


        **NOTE:** when feed history is on, data `value` size is limited to 1KB, when feed history is turned off data value size is limited to 100KB.
      x-swagger-router-controller: Data
      x-swagger-router-action: create
      x-code-samples:
        - lang: curl
          source: |-
            curl -F 'value=65.5' -H 'X-AIO-Key: io_key_12345' \
              https://io.adafruit.com/api/v2/io_username/feeds/io-feed-key/data
        - lang: Ruby
          source: |-
            api = Adafruit::IO::Client.new(
              key: ENV['IO_KEY'],
              username: ENV['IO_USERNAME']
            )
            api.send_data('io-feed-key', 65.5)
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
      requestBody:
        $ref: "#/components/requestBodies/createDataDatum"
      tags:
        - Data
      responses:
        "200":
          description: New data
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Data"
            text/csv:
              schema:
                $ref: "#/components/schemas/Data"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}/data/chart":
    get:
      x-swagger-router-controller: Data
      x-swagger-router-action: chart
      operationId: chartData
      summary: Chart data for current feed
      description: >-
        The Chart API is what we use on io.adafruit.com to populate charts over
        varying timespans with a consistent number of data points. The maximum
        number of points returned is 480. This API works by aggregating slices
        of time into a single value by averaging.


        All time-based parameters are optional, if none are given it will default to 1 hour at the finest-grained resolution possible.
      tags:
        - Data
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
        - $ref: "#/components/parameters/StartTime"
        - $ref: "#/components/parameters/EndTime"
        - name: resolution
          in: query
          description: "A resolution size in minutes. By giving a resolution value you
            will get back grouped data points aggregated over resolution-sized
            intervals. NOTE: time span is preferred over resolution, so if you
            request a span of time that includes more than max limit points you
            may get a larger resolution than you requested. Valid resolutions
            are 1, 5, 10, 30, 60, and 120."
          schema:
            type: integer
            format: int32
        - name: hours
          in: query
          description: The number of hours the chart should cover.
          schema:
            type: integer
            format: int32
      responses:
        "200":
          description: A JSON record containing chart data and the parameters used to
            generate it.
          content:
            application/json:
              schema:
                type: object
                properties:
                  feed:
                    type: object
                    properties:
                      id:
                        type: integer
                      key:
                        type: string
                      name:
                        type: string
                  parameters:
                    type: object
                    properties: {}
                  columns:
                    type: array
                    description: The names of the columns returned as data.
                    items:
                      type: string
                  data:
                    type: array
                    description: The actual chart data.
                    items:
                      type: array
                      items:
                        type: string
            text/csv:
              schema:
                type: object
                properties:
                  feed:
                    type: object
                    properties:
                      id:
                        type: integer
                      key:
                        type: string
                      name:
                        type: string
                  parameters:
                    type: object
                    properties: {}
                  columns:
                    type: array
                    description: The names of the columns returned as data.
                    items:
                      type: string
                  data:
                    type: array
                    description: The actual chart data.
                    items:
                      type: array
                      items:
                        type: string
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}/data/batch":
    post:
      summary: Create multiple new Data records
      x-swagger-router-controller: Data
      x-swagger-router-action: batch
      operationId: batchCreateData
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
      requestBody:
        $ref: "#/components/requestBodies/batchCreateDataData"
      tags:
        - Data
      responses:
        "200":
          description: New data
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/DataResponse"
            text/csv:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/DataResponse"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}/data/previous":
    get:
      summary: Previous Data in Queue
      description: "Get the previously processed data point in the feed. NOTE: this
        method doesn't move the processing queue pointer."
      x-swagger-router-controller: Data
      x-swagger-router-action: previous
      operationId: previousData
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
        - $ref: "#/components/parameters/DataInclude"
      tags:
        - Data
      responses:
        "200":
          description: Data response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataResponse"
            text/csv:
              schema:
                $ref: "#/components/schemas/DataResponse"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}/data/next":
    get:
      summary: Next Data in Queue
      description: Get the next newest data point in the feed. If queue processing
        hasn't been started, the first data point in the feed will be returned.
      x-swagger-router-controller: Data
      x-swagger-router-action: next
      operationId: nextData
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
        - $ref: "#/components/parameters/DataInclude"
      tags:
        - Data
      responses:
        "200":
          description: Data response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataResponse"
            text/csv:
              schema:
                $ref: "#/components/schemas/DataResponse"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}/data/last":
    get:
      summary: Last Data in Queue
      description: Get the most recent data point in the feed. This request sets the
        queue pointer to the end of the feed.
      x-swagger-router-controller: Data
      x-swagger-router-action: last
      operationId: lastData
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
        - $ref: "#/components/parameters/DataInclude"
      tags:
        - Data
      responses:
        "200":
          description: Data response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataResponse"
            text/csv:
              schema:
                $ref: "#/components/schemas/DataResponse"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}/data/first":
    get:
      summary: First Data in Queue
      description: Get the oldest data point in the feed. This request sets the queue
        pointer to the beginning of the feed.
      x-swagger-router-controller: Data
      x-swagger-router-action: last
      operationId: firstData
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
        - $ref: "#/components/parameters/DataInclude"
      tags:
        - Data
      responses:
        "200":
          description: Data response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataResponse"
            text/csv:
              schema:
                $ref: "#/components/schemas/DataResponse"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}/data/retain":
    get:
      summary: Last Data in MQTT CSV format
      description: "Get the most recent data point in the feed in an MQTT compatible
        CSV format: `value,lat,lon,ele`"
      x-swagger-router-controller: Data
      x-swagger-router-action: retain
      operationId: retainData
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
      tags:
        - Data
      responses:
        "200":
          description: CSV string in `value,lat,lon,ele` format. The lat, lon, and ele
            values are left blank if they are not set.
          content:
            text/csv:
              schema:
                type: string
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
  "/{username}/feeds/{feed_key}/data/{id}":
    get:
      summary: Returns data based on feed key
      description: ""
      x-swagger-router-controller: Data
      x-swagger-router-action: get
      operationId: getData
      tags:
        - Data
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
        - $ref: "#/components/parameters/IDPath"
        - $ref: "#/components/parameters/DataInclude"
      responses:
        "200":
          description: Data response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataResponse"
            text/csv:
              schema:
                $ref: "#/components/schemas/DataResponse"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
    put:
      summary: Replace existing Data
      x-swagger-router-controller: Data
      x-swagger-router-action: replace
      operationId: replaceData
      description: ""
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
        - $ref: "#/components/parameters/IDPath"
      requestBody:
        $ref: "#/components/requestBodies/createDataDatum"
      tags:
        - Data
      responses:
        "200":
          description: Updated Data
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataResponse"
            text/csv:
              schema:
                $ref: "#/components/schemas/DataResponse"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
        "500":
          description: Server Error
    patch:
      summary: Update properties of existing Data
      description: ""
      x-swagger-router-controller: Data
      x-swagger-router-action: update
      operationId: updateData
      parameters:
        - $ref: "#/components/parameters/UsernamePath"
        - $ref: "#/components/parameters/FeedPath"
        - $ref: "#/components/parameters/IDPath"
      requestBody:
        $ref: "#/components/requestBodies/createDataDatum"
      tags:
        - Data
      responses:
        "200":
          description: Updated Data
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataRes

# --- truncated at 32 KB (97 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/adafruit-io/refs/heads/main/openapi/adafruit-io-rest-api-openapi.yml