{"files":{"SKILL.md":"---\nname: adafruit-io-rest-api\ndescription: \"Adafruit IO REST API skill. Use when working with Adafruit IO REST for user, {username}, webhooks. Covers 71 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Adafruit IO REST API\nAPI version: 2.0.0\n\n## Auth\nApiKey X-AIO-Key in header | ApiKey X-AIO-Key in query | ApiKey X-AIO-Signature in header\n\n## Base URL\nhttps://io.adafruit.com/api/v2\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /user -- get information about the current user\n3. POST /{username}/feeds -- create first feed\n\n## Endpoints\n71 endpoints across 3 groups. See references/api-spec.lap for full details.\n\n### User\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /user | Get information about the current user |\n\n### {username}\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /{username}/throttle | Get the user's data rate limit and current activity level. |\n| GET | /{username}/activities | All activities for current user |\n| DELETE | /{username}/activities | All activities for current user |\n| GET | /{username}/activities/{type} | Get activities by type for current user |\n| GET | /{username}/feeds | All feeds for current user |\n| POST | /{username}/feeds | Create a new Feed |\n| GET | /{username}/feeds/{feed_key} | Get feed by feed key |\n| PUT | /{username}/feeds/{feed_key} | Replace an existing Feed |\n| PATCH | /{username}/feeds/{feed_key} | Update properties of an existing Feed |\n| DELETE | /{username}/feeds/{feed_key} | Delete an existing Feed |\n| GET | /{username}/feeds/{feed_key}/details | Get detailed feed by feed key |\n| GET | /{username}/feeds/{feed_key}/data | Get all data for the given feed |\n| POST | /{username}/feeds/{feed_key}/data | Create new Data |\n| GET | /{username}/feeds/{feed_key}/data/chart | Chart data for current feed |\n| POST | /{username}/feeds/{feed_key}/data/batch | Create multiple new Data records |\n| GET | /{username}/feeds/{feed_key}/data/previous | Previous Data in Queue |\n| GET | /{username}/feeds/{feed_key}/data/next | Next Data in Queue |\n| GET | /{username}/feeds/{feed_key}/data/last | Last Data in Queue |\n| GET | /{username}/feeds/{feed_key}/data/first | First Data in Queue |\n| GET | /{username}/feeds/{feed_key}/data/retain | Last Data in MQTT CSV format |\n| GET | /{username}/feeds/{feed_key}/data/{id} | Returns data based on feed key |\n| PUT | /{username}/feeds/{feed_key}/data/{id} | Replace existing Data |\n| PATCH | /{username}/feeds/{feed_key}/data/{id} | Update properties of existing Data |\n| DELETE | /{username}/feeds/{feed_key}/data/{id} | Delete existing Data |\n| GET | /{username}/groups | All groups for current user |\n| POST | /{username}/groups | Create a new Group |\n| GET | /{username}/groups/{group_key} | Returns Group based on ID |\n| PUT | /{username}/groups/{group_key} | Replace an existing Group |\n| PATCH | /{username}/groups/{group_key} | Update properties of an existing Group |\n| DELETE | /{username}/groups/{group_key} | Delete an existing Group |\n| POST | /{username}/groups/{group_key}/add | Add an existing Feed to a Group |\n| POST | /{username}/groups/{group_key}/remove | Remove a Feed from a Group |\n| GET | /{username}/groups/{group_key}/feeds | All feeds for current user in a given group |\n| POST | /{username}/groups/{group_key}/feeds | Create a new Feed in a Group |\n| POST | /{username}/groups/{group_key}/data | Create new data for multiple feeds in a group |\n| GET | /{username}/groups/{group_key}/feeds/{feed_key}/data | All data for current feed in a specific group |\n| POST | /{username}/groups/{group_key}/feeds/{feed_key}/data | Create new Data in a feed belonging to a particular group |\n| POST | /{username}/groups/{group_key}/feeds/{feed_key}/data/batch | Create multiple new Data records in a feed belonging to a particular group |\n| GET | /{username}/dashboards | All dashboards for current user |\n| POST | /{username}/dashboards | Create a new Dashboard |\n| GET | /{username}/dashboards/{id} | Returns Dashboard based on ID |\n| PUT | /{username}/dashboards/{id} | Replace an existing Dashboard |\n| PATCH | /{username}/dashboards/{id} | Update properties of an existing Dashboard |\n| DELETE | /{username}/dashboards/{id} | Delete an existing Dashboard |\n| GET | /{username}/dashboards/{dashboard_id}/blocks | All blocks for current user |\n| POST | /{username}/dashboards/{dashboard_id}/blocks | Create a new Block |\n| GET | /{username}/dashboards/{dashboard_id}/blocks/{id} | Returns Block based on ID |\n| PUT | /{username}/dashboards/{dashboard_id}/blocks/{id} | Replace an existing Block |\n| PATCH | /{username}/dashboards/{dashboard_id}/blocks/{id} | Update properties of an existing Block |\n| DELETE | /{username}/dashboards/{dashboard_id}/blocks/{id} | Delete an existing Block |\n| GET | /{username}/tokens | All tokens for current user |\n| POST | /{username}/tokens | Create a new Token |\n| GET | /{username}/tokens/{id} | Returns Token based on ID |\n| PUT | /{username}/tokens/{id} | Replace an existing Token |\n| PATCH | /{username}/tokens/{id} | Update properties of an existing Token |\n| DELETE | /{username}/tokens/{id} | Delete an existing Token |\n| GET | /{username}/triggers | All triggers for current user |\n| POST | /{username}/triggers | Create a new Trigger |\n| GET | /{username}/triggers/{id} | Returns Trigger based on ID |\n| PUT | /{username}/triggers/{id} | Replace an existing Trigger |\n| PATCH | /{username}/triggers/{id} | Update properties of an existing Trigger |\n| DELETE | /{username}/triggers/{id} | Delete an existing Trigger |\n| GET | /{username}/{type}/{type_id}/acl | All permissions for current user and type |\n| POST | /{username}/{type}/{type_id}/acl | Create a new Permission |\n| GET | /{username}/{type}/{type_id}/acl/{id} | Returns Permission based on ID |\n| PUT | /{username}/{type}/{type_id}/acl/{id} | Replace an existing Permission |\n| PATCH | /{username}/{type}/{type_id}/acl/{id} | Update properties of an existing Permission |\n| DELETE | /{username}/{type}/{type_id}/acl/{id} | Delete an existing Permission |\n\n### Webhooks\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /webhooks/feed/:token | Send data to a feed via webhook URL. |\n| POST | /webhooks/feed/:token/raw | Send arbitrary data to a feed via webhook URL. |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all user?\" -> GET /user\n- \"List all throttle?\" -> GET /{username}/throttle\n- \"List all activities?\" -> GET /{username}/activities\n- \"Get activity details?\" -> GET /{username}/activities/{type}\n- \"List all feeds?\" -> GET /{username}/feeds\n- \"Create a feed?\" -> POST /{username}/feeds\n- \"Get feed details?\" -> GET /{username}/feeds/{feed_key}\n- \"Update a feed?\" -> PUT /{username}/feeds/{feed_key}\n- \"Partially update a feed?\" -> PATCH /{username}/feeds/{feed_key}\n- \"Delete a feed?\" -> DELETE /{username}/feeds/{feed_key}\n- \"List all details?\" -> GET /{username}/feeds/{feed_key}/details\n- \"List all data?\" -> GET /{username}/feeds/{feed_key}/data\n- \"Create a data?\" -> POST /{username}/feeds/{feed_key}/data\n- \"List all chart?\" -> GET /{username}/feeds/{feed_key}/data/chart\n- \"Create a batch?\" -> POST /{username}/feeds/{feed_key}/data/batch\n- \"List all previous?\" -> GET /{username}/feeds/{feed_key}/data/previous\n- \"List all next?\" -> GET /{username}/feeds/{feed_key}/data/next\n- \"List all last?\" -> GET /{username}/feeds/{feed_key}/data/last\n- \"List all first?\" -> GET /{username}/feeds/{feed_key}/data/first\n- \"List all retain?\" -> GET /{username}/feeds/{feed_key}/data/retain\n- \"Get data details?\" -> GET /{username}/feeds/{feed_key}/data/{id}\n- \"Update a data?\" -> PUT /{username}/feeds/{feed_key}/data/{id}\n- \"Partially update a data?\" -> PATCH /{username}/feeds/{feed_key}/data/{id}\n- \"Delete a data?\" -> DELETE /{username}/feeds/{feed_key}/data/{id}\n- \"List all groups?\" -> GET /{username}/groups\n- \"Create a group?\" -> POST /{username}/groups\n- \"Get group details?\" -> GET /{username}/groups/{group_key}\n- \"Update a group?\" -> PUT /{username}/groups/{group_key}\n- \"Partially update a group?\" -> PATCH /{username}/groups/{group_key}\n- \"Delete a group?\" -> DELETE /{username}/groups/{group_key}\n- \"Create a add?\" -> POST /{username}/groups/{group_key}/add\n- \"Create a remove?\" -> POST /{username}/groups/{group_key}/remove\n- \"List all dashboards?\" -> GET /{username}/dashboards\n- \"Create a dashboard?\" -> POST /{username}/dashboards\n- \"Get dashboard details?\" -> GET /{username}/dashboards/{id}\n- \"Update a dashboard?\" -> PUT /{username}/dashboards/{id}\n- \"Partially update a dashboard?\" -> PATCH /{username}/dashboards/{id}\n- \"Delete a dashboard?\" -> DELETE /{username}/dashboards/{id}\n- \"List all blocks?\" -> GET /{username}/dashboards/{dashboard_id}/blocks\n- \"Create a block?\" -> POST /{username}/dashboards/{dashboard_id}/blocks\n- \"Get block details?\" -> GET /{username}/dashboards/{dashboard_id}/blocks/{id}\n- \"Update a block?\" -> PUT /{username}/dashboards/{dashboard_id}/blocks/{id}\n- \"Partially update a block?\" -> PATCH /{username}/dashboards/{dashboard_id}/blocks/{id}\n- \"Delete a block?\" -> DELETE /{username}/dashboards/{dashboard_id}/blocks/{id}\n- \"List all tokens?\" -> GET /{username}/tokens\n- \"Create a token?\" -> POST /{username}/tokens\n- \"Get token details?\" -> GET /{username}/tokens/{id}\n- \"Update a token?\" -> PUT /{username}/tokens/{id}\n- \"Partially update a token?\" -> PATCH /{username}/tokens/{id}\n- \"Delete a token?\" -> DELETE /{username}/tokens/{id}\n- \"List all triggers?\" -> GET /{username}/triggers\n- \"Create a trigger?\" -> POST /{username}/triggers\n- \"Get trigger details?\" -> GET /{username}/triggers/{id}\n- \"Update a trigger?\" -> PUT /{username}/triggers/{id}\n- \"Partially update a trigger?\" -> PATCH /{username}/triggers/{id}\n- \"Delete a trigger?\" -> DELETE /{username}/triggers/{id}\n- \"List all acl?\" -> GET /{username}/{type}/{type_id}/acl\n- \"Create a acl?\" -> POST /{username}/{type}/{type_id}/acl\n- \"Get acl details?\" -> GET /{username}/{type}/{type_id}/acl/{id}\n- \"Update a acl?\" -> PUT /{username}/{type}/{type_id}/acl/{id}\n- \"Partially update a acl?\" -> PATCH /{username}/{type}/{type_id}/acl/{id}\n- \"Delete a acl?\" -> DELETE /{username}/{type}/{type_id}/acl/{id}\n- \"Create a :token?\" -> POST /webhooks/feed/:token\n- \"Create a raw?\" -> POST /webhooks/feed/:token/raw\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Adafruit IO REST API\n@base https://io.adafruit.com/api/v2\n@version 2.0.0\n@auth ApiKey X-AIO-Key in header | ApiKey X-AIO-Key in query | ApiKey X-AIO-Signature in header\n@common_fields {username: any # a valid username string}\n@endpoints 71\n@hint download_for_search\n@toc user(1), {username}(68), webhooks(2)\n\n@group user\n@endpoint GET /user\n@desc Get information about the current user\n@returns(200) A User record\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endgroup\n\n@group {username}\n@endpoint GET /{username}/throttle\n@desc Get the user's data rate limit and current activity level.\n@returns(200) Data rate limit and current actions.\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/activities\n@desc All activities for current user\n@optional {start_time: any # Start time for filtering, returns records created after given time., end_time: any # End time for filtering, returns records created before give time., limit: any # Limit the number of records returned.}\n@returns(200) An array of activities\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint DELETE /{username}/activities\n@desc All activities for current user\n@returns(200) Deleted activities successfully\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/activities/{type}\n@desc Get activities by type for current user\n@required {type: any}\n@optional {start_time: any # Start time for filtering, returns records created after given time., end_time: any # End time for filtering, returns records created before give time., limit: any # Limit the number of records returned.}\n@returns(200) An array of activities\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds\n@desc All feeds for current user\n@returns(200) An array of feeds\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/feeds\n@desc Create a new Feed\n@required {feed: map}\n@optional {group_key: any}\n@returns(200) New feed\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}\n@desc Get feed by feed key\n@required {feed_key: any # a valid feed key}\n@returns(200) Feed response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PUT /{username}/feeds/{feed_key}\n@desc Replace an existing Feed\n@required {feed_key: any # a valid feed key, feed: map}\n@returns(200) Updated feed\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PATCH /{username}/feeds/{feed_key}\n@desc Update properties of an existing Feed\n@required {feed_key: any # a valid feed key, feed: map}\n@returns(200) Updated feed\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint DELETE /{username}/feeds/{feed_key}\n@desc Delete an existing Feed\n@required {feed_key: any # a valid feed key}\n@returns(200) Deleted feed successfully\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}/details\n@desc Get detailed feed by feed key\n@required {feed_key: any # a valid feed key}\n@returns(200) Feed response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}/data\n@desc Get all data for the given feed\n@required {feed_key: any # a valid feed key}\n@optional {start_time: any # Start time for filtering, returns records created after given time., end_time: any # End time for filtering, returns records created before give time., limit: any # Limit the number of records returned., include: any # List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`.}\n@returns(200) An array of data\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/feeds/{feed_key}/data\n@desc Create new Data\n@required {feed_key: any # a valid feed key, datum: map # Data record including a `value` field (required) and optionally including: `lat`, `lon`, `ele` (latitude, longitude, and elevation values), and `created_at` (a date/time string).}\n@returns(200) New data\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}/data/chart\n@desc Chart data for current feed\n@required {feed_key: any # a valid feed key}\n@optional {start_time: any # Start time for filtering, returns records created after given time., end_time: any # End time for filtering, returns records created before give time., resolution: any # 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., hours: any # The number of hours the chart should cover.}\n@returns(200) A JSON record containing chart data and the parameters used to generate it.\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/feeds/{feed_key}/data/batch\n@desc Create multiple new Data records\n@required {feed_key: any # a valid feed key, data: [map] # A collection of data records including `value` (required) and optionally including: `lat`, `lon`, `ele` (latitude, longitude, and elevation values), and `created_at` (a date/time string).}\n@returns(200) New data\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}/data/previous\n@desc Previous Data in Queue\n@required {feed_key: any # a valid feed key}\n@optional {include: any # List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`.}\n@returns(200) Data response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}/data/next\n@desc Next Data in Queue\n@required {feed_key: any # a valid feed key}\n@optional {include: any # List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`.}\n@returns(200) Data response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}/data/last\n@desc Last Data in Queue\n@required {feed_key: any # a valid feed key}\n@optional {include: any # List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`.}\n@returns(200) Data response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}/data/first\n@desc First Data in Queue\n@required {feed_key: any # a valid feed key}\n@optional {include: any # List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`.}\n@returns(200) Data response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}/data/retain\n@desc Last Data in MQTT CSV format\n@required {feed_key: any # a valid feed key}\n@returns(200) CSV string in `value,lat,lon,ele` format. The lat, lon, and ele values are left blank if they are not set.\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/feeds/{feed_key}/data/{id}\n@desc Returns data based on feed key\n@required {feed_key: any # a valid feed key, id: any}\n@optional {include: any # List of Data record fields to include in response as comma separated list. Acceptable values are: `value`, `lat`, `lon`, `ele`, `id`, and `created_at`.}\n@returns(200) Data response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PUT /{username}/feeds/{feed_key}/data/{id}\n@desc Replace existing Data\n@required {feed_key: any # a valid feed key, id: any, datum: map # Data record including a `value` field (required) and optionally including: `lat`, `lon`, `ele` (latitude, longitude, and elevation values), and `created_at` (a date/time string).}\n@returns(200) Updated Data\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PATCH /{username}/feeds/{feed_key}/data/{id}\n@desc Update properties of existing Data\n@required {feed_key: any # a valid feed key, id: any, datum: map # Data record including a `value` field (required) and optionally including: `lat`, `lon`, `ele` (latitude, longitude, and elevation values), and `created_at` (a date/time string).}\n@returns(200) Updated Data\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint DELETE /{username}/feeds/{feed_key}/data/{id}\n@desc Delete existing Data\n@required {feed_key: any # a valid feed key, id: any}\n@returns(200) Deleted Group successfully\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/groups\n@desc All groups for current user\n@returns(200) An array of groups\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/groups\n@desc Create a new Group\n@required {group: map}\n@returns(200) New Group\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/groups/{group_key}\n@desc Returns Group based on ID\n@required {group_key: any}\n@returns(200) Group response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error\"}\n\n@endpoint PUT /{username}/groups/{group_key}\n@desc Replace an existing Group\n@required {group_key: any, group: map}\n@returns(200) Updated group\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PATCH /{username}/groups/{group_key}\n@desc Update properties of an existing Group\n@required {group_key: any, group: map}\n@returns(200) Updated Group\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint DELETE /{username}/groups/{group_key}\n@desc Delete an existing Group\n@required {group_key: any}\n@returns(200) Deleted Group successfully\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/groups/{group_key}/add\n@desc Add an existing Feed to a Group\n@required {group_key: any}\n@optional {feed_key: any}\n@returns(200) Updated group\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/groups/{group_key}/remove\n@desc Remove a Feed from a Group\n@required {group_key: any}\n@optional {feed_key: any}\n@returns(200) Updated group\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/groups/{group_key}/feeds\n@desc All feeds for current user in a given group\n@required {group_key: any}\n@returns(200) An array of feeds\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/groups/{group_key}/feeds\n@desc Create a new Feed in a Group\n@required {group_key: any, feed: map}\n@returns(200) New feed\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/groups/{group_key}/data\n@desc Create new data for multiple feeds in a group\n@required {group_key: any, group_feed_data: map}\n@returns(200) New data\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/groups/{group_key}/feeds/{feed_key}/data\n@desc All data for current feed in a specific group\n@required {group_key: any, feed_key: any # a valid feed key}\n@optional {start_time: any # Start time for filtering data. Returns data created after given time., end_time: any # End time for filtering data. Returns data created before give time., limit: any # Limit the number of records returned.}\n@returns(200) An array of data\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/groups/{group_key}/feeds/{feed_key}/data\n@desc Create new Data in a feed belonging to a particular group\n@required {group_key: any, feed_key: any # a valid feed key, datum: map # Data record including a `value` field (required) and optionally including: `lat`, `lon`, `ele` (latitude, longitude, and elevation values), and `created_at` (a date/time string).}\n@returns(200) New data\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/groups/{group_key}/feeds/{feed_key}/data/batch\n@desc Create multiple new Data records in a feed belonging to a particular group\n@required {group_key: any, feed_key: any # a valid feed key, data: [map] # A collection of data records including `value` (required) and optionally including: `lat`, `lon`, `ele` (latitude, longitude, and elevation values), and `created_at` (a date/time string).}\n@returns(200) New data\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/dashboards\n@desc All dashboards for current user\n@returns(200) An array of dashboards\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/dashboards\n@desc Create a new Dashboard\n@required {dashboard: map}\n@returns(200) New Dashboard\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/dashboards/{id}\n@desc Returns Dashboard based on ID\n@required {id: any}\n@returns(200) Dashboard response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error\"}\n\n@endpoint PUT /{username}/dashboards/{id}\n@desc Replace an existing Dashboard\n@required {id: any, dashboard: map}\n@returns(200) Updated dashboard\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PATCH /{username}/dashboards/{id}\n@desc Update properties of an existing Dashboard\n@required {id: any, dashboard: map}\n@returns(200) Updated Dashboard\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint DELETE /{username}/dashboards/{id}\n@desc Delete an existing Dashboard\n@required {id: any}\n@returns(200) Deleted Dashboard successfully\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/dashboards/{dashboard_id}/blocks\n@desc All blocks for current user\n@required {dashboard_id: any}\n@returns(200) An array of blocks\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/dashboards/{dashboard_id}/blocks\n@desc Create a new Block\n@required {block: map, dashboard_id: any}\n@returns(200) New Block\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/dashboards/{dashboard_id}/blocks/{id}\n@desc Returns Block based on ID\n@required {dashboard_id: any, id: any}\n@returns(200) Block response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error\"}\n\n@endpoint PUT /{username}/dashboards/{dashboard_id}/blocks/{id}\n@desc Replace an existing Block\n@required {dashboard_id: any, id: any, block: map}\n@returns(200) Updated block\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PATCH /{username}/dashboards/{dashboard_id}/blocks/{id}\n@desc Update properties of an existing Block\n@required {dashboard_id: any, id: any, block: map}\n@returns(200) Updated Block\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint DELETE /{username}/dashboards/{dashboard_id}/blocks/{id}\n@desc Delete an existing Block\n@required {dashboard_id: any, id: any}\n@returns(200) Deleted Block successfully\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/tokens\n@desc All tokens for current user\n@returns(200) An array of tokens\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/tokens\n@desc Create a new Token\n@required {token: map}\n@returns(200) New Token\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/tokens/{id}\n@desc Returns Token based on ID\n@required {id: any}\n@returns(200) Token response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error\"}\n\n@endpoint PUT /{username}/tokens/{id}\n@desc Replace an existing Token\n@required {id: any, token: map}\n@returns(200) Updated token\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PATCH /{username}/tokens/{id}\n@desc Update properties of an existing Token\n@required {id: any, token: map}\n@returns(200) Updated Token\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint DELETE /{username}/tokens/{id}\n@desc Delete an existing Token\n@required {id: any}\n@returns(200) Deleted Token successfully\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/triggers\n@desc All triggers for current user\n@returns(200) An array of triggers\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/triggers\n@desc Create a new Trigger\n@required {trigger: map}\n@returns(200) New Trigger\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/triggers/{id}\n@desc Returns Trigger based on ID\n@required {id: any}\n@returns(200) Trigger response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error\"}\n\n@endpoint PUT /{username}/triggers/{id}\n@desc Replace an existing Trigger\n@required {id: any, trigger: map}\n@returns(200) Updated trigger\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PATCH /{username}/triggers/{id}\n@desc Update properties of an existing Trigger\n@required {id: any, trigger: map}\n@returns(200) Updated Trigger\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint DELETE /{username}/triggers/{id}\n@desc Delete an existing Trigger\n@required {id: any}\n@returns(200) Deleted Trigger successfully\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/{type}/{type_id}/acl\n@desc All permissions for current user and type\n@required {type: any, type_id: any}\n@returns(200) An array of permissions\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /{username}/{type}/{type_id}/acl\n@desc Create a new Permission\n@required {type: any, type_id: any, permission: map}\n@returns(200) New Permission\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint GET /{username}/{type}/{type_id}/acl/{id}\n@desc Returns Permission based on ID\n@required {type: any, type_id: any, id: any}\n@returns(200) Permission response\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error\"}\n\n@endpoint PUT /{username}/{type}/{type_id}/acl/{id}\n@desc Replace an existing Permission\n@required {type: any, type_id: any, id: any, permission: map}\n@returns(200) Updated permission\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint PATCH /{username}/{type}/{type_id}/acl/{id}\n@desc Update properties of an existing Permission\n@required {type: any, type_id: any, id: any, permission: map}\n@returns(200) Updated Permission\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint DELETE /{username}/{type}/{type_id}/acl/{id}\n@desc Delete an existing Permission\n@required {type: any, type_id: any, id: any}\n@returns(200) Deleted Permission successfully\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endgroup\n\n@group webhooks\n@endpoint POST /webhooks/feed/:token\n@desc Send data to a feed via webhook URL.\n@required {payload: map # Webhook payload containing data `value` parameter.}\n@returns(200) New feed data record\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endpoint POST /webhooks/feed/:token/raw\n@desc Send arbitrary data to a feed via webhook URL.\n@returns(200) New feed data record\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Server Error}\n\n@endgroup\n\n@end\n"}}