From a13d225eaa49f479e93e81863ed8a6f2028da4af Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 17 Dec 2025 18:11:54 +0000 Subject: [PATCH 01/18] feat: Update SDK according to OpenAPI spec --- .openapi-generator/FILES | 11 ---- api_device.go | 60 +++++++------------ api_usage.go | 14 +++++ configuration.go | 3 - docs/CreateMonitor.md | 2 +- docs/DeviceAPI.md | 24 ++++---- docs/GetDataUsage200ResponseDataInner.md | 42 ++++++++++--- docs/Monitor.md | 2 +- docs/UsageAPI.md | 6 +- model_create_monitor.go | 2 +- ..._get_data_usage_200_response_data_inner.go | 37 ++++++++++++ model_monitor.go | 2 +- openapi.yaml | 42 +++++++------ openapi_filtered.yaml | 42 +++++++------ 14 files changed, 174 insertions(+), 115 deletions(-) diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index d91e4e0..ab60527 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -289,15 +289,4 @@ model_user_dfu_state_machine_status.go model_user_firmware_info.go model_webhook_settings.go response.go -test/api_alert_test.go -test/api_authorization_test.go -test/api_billing_account_test.go -test/api_device_test.go -test/api_event_test.go -test/api_external_devices_test.go -test/api_monitor_test.go -test/api_project_test.go -test/api_route_test.go -test/api_usage_test.go -test/api_webhook_test.go utils.go diff --git a/api_device.go b/api_device.go index 77e7abe..78a35c2 100644 --- a/api_device.go +++ b/api_device.go @@ -273,12 +273,6 @@ type ApiDeleteDeviceRequest struct { ApiService *DeviceAPIService projectOrProductUID string deviceUID string - purge *bool -} - -func (r ApiDeleteDeviceRequest) Purge(purge bool) ApiDeleteDeviceRequest { - r.purge = &purge - return r } func (r ApiDeleteDeviceRequest) Execute() (*http.Response, error) { @@ -324,11 +318,7 @@ func (a *DeviceAPIService) DeleteDeviceExecute(r ApiDeleteDeviceRequest) (*http. localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if r.purge == nil { - return nil, reportError("purge is required and must be specified") - } - parameterAddToHeaderOrQuery(localVarQueryParams, "purge", r.purge, "form", "") // to determine the Content-Type header localVarHTTPContentTypes := []string{} @@ -1632,6 +1622,13 @@ type ApiGetDeviceEnvironmentVariablesByPinRequest struct { ApiService *DeviceAPIService productUID string deviceUID string + xAuthToken *string +} + +// For accessing endpoints by Device pin. +func (r ApiGetDeviceEnvironmentVariablesByPinRequest) XAuthToken(xAuthToken string) ApiGetDeviceEnvironmentVariablesByPinRequest { + r.xAuthToken = &xAuthToken + return r } func (r ApiGetDeviceEnvironmentVariablesByPinRequest) Execute() (*GetDeviceEnvironmentVariablesByPin200Response, *http.Response, error) { @@ -1680,6 +1677,9 @@ func (a *DeviceAPIService) GetDeviceEnvironmentVariablesByPinExecute(r ApiGetDev localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if r.xAuthToken == nil { + return localVarReturnValue, nil, reportError("xAuthToken is required and must be specified") + } // to determine the Content-Type header localVarHTTPContentTypes := []string{} @@ -1698,20 +1698,7 @@ func (a *DeviceAPIService) GetDeviceEnvironmentVariablesByPinExecute(r ApiGetDev if localVarHTTPHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept } - if r.ctx != nil { - // API Key Authentication - if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok { - if apiKey, ok := auth["pin"]; ok { - var key string - if apiKey.Prefix != "" { - key = apiKey.Prefix + " " + apiKey.Key - } else { - key = apiKey.Key - } - localVarHeaderParams["X-Auth-Token"] = key - } - } - } + parameterAddToHeaderOrQuery(localVarHeaderParams, "X-Auth-Token", r.xAuthToken, "simple", "") req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) if err != nil { return localVarReturnValue, nil, err @@ -3697,9 +3684,16 @@ type ApiSetDeviceEnvironmentVariablesByPinRequest struct { ApiService *DeviceAPIService productUID string deviceUID string + xAuthToken *string environmentVariables *EnvironmentVariables } +// For accessing endpoints by Device pin. +func (r ApiSetDeviceEnvironmentVariablesByPinRequest) XAuthToken(xAuthToken string) ApiSetDeviceEnvironmentVariablesByPinRequest { + r.xAuthToken = &xAuthToken + return r +} + // Environment variables to be added to the device func (r ApiSetDeviceEnvironmentVariablesByPinRequest) EnvironmentVariables(environmentVariables EnvironmentVariables) ApiSetDeviceEnvironmentVariablesByPinRequest { r.environmentVariables = &environmentVariables @@ -3752,6 +3746,9 @@ func (a *DeviceAPIService) SetDeviceEnvironmentVariablesByPinExecute(r ApiSetDev localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if r.xAuthToken == nil { + return localVarReturnValue, nil, reportError("xAuthToken is required and must be specified") + } if r.environmentVariables == nil { return localVarReturnValue, nil, reportError("environmentVariables is required and must be specified") } @@ -3773,22 +3770,9 @@ func (a *DeviceAPIService) SetDeviceEnvironmentVariablesByPinExecute(r ApiSetDev if localVarHTTPHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept } + parameterAddToHeaderOrQuery(localVarHeaderParams, "X-Auth-Token", r.xAuthToken, "simple", "") // body params localVarPostBody = r.environmentVariables - if r.ctx != nil { - // API Key Authentication - if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok { - if apiKey, ok := auth["pin"]; ok { - var key string - if apiKey.Prefix != "" { - key = apiKey.Prefix + " " + apiKey.Key - } else { - key = apiKey.Key - } - localVarHeaderParams["X-Auth-Token"] = key - } - } - } req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) if err != nil { return localVarReturnValue, nil, err diff --git a/api_usage.go b/api_usage.go index 5cb14f4..9891678 100644 --- a/api_usage.go +++ b/api_usage.go @@ -465,6 +465,7 @@ type ApiGetRouteLogsUsageRequest struct { endDate *int32 routeUID *[]string aggregate *string + skipRecentData *bool } // Period type for aggregation @@ -497,6 +498,12 @@ func (r ApiGetRouteLogsUsageRequest) Aggregate(aggregate string) ApiGetRouteLogs return r } +// When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. +func (r ApiGetRouteLogsUsageRequest) SkipRecentData(skipRecentData bool) ApiGetRouteLogsUsageRequest { + r.skipRecentData = &skipRecentData + return r +} + func (r ApiGetRouteLogsUsageRequest) Execute() (*GetRouteLogsUsage200Response, *http.Response, error) { return r.ApiService.GetRouteLogsUsageExecute(r) } @@ -569,6 +576,13 @@ func (a *UsageAPIService) GetRouteLogsUsageExecute(r ApiGetRouteLogsUsageRequest parameterAddToHeaderOrQuery(localVarQueryParams, "aggregate", defaultValue, "form", "") r.aggregate = &defaultValue } + if r.skipRecentData != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "skipRecentData", r.skipRecentData, "form", "") + } else { + var defaultValue bool = false + parameterAddToHeaderOrQuery(localVarQueryParams, "skipRecentData", defaultValue, "form", "") + r.skipRecentData = &defaultValue + } // to determine the Content-Type header localVarHTTPContentTypes := []string{} diff --git a/configuration.go b/configuration.go index 4eb31a0..61af8e8 100644 --- a/configuration.go +++ b/configuration.go @@ -32,9 +32,6 @@ var ( // ContextAccessToken takes a string oauth2 access token as authentication for the request. ContextAccessToken = contextKey("accesstoken") - // ContextAPIKeys takes a string apikey as authentication for the request - ContextAPIKeys = contextKey("apiKeys") - // ContextServerIndex uses a server configuration from the index. ContextServerIndex = contextKey("serverIndex") diff --git a/docs/CreateMonitor.md b/docs/CreateMonitor.md index cc8283f..37518b2 100644 --- a/docs/CreateMonitor.md +++ b/docs/CreateMonitor.md @@ -19,7 +19,7 @@ | **RoutingCooldownPeriod** | Pointer to **string** | The time period to wait before routing another event after the monitor | has been triggered. It follows the format of a number followed by a time unit. | [optional] | | **Silenced** | Pointer to **bool** | If true, alerts will be created, but no notifications will be sent. | [optional] | | **SourceSelector** | Pointer to **string** | A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value. | [optional] | -| **SourceType** | Pointer to **string** | The type of source to monitor. Currently only \"event\" is supported. | [optional] | +| **SourceType** | Pointer to **string** | The type of source to monitor. Supported values are \"event\" and \"heartbeat\". | [optional] | | **Threshold** | Pointer to **int32** | The type of condition to apply to the value selected by the source_selector | [optional] | | **Uid** | Pointer to **string** | | [optional] | diff --git a/docs/DeviceAPI.md b/docs/DeviceAPI.md index 65c2283..c8322ad 100644 --- a/docs/DeviceAPI.md +++ b/docs/DeviceAPI.md @@ -173,7 +173,7 @@ Other parameters are passed through a pointer to a apiAddQiNoteRequest struct vi ## DeleteDevice -> DeleteDevice(ctx, projectOrProductUID, deviceUID).Purge(purge).Execute() +> DeleteDevice(ctx, projectOrProductUID, deviceUID).Execute() ### Example @@ -190,11 +190,10 @@ import ( func main() { projectOrProductUID := "app:2606f411-dea6-44a0-9743-1130f57d77d8" // string | deviceUID := "dev:000000000000000" // string | - purge := true // bool | (default to false) configuration := openapiclient.NewConfiguration() apiClient := openapiclient.NewAPIClient(configuration) - r, err := apiClient.DeviceAPI.DeleteDevice(context.Background(), projectOrProductUID, deviceUID).Purge(purge).Execute() + r, err := apiClient.DeviceAPI.DeleteDevice(context.Background(), projectOrProductUID, deviceUID).Execute() if err != nil { fmt.Fprintf(os.Stderr, "Error when calling `DeviceAPI.DeleteDevice``: %v\n", err) fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) @@ -217,8 +216,6 @@ Other parameters are passed through a pointer to a apiDeleteDeviceRequest struct | Name | Type | Description | Notes | | ---- | ---- | ----------- | ----- | -**purge** | **bool** | | [default to false] - ### Return type (empty response body) @@ -950,7 +947,7 @@ Other parameters are passed through a pointer to a apiGetDeviceEnvironmentVariab ## GetDeviceEnvironmentVariablesByPin -> GetDeviceEnvironmentVariablesByPin200Response GetDeviceEnvironmentVariablesByPin(ctx, productUID, deviceUID).Execute() +> GetDeviceEnvironmentVariablesByPin200Response GetDeviceEnvironmentVariablesByPin(ctx, productUID, deviceUID).XAuthToken(xAuthToken).Execute() ### Example @@ -967,10 +964,11 @@ import ( func main() { productUID := "com.blues.bridge:sensors" // string | deviceUID := "dev:000000000000000" // string | + xAuthToken := "xAuthToken_example" // string | For accessing endpoints by Device pin. configuration := openapiclient.NewConfiguration() apiClient := openapiclient.NewAPIClient(configuration) - resp, r, err := apiClient.DeviceAPI.GetDeviceEnvironmentVariablesByPin(context.Background(), productUID, deviceUID).Execute() + resp, r, err := apiClient.DeviceAPI.GetDeviceEnvironmentVariablesByPin(context.Background(), productUID, deviceUID).XAuthToken(xAuthToken).Execute() if err != nil { fmt.Fprintf(os.Stderr, "Error when calling `DeviceAPI.GetDeviceEnvironmentVariablesByPin``: %v\n", err) fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) @@ -995,13 +993,15 @@ Other parameters are passed through a pointer to a apiGetDeviceEnvironmentVariab | Name | Type | Description | Notes | | ---- | ---- | ----------- | ----- | +**xAuthToken** | **string** | For accessing endpoints by Device pin. | + ### Return type [**GetDeviceEnvironmentVariablesByPin200Response**](GetDeviceEnvironmentVariablesByPin200Response.md) ### Authorization -[pin](../README.md#pin) +No authorization required ### HTTP request headers @@ -1863,7 +1863,7 @@ Other parameters are passed through a pointer to a apiSetDeviceEnvironmentVariab ## SetDeviceEnvironmentVariablesByPin -> EnvironmentVariables SetDeviceEnvironmentVariablesByPin(ctx, productUID, deviceUID).EnvironmentVariables(environmentVariables).Execute() +> EnvironmentVariables SetDeviceEnvironmentVariablesByPin(ctx, productUID, deviceUID).XAuthToken(xAuthToken).EnvironmentVariables(environmentVariables).Execute() ### Example @@ -1880,11 +1880,12 @@ import ( func main() { productUID := "com.blues.bridge:sensors" // string | deviceUID := "dev:000000000000000" // string | + xAuthToken := "xAuthToken_example" // string | For accessing endpoints by Device pin. environmentVariables := *openapiclient.NewEnvironmentVariables(map[string]string{"key": "Inner_example"}) // EnvironmentVariables | Environment variables to be added to the device configuration := openapiclient.NewConfiguration() apiClient := openapiclient.NewAPIClient(configuration) - resp, r, err := apiClient.DeviceAPI.SetDeviceEnvironmentVariablesByPin(context.Background(), productUID, deviceUID).EnvironmentVariables(environmentVariables).Execute() + resp, r, err := apiClient.DeviceAPI.SetDeviceEnvironmentVariablesByPin(context.Background(), productUID, deviceUID).XAuthToken(xAuthToken).EnvironmentVariables(environmentVariables).Execute() if err != nil { fmt.Fprintf(os.Stderr, "Error when calling `DeviceAPI.SetDeviceEnvironmentVariablesByPin``: %v\n", err) fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) @@ -1909,6 +1910,7 @@ Other parameters are passed through a pointer to a apiSetDeviceEnvironmentVariab | Name | Type | Description | Notes | | ---- | ---- | ----------- | ----- | +**xAuthToken** | **string** | For accessing endpoints by Device pin. | **environmentVariables** | [**EnvironmentVariables**](EnvironmentVariables.md) | Environment variables to be added to the device | ### Return type @@ -1917,7 +1919,7 @@ Other parameters are passed through a pointer to a apiSetDeviceEnvironmentVariab ### Authorization -[pin](../README.md#pin) +No authorization required ### HTTP request headers diff --git a/docs/GetDataUsage200ResponseDataInner.md b/docs/GetDataUsage200ResponseDataInner.md index a53622c..a81783e 100644 --- a/docs/GetDataUsage200ResponseDataInner.md +++ b/docs/GetDataUsage200ResponseDataInner.md @@ -2,14 +2,15 @@ ## Properties -| Name | Type | Description | Notes | -| ---------- | ------------------------------- | ------------------------------------------------------------------------------------------- | ---------- | -| **Data** | [**[]UsageData**](UsageData.md) | | -| **Device** | Pointer to **string** | The device UID this usage data belongs to (only present when aggregate is 'device') | [optional] | -| **Fleet** | Pointer to **string** | The fleet UID this usage data belongs to (only present when aggregate is 'fleet') | [optional] | -| **Iccid** | Pointer to **string** | The ICCID of the cellular SIM card (only present when type is 'cellular') | [optional] | -| **Imsi** | Pointer to **string** | The IMSI of the satellite device (only present when type is 'satellite') | [optional] | -| **Type** | **string** | The type of connectivity | +| Name | Type | Description | Notes | +| --------------- | ------------------------------- | ------------------------------------------------------------------------------------------- | ---------- | +| **Data** | [**[]UsageData**](UsageData.md) | | +| **Device** | Pointer to **string** | The device UID this usage data belongs to (only present when aggregate is 'device') | [optional] | +| **DeviceCount** | Pointer to **int32** | the number of devices represented by this data point | [optional] | +| **Fleet** | Pointer to **string** | The fleet UID this usage data belongs to (only present when aggregate is 'fleet') | [optional] | +| **Iccid** | Pointer to **string** | The ICCID of the cellular SIM card (only present when type is 'cellular') | [optional] | +| **Imsi** | Pointer to **string** | The IMSI of the satellite device (only present when type is 'satellite') | [optional] | +| **Type** | **string** | The type of connectivity | ## Methods @@ -74,6 +75,31 @@ SetDevice sets Device field to given value. HasDevice returns a boolean if a field has been set. +### GetDeviceCount + +`func (o *GetDataUsage200ResponseDataInner) GetDeviceCount() int32` + +GetDeviceCount returns the DeviceCount field if non-nil, zero value otherwise. + +### GetDeviceCountOk + +`func (o *GetDataUsage200ResponseDataInner) GetDeviceCountOk() (*int32, bool)` + +GetDeviceCountOk returns a tuple with the DeviceCount field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetDeviceCount + +`func (o *GetDataUsage200ResponseDataInner) SetDeviceCount(v int32)` + +SetDeviceCount sets DeviceCount field to given value. + +### HasDeviceCount + +`func (o *GetDataUsage200ResponseDataInner) HasDeviceCount() bool` + +HasDeviceCount returns a boolean if a field has been set. + ### GetFleet `func (o *GetDataUsage200ResponseDataInner) GetFleet() string` diff --git a/docs/Monitor.md b/docs/Monitor.md index d10f25a..53be2fd 100644 --- a/docs/Monitor.md +++ b/docs/Monitor.md @@ -19,7 +19,7 @@ | **RoutingCooldownPeriod** | Pointer to **string** | The time period to wait before routing another event after the monitor | has been triggered. It follows the format of a number followed by a time unit. | [optional] | | **Silenced** | Pointer to **bool** | If true, alerts will be created, but no notifications will be sent. | [optional] | | **SourceSelector** | Pointer to **string** | A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value. | [optional] | -| **SourceType** | Pointer to **string** | The type of source to monitor. Currently only \"event\" is supported. | [optional] | +| **SourceType** | Pointer to **string** | The type of source to monitor. Supported values are \"event\" and \"heartbeat\". | [optional] | | **Threshold** | Pointer to **int32** | The type of condition to apply to the value selected by the source_selector | [optional] | | **Uid** | Pointer to **string** | | [optional] | diff --git a/docs/UsageAPI.md b/docs/UsageAPI.md index 9649ea1..f69942a 100644 --- a/docs/UsageAPI.md +++ b/docs/UsageAPI.md @@ -167,7 +167,7 @@ Other parameters are passed through a pointer to a apiGetEventsUsageRequest stru ## GetRouteLogsUsage -> GetRouteLogsUsage200Response GetRouteLogsUsage(ctx, projectOrProductUID).Period(period).StartDate(startDate).EndDate(endDate).RouteUID(routeUID).Aggregate(aggregate).Execute() +> GetRouteLogsUsage200Response GetRouteLogsUsage(ctx, projectOrProductUID).Period(period).StartDate(startDate).EndDate(endDate).RouteUID(routeUID).Aggregate(aggregate).SkipRecentData(skipRecentData).Execute() ### Example @@ -188,10 +188,11 @@ func main() { endDate := int32(1657894210) // int32 | End date for filtering results, specified as a Unix timestamp (optional) routeUID := []string{"Inner_example"} // []string | A Route UID. (optional) aggregate := "aggregate_example" // string | Aggregation level for results (optional) (default to "route") + skipRecentData := true // bool | When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. (optional) (default to false) configuration := openapiclient.NewConfiguration() apiClient := openapiclient.NewAPIClient(configuration) - resp, r, err := apiClient.UsageAPI.GetRouteLogsUsage(context.Background(), projectOrProductUID).Period(period).StartDate(startDate).EndDate(endDate).RouteUID(routeUID).Aggregate(aggregate).Execute() + resp, r, err := apiClient.UsageAPI.GetRouteLogsUsage(context.Background(), projectOrProductUID).Period(period).StartDate(startDate).EndDate(endDate).RouteUID(routeUID).Aggregate(aggregate).SkipRecentData(skipRecentData).Execute() if err != nil { fmt.Fprintf(os.Stderr, "Error when calling `UsageAPI.GetRouteLogsUsage``: %v\n", err) fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) @@ -220,6 +221,7 @@ Other parameters are passed through a pointer to a apiGetRouteLogsUsageRequest s **endDate** | **int32** | End date for filtering results, specified as a Unix timestamp | **routeUID** | **[]string** | A Route UID. | **aggregate** | **string** | Aggregation level for results | [default to "route"] +**skipRecentData** | **bool** | When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. | [default to false] ### Return type diff --git a/model_create_monitor.go b/model_create_monitor.go index c562273..62b8508 100644 --- a/model_create_monitor.go +++ b/model_create_monitor.go @@ -45,7 +45,7 @@ type CreateMonitor struct { Silenced *bool `json:"silenced,omitempty"` // A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value. SourceSelector *string `json:"source_selector,omitempty"` - // The type of source to monitor. Currently only \"event\" is supported. + // The type of source to monitor. Supported values are \"event\" and \"heartbeat\". SourceType *string `json:"source_type,omitempty"` // The type of condition to apply to the value selected by the source_selector Threshold *int32 `json:"threshold,omitempty"` diff --git a/model_get_data_usage_200_response_data_inner.go b/model_get_data_usage_200_response_data_inner.go index 98c4b9a..ada8073 100644 --- a/model_get_data_usage_200_response_data_inner.go +++ b/model_get_data_usage_200_response_data_inner.go @@ -25,6 +25,8 @@ type GetDataUsage200ResponseDataInner struct { Data []UsageData `json:"data"` // The device UID this usage data belongs to (only present when aggregate is 'device') Device *string `json:"device,omitempty"` + // the number of devices represented by this data point + DeviceCount *int32 `json:"device_count,omitempty"` // The fleet UID this usage data belongs to (only present when aggregate is 'fleet') Fleet *string `json:"fleet,omitempty"` // The ICCID of the cellular SIM card (only present when type is 'cellular') @@ -112,6 +114,38 @@ func (o *GetDataUsage200ResponseDataInner) SetDevice(v string) { o.Device = &v } +// GetDeviceCount returns the DeviceCount field value if set, zero value otherwise. +func (o *GetDataUsage200ResponseDataInner) GetDeviceCount() int32 { + if o == nil || IsNil(o.DeviceCount) { + var ret int32 + return ret + } + return *o.DeviceCount +} + +// GetDeviceCountOk returns a tuple with the DeviceCount field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *GetDataUsage200ResponseDataInner) GetDeviceCountOk() (*int32, bool) { + if o == nil || IsNil(o.DeviceCount) { + return nil, false + } + return o.DeviceCount, true +} + +// HasDeviceCount returns a boolean if a field has been set. +func (o *GetDataUsage200ResponseDataInner) HasDeviceCount() bool { + if o != nil && !IsNil(o.DeviceCount) { + return true + } + + return false +} + +// SetDeviceCount gets a reference to the given int32 and assigns it to the DeviceCount field. +func (o *GetDataUsage200ResponseDataInner) SetDeviceCount(v int32) { + o.DeviceCount = &v +} + // GetFleet returns the Fleet field value if set, zero value otherwise. func (o *GetDataUsage200ResponseDataInner) GetFleet() string { if o == nil || IsNil(o.Fleet) { @@ -246,6 +280,9 @@ func (o GetDataUsage200ResponseDataInner) ToMap() (map[string]interface{}, error if !IsNil(o.Device) { toSerialize["device"] = o.Device } + if !IsNil(o.DeviceCount) { + toSerialize["device_count"] = o.DeviceCount + } if !IsNil(o.Fleet) { toSerialize["fleet"] = o.Fleet } diff --git a/model_monitor.go b/model_monitor.go index 0c963db..1beeaad 100644 --- a/model_monitor.go +++ b/model_monitor.go @@ -45,7 +45,7 @@ type Monitor struct { Silenced *bool `json:"silenced,omitempty"` // A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value. SourceSelector *string `json:"source_selector,omitempty"` - // The type of source to monitor. Currently only \"event\" is supported. + // The type of source to monitor. Supported values are \"event\" and \"heartbeat\". SourceType *string `json:"source_type,omitempty"` // The type of condition to apply to the value selected by the source_selector Threshold *int32 `json:"threshold,omitempty"` diff --git a/openapi.yaml b/openapi.yaml index 8661551..6406d6a 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -152,13 +152,12 @@ paths: $ref: '#/components/responses/GetDeviceEnvironmentVariablesResponse' default: $ref: '#/components/responses/ErrorResponse' - security: - - pin: [] tags: - device parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/deviceUIDParam' + - $ref: '#/components/parameters/XAuthTokenHeader' put: operationId: SetDeviceEnvironmentVariablesByPin description: Set environment variables of a device with device pin authorization @@ -174,8 +173,6 @@ paths: $ref: '#/components/responses/EnvironmentVariablesResponse' default: $ref: '#/components/responses/ErrorResponse' - security: - - pin: [] tags: - device '/v1/products/{productUID}/ext-devices/{deviceUID}/event': @@ -450,13 +447,6 @@ paths: delete: operationId: DeleteDevice description: Delete Device - parameters: - - name: purge - in: query - required: true - schema: - type: boolean - default: false responses: '204': description: Successful operation @@ -2538,6 +2528,13 @@ paths: enum: - route - project + - name: skipRecentData + in: query + description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' + required: false + schema: + type: boolean + default: false responses: '200': $ref: '#/components/responses/UsageRouteLogsResponse' @@ -3262,6 +3259,13 @@ components: schema: type: string example: Abc_123-2646f411-dc56-44a0-9743-4130f47a74h8 + XAuthTokenHeader: + description: For accessing endpoints by Device pin. + in: header + name: X-Auth-Token + required: true + schema: + type: string schemas: Alert: type: object @@ -3293,6 +3297,7 @@ components: type: string enum: - event + - device source_uid: description: The UID of the source of the alert type: string @@ -3522,8 +3527,9 @@ components: - required: - name - description - - notefile_filter - alert_routes + - source_type + - threshold CreateUpdateRepository: type: object properties: @@ -4656,10 +4662,11 @@ components: type: string example: body.temperature source_type: - description: The type of source to monitor. Currently only "event" is supported. + description: The type of source to monitor. Supported values are "event" and "heartbeat". type: string enum: - event + - heartbeat threshold: description: The type of condition to apply to the value selected by the source_selector type: integer @@ -6097,6 +6104,9 @@ components: description: The device UID this usage data belongs to (only present when aggregate is 'device') type: string example: 'dev:123456789012345' + device_count: + description: the number of devices represented by this data point + type: integer fleet: description: The fleet UID this usage data belongs to (only present when aggregate is 'fleet') type: string @@ -6151,12 +6161,6 @@ components: Use a personal access token from notehub.io/api-access scheme: bearer type: http - pin: - description: | - For accessing endpoints by Device pin. - in: header - name: X-Auth-Token - type: apiKey tags: - description: Authorization operations name: authorization diff --git a/openapi_filtered.yaml b/openapi_filtered.yaml index 7d7e68a..ac666ae 100644 --- a/openapi_filtered.yaml +++ b/openapi_filtered.yaml @@ -152,13 +152,12 @@ paths: $ref: '#/components/responses/GetDeviceEnvironmentVariablesResponse' default: $ref: '#/components/responses/ErrorResponse' - security: - - pin: [] tags: - device parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/deviceUIDParam' + - $ref: '#/components/parameters/XAuthTokenHeader' put: operationId: SetDeviceEnvironmentVariablesByPin description: Set environment variables of a device with device pin authorization @@ -174,8 +173,6 @@ paths: $ref: '#/components/responses/EnvironmentVariablesResponse' default: $ref: '#/components/responses/ErrorResponse' - security: - - pin: [] tags: - device /v1/products/{productUID}/ext-devices/{deviceUID}/event: @@ -450,13 +447,6 @@ paths: delete: operationId: DeleteDevice description: Delete Device - parameters: - - name: purge - in: query - required: true - schema: - type: boolean - default: false responses: "204": description: Successful operation @@ -2506,6 +2496,13 @@ paths: enum: - route - project + - name: skipRecentData + in: query + description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. + required: false + schema: + type: boolean + default: false responses: "200": $ref: '#/components/responses/UsageRouteLogsResponse' @@ -3230,6 +3227,13 @@ components: schema: type: string example: Abc_123-2646f411-dc56-44a0-9743-4130f47a74h8 + XAuthTokenHeader: + description: For accessing endpoints by Device pin. + in: header + name: X-Auth-Token + required: true + schema: + type: string schemas: Alert: type: object @@ -3261,6 +3265,7 @@ components: type: string enum: - event + - device source_uid: description: The UID of the source of the alert type: string @@ -3490,8 +3495,9 @@ components: - required: - name - description - - notefile_filter - alert_routes + - source_type + - threshold CreateUpdateRepository: type: object properties: @@ -4624,10 +4630,11 @@ components: type: string example: body.temperature source_type: - description: The type of source to monitor. Currently only "event" is supported. + description: The type of source to monitor. Supported values are "event" and "heartbeat". type: string enum: - event + - heartbeat threshold: description: The type of condition to apply to the value selected by the source_selector type: integer @@ -6065,6 +6072,9 @@ components: description: The device UID this usage data belongs to (only present when aggregate is 'device') type: string example: dev:123456789012345 + device_count: + description: the number of devices represented by this data point + type: integer fleet: description: The fleet UID this usage data belongs to (only present when aggregate is 'fleet') type: string @@ -6119,12 +6129,6 @@ components: Use a personal access token from notehub.io/api-access scheme: bearer type: http - pin: - description: | - For accessing endpoints by Device pin. - in: header - name: X-Auth-Token - type: apiKey tags: - description: Authorization operations name: authorization From 836ecb800bae41bfc80a2fd111bbea57365c028d Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 8 Jan 2026 16:59:27 +0000 Subject: [PATCH 02/18] feat: Update OpenAPI file replicated from Notehub commit 804eabf --- openapi.yaml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 6406d6a..36eb5c1 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -1493,6 +1493,8 @@ paths: - $ref: '#/components/parameters/filenameQueryParam' - $ref: '#/components/parameters/md5QueryParam' - $ref: '#/components/parameters/unpublishedQueryParam' + - $ref: '#/components/parameters/firmwareSortByParam' + - $ref: '#/components/parameters/firmwareSortOrderParam' responses: '200': description: Success @@ -2885,6 +2887,30 @@ components: required: false schema: type: string + firmwareSortByParam: + description: Field to sort by + in: query + name: sortBy + required: false + schema: + type: string + default: created + enum: + - created + - name + - version + - length + firmwareSortOrderParam: + description: 'Sort order (asc for ascending, desc for descending)' + in: query + name: sortOrder + required: false + schema: + type: string + default: desc + enum: + - asc + - desc firmwareTypeParam: in: path name: firmwareType From 6573ef40ec206a9d36921ac87f4f36085473b268 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 9 Jan 2026 09:25:26 +0000 Subject: [PATCH 03/18] feat: Update OpenAPI file replicated from Notehub commit 06bd4f1 --- openapi.yaml | 69 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 8 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 36eb5c1..9106327 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -5210,6 +5210,34 @@ components: type: string format: uri additionalProperties: false + SatelliteDataUsage: + type: object + properties: + bytes_remaining: + description: Bytes remaining in the plan + type: integer + format: int64 + example: 18600 + bytes_total: + description: Total bytes included in the plan + type: integer + format: int64 + example: 18650 + bytes_used: + description: Bytes used to date + type: integer + format: int64 + example: 49 + bytes_used_billable: + description: Billable bytes used to date + type: integer + format: int64 + example: 50 + required: + - bytes_total + - bytes_used + - bytes_used_billable + - bytes_remaining SatellitePlan: type: object properties: @@ -5218,13 +5246,16 @@ components: type: integer format: int64 example: 1609459200 - billable_bytes: - $ref: '#/components/schemas/DataUsage' - last_updated: - description: Time this plan information was last updated + last_session_at: + description: When this Starnote last had a session type: integer format: int64 - example: 1656010061 + example: 1808675309 + minimum_billable_bytes: + description: Minimum billable bytes + type: integer + format: int64 + example: 50 ntn_provider: description: Non-Terrestrial Network provider name type: string @@ -5233,6 +5264,8 @@ components: description: Provider-specific identifier for the satellite subscription type: string example: 'skylo:5746354465786' + satellite_data_usage: + $ref: '#/components/schemas/SatelliteDataUsage' nullable: true required: - ntn_provider @@ -5534,6 +5567,18 @@ components: UsageData: type: object properties: + billable_bytes_received: + description: Billable bytes received (only for packet-based protocols) + type: integer + format: int64 + billable_bytes_sent: + description: Billable bytes sent (only for packet-based protocols) + type: integer + format: int64 + billable_bytes_total: + description: Total billable bytes (only for packet-based protocols) + type: integer + format: int64 bytes_received: type: integer format: int64 @@ -5542,6 +5587,14 @@ components: type: integer format: int64 example: 524288 + packets_received: + description: Packets received (only for packet-based protocols) + type: integer + format: int64 + packets_sent: + description: Packets sent (only for packet-based protocols) + type: integer + format: int64 period: type: string format: date-time @@ -6141,10 +6194,10 @@ components: description: The ICCID of the cellular SIM card (only present when type is 'cellular') type: string example: '12345678901234567890' - imsi: - description: The IMSI of the satellite device (only present when type is 'satellite') + psid: + description: The PSID (Packet Service ID) of the satellite (or other packet-based device) type: string - example: '123456789012345' + example: 'skylo:5746354465786' type: description: The type of connectivity type: string From 57e4ac851dc3edee82240807504b3dfdf3b0c131 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 14 Jan 2026 19:02:44 +0000 Subject: [PATCH 04/18] feat: Update OpenAPI file replicated from Notehub commit 2bbd4d9 --- openapi.yaml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 9106327..325cd50 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -2361,6 +2361,8 @@ paths: - $ref: '#/components/parameters/systemFilesOnlyParam' - $ref: '#/components/parameters/mostRecentOnlyParam' - $ref: '#/components/parameters/filesQueryParam' + - $ref: '#/components/parameters/routingStatusParam' + - $ref: '#/components/parameters/responseStatusParam' responses: '200': description: Successful operation @@ -3117,6 +3119,15 @@ components: schema: type: string example: 'rid:2606f411-dea6-44a0-9743-1130f57d77d8' + responseStatusParam: + example: 500 + in: query + name: responseStatus + required: false + schema: + type: array + items: + type: string routeLogsSortByParam: in: query name: sortBy @@ -3155,6 +3166,18 @@ components: items: type: string style: form + routingStatusParam: + example: failure + in: query + name: routingStatus + required: false + schema: + type: array + items: + enum: + - success + - failure + type: string selectFieldsParam: description: 'Comma-separated list of fields to select from JSON payload (e.g., "field1,field2.subfield,field3"), this will reflect the columns in the CSV output.' in: query From c3a1109c32d4a463793db3450c32468058adccae Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 27 Jan 2026 21:55:24 +0000 Subject: [PATCH 05/18] feat: Update OpenAPI file replicated from Notehub commit 3d4b541 --- openapi.yaml | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 325cd50..b9fd0ba 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -533,22 +533,6 @@ paths: - personalAccessToken: [] tags: - device - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/disable-connectivity-assurance': - post: - operationId: DisableDeviceConnectivityAssurance - description: Disable Connectivity Assurance - parameters: - - $ref: '#/components/parameters/projectOrProductUIDParam' - - $ref: '#/components/parameters/deviceUIDParam' - responses: - '200': - description: Successful operation - default: - $ref: '#/components/responses/ErrorResponse' - security: - - personalAccessToken: [] - tags: - - device '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/enable': post: operationId: EnableDevice @@ -565,22 +549,6 @@ paths: - personalAccessToken: [] tags: - device - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/enable-connectivity-assurance': - post: - operationId: EnableDeviceConnectivityAssurance - description: Enable Connectivity Assurance - parameters: - - $ref: '#/components/parameters/projectOrProductUIDParam' - - $ref: '#/components/parameters/deviceUIDParam' - responses: - '200': - description: Successful operation - default: - $ref: '#/components/responses/ErrorResponse' - security: - - personalAccessToken: [] - tags: - - device '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_hierarchy': get: operationId: GetDeviceEnvironmentHierarchy From 71ff01ef08ee1e0aba02aa6db85258d4321eb53b Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 25 Mar 2026 17:07:17 +0000 Subject: [PATCH 06/18] feat: Update OpenAPI file replicated from Notehub commit 6a0819d --- openapi.yaml | 299 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 281 insertions(+), 18 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index b9fd0ba..a0bb9ba 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -143,6 +143,90 @@ paths: - personalAccessToken: [] tags: - billing_account + '/v1/billing-accounts/{billingAccountUID}': + get: + operationId: GetBillingAccount + description: Get Billing Account Information + parameters: + - $ref: '#/components/parameters/billingAccountUIDParam' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + type: object + properties: + name: + type: string + owner: + type: string + plan: + type: object + properties: + current_balance: + type: integer + format: int64 + end_date: + type: string + format: date-time + event_capacity: + type: integer + format: int64 + start_date: + type: string + format: date-time + type: + type: string + enum: + - Enterprise + - Essentials + suspended: + type: boolean + uid: + type: string + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - billing_account + '/v1/billing-accounts/{billingAccountUID}/balance-history': + get: + operationId: GetBillingAccountBalanceHistory + description: 'Get Billing Account Balance history, only enterprise supported' + parameters: + - $ref: '#/components/parameters/billingAccountUIDParam' + - $ref: '#/components/parameters/startDateParam' + - $ref: '#/components/parameters/endDateParam' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + properties: + period: + type: string + format: date-time + remaining_event_capacity: + type: integer + format: int64 + required: + - remaining_event_capacity + - period + type: object + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - billing_account '/v1/products/{productUID}/devices/{deviceUID}/environment_variables_with_pin': get: operationId: GetDeviceEnvironmentVariablesByPin @@ -375,6 +459,28 @@ paths: - personalAccessToken: [] tags: - alert + '/v1/projects/{projectOrProductUID}/aws-role-config': + get: + operationId: GetAWSRoleConfig + summary: Get AWS role configuration for role-based authentication + description: | + Returns the AWS Account ID and External ID needed to configure an IAM role + trust policy for role-based authentication on AWS routes. + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + responses: + '200': + description: AWS role configuration + content: + application/json: + schema: + $ref: '#/components/schemas/AWSRoleConfig' + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - project '/v1/projects/{projectOrProductUID}/clone': post: operationId: CloneProject @@ -829,6 +935,23 @@ paths: - personalAccessToken: [] tags: - device + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notefiles/{notefileID}': + post: + operationId: CreateNotefile + description: Creates an empty Notefile on the device. + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/deviceUIDParam' + - $ref: '#/components/parameters/notefileIDParam' + responses: + '200': + description: An empty object means success + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - device '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}': get: operationId: GetNotefile @@ -1108,6 +1231,7 @@ paths: - $ref: '#/components/parameters/pageNumParam' - $ref: '#/components/parameters/startDateParam' - $ref: '#/components/parameters/endDateParam' + - $ref: '#/components/parameters/firstSyncParam' responses: '200': $ref: '#/components/responses/SessionResponse' @@ -1479,6 +1603,31 @@ paths: tags: - project '/v1/projects/{projectOrProductUID}/firmware/{firmwareType}/{filename}': + get: + operationId: DownloadFirmware + description: Download firmware binary + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/firmwareTypeParam' + - name: filename + in: path + required: true + schema: + type: string + responses: + '200': + description: Firmware binary + content: + application/octet-stream: + schema: + type: string + format: binary + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - project put: operationId: UploadFirmware description: Upload firmware binary @@ -2373,6 +2522,7 @@ paths: - $ref: '#/components/parameters/endDateParam' - $ref: '#/components/parameters/deviceUIDParamQuery' - $ref: '#/components/parameters/fleetUIDFilterQueryParam' + - $ref: '#/components/parameters/usageLimitQueryParam' - name: period in: query description: Period type for aggregation @@ -2413,6 +2563,7 @@ paths: - $ref: '#/components/parameters/endDateParam' - $ref: '#/components/parameters/deviceUIDParamQuery' - $ref: '#/components/parameters/fleetUIDFilterQueryParam' + - $ref: '#/components/parameters/usageLimitQueryParam' - name: period in: query description: Period type for aggregation @@ -2480,6 +2631,7 @@ paths: - $ref: '#/components/parameters/startDateParam' - $ref: '#/components/parameters/endDateParam' - $ref: '#/components/parameters/routeUIDParamQuery' + - $ref: '#/components/parameters/usageLimitQueryParam' - name: period in: query description: Period type for aggregation @@ -2526,6 +2678,7 @@ paths: - $ref: '#/components/parameters/endDateParam' - $ref: '#/components/parameters/deviceUIDParamQuery' - $ref: '#/components/parameters/fleetUIDFilterQueryParam' + - $ref: '#/components/parameters/usageLimitQueryParam' - name: period in: query description: Period type for aggregation @@ -2674,6 +2827,13 @@ paths: - webhook components: parameters: + billingAccountUIDParam: + example: 00000000-0000-0000-000000000001 + in: path + name: billingAccountUID + required: true + schema: + type: string cursorParam: description: | A cursor, which can be obtained from the `next_cursor` value from a previous call to this endpoint. The results set returned will include this event as its first result if the given identifier is actually the UID of an event. If this event UID is not found, the parameter is ignored and the results set is the same as if the parameter was not included. @@ -2896,6 +3056,14 @@ components: required: false schema: type: string + firstSyncParam: + description: 'When true, filters results to only show first sync sessions' + in: query + name: firstSync + required: false + schema: + type: boolean + default: false fleetUIDFilterQueryParam: description: Filter by Fleet UID explode: true @@ -3262,6 +3430,16 @@ components: required: false schema: type: boolean + usageLimitQueryParam: + description: Limit the number of data points returned + in: query + name: limit + required: false + schema: + type: integer + default: 200000 + maximum: 400000 + minimum: 1 versionQueryParam: in: query name: version @@ -3284,6 +3462,19 @@ components: schema: type: string schemas: + AWSRoleConfig: + description: Configuration needed to set up an IAM role trust policy for role-based authentication on AWS routes + type: object + properties: + aws_account_id: + description: The Blues AWS Account ID to trust in your IAM role's trust policy + type: string + external_id: + description: The External ID to use in your IAM role's trust policy condition + type: string + required: + - aws_account_id + - external_id Alert: type: object properties: @@ -3407,6 +3598,9 @@ components: type: string region: type: string + role_arn: + description: IAM Role ARN for role-based authentication via STS AssumeRole + type: string throttle_ms: type: integer timeout: @@ -4458,9 +4652,15 @@ components: filename: description: The name of the firmware file. type: string + info: + description: User-defined metadata + type: object md5: description: The MD5 hash of the firmware file. type: string + notes: + description: User-defined notes + type: string organization: description: The organization that owns the firmware. type: string @@ -4645,6 +4845,7 @@ components: - less_than_or_equal_to - equal_to - not_equal_to + - count description: type: string disabled: @@ -5213,7 +5414,7 @@ components: description: Total bytes included in the plan type: integer format: int64 - example: 18650 + example: 10000 bytes_used: description: Bytes used to date type: integer @@ -5558,32 +5759,20 @@ components: UsageData: type: object properties: - billable_bytes_received: - description: Billable bytes received (only for packet-based protocols) - type: integer - format: int64 - billable_bytes_sent: - description: Billable bytes sent (only for packet-based protocols) - type: integer - format: int64 billable_bytes_total: description: Total billable bytes (only for packet-based protocols) type: integer format: int64 - bytes_received: - type: integer - format: int64 - example: 524288 - bytes_sent: + downlink_bytes: type: integer format: int64 example: 524288 - packets_received: - description: Packets received (only for packet-based protocols) + downlink_bytes_billable: + description: Billable downlink bytes (only for packet-based protocols) type: integer format: int64 - packets_sent: - description: Packets sent (only for packet-based protocols) + downlink_packets: + description: Downlink packets (only for packet-based protocols) type: integer format: int64 period: @@ -5594,12 +5783,29 @@ components: type: integer format: int64 example: 1048576 + uplink_bytes: + type: integer + format: int64 + example: 524288 + uplink_bytes_billable: + description: Billable uplink bytes (only for packet-based protocols) + type: integer + format: int64 + uplink_packets: + description: Uplink packets (only for packet-based protocols) + type: integer + format: int64 required: - period - total_bytes UsageEventsData: type: object properties: + billable_events: + description: 'Events that are billable, this include all events except platform events' + type: integer + format: int64 + example: 10 device: type: string example: 'dev:123456789012345' @@ -5625,6 +5831,10 @@ components: type: integer format: int64 example: 15 + total_days_in_period: + description: 'The total number of days in this period. Useful for calculating daily averages for month period. Note that the current period will be the total number of days in the current period, including days in the future.' + type: integer + format: int32 total_devices: description: Total devices represented in this count type: integer @@ -5634,6 +5844,18 @@ components: type: integer format: int64 example: 42 + total_fw_updates: + description: Number of firmware updates in this period (from _health.qo DFU events) + type: integer + format: int64 + example: 1 + nullable: true + total_reboots: + description: Number of device reboots in this period (from _health.qo boot events) + type: integer + format: int64 + example: 2 + nullable: true watchdog_events: description: 'Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time.' type: integer @@ -5652,11 +5874,19 @@ components: type: array items: $ref: '#/components/schemas/UsageEventsData' + truncated: + $ref: '#/components/schemas/UsageTruncatedField' required: - data UsageRouteLogsData: type: object properties: + avg_latency_ms: + description: Average routing latency in milliseconds for route logs with recorded duration + type: number + format: double + example: 342.5 + nullable: true failed_routes: type: integer format: int64 @@ -5688,6 +5918,11 @@ components: device: type: string example: 'dev:123456789012345' + first_sync_sessions: + description: Number of first sync sessions in this period + type: integer + format: int64 + example: 2 fleet: type: string example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' @@ -5699,6 +5934,22 @@ components: type: integer format: int64 example: 12 + sessions_by_transport: + description: 'Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan)' + type: object + example: + cell: 8 + ntn: 1 + wifi: 3 + additionalProperties: + format: int64 + type: integer + tls_sessions: + description: Number of TLS sessions in this period + type: integer + format: int64 + example: 3 + nullable: true total_bytes: type: integer format: int64 @@ -5710,8 +5961,13 @@ components: required: - period - sessions + - first_sync_sessions - total_bytes - total_devices + UsageTruncatedField: + description: 'If the data is truncated that means that the parameters selected resulted in a response of over | the requested limit of data points, in order to ensure' + type: boolean + properties: {} UserDfuStateMachine: type: object properties: @@ -6199,6 +6455,8 @@ components: - type - data type: object + truncated: + $ref: '#/components/schemas/UsageTruncatedField' UsageRouteLogsResponse: description: Response body for Route Log Usage content: @@ -6210,6 +6468,8 @@ components: type: array items: $ref: '#/components/schemas/UsageRouteLogsData' + truncated: + $ref: '#/components/schemas/UsageTruncatedField' required: - route_logs UsageSessionsResponse: @@ -6223,8 +6483,11 @@ components: type: array items: $ref: '#/components/schemas/UsageSessionsData' + truncated: + $ref: '#/components/schemas/UsageTruncatedField' required: - sessions + - truncated securitySchemes: personalAccessToken: description: | From ba93389b7ae1db59866580887045283e1dd56cf7 Mon Sep 17 00:00:00 2001 From: Alex Bucknall Date: Fri, 27 Mar 2026 13:56:50 +0000 Subject: [PATCH 07/18] feat: regenerate SDK after merging main Co-Authored-By: Claude Opus 4.6 (1M context) --- .openapi-generator/FILES | 11 ++++ docs/FirmwareInfo.md | 80 ++++++++++++++++++++++----- docs/UsageEventsData.md | 76 ++++++++++++++++++++++++++ docs/UsageRouteLogsData.md | 52 +++++++++++++++--- docs/UsageSessionsData.md | 82 ++++++++++++++++++++++++---- model_firmware_info.go | 76 ++++++++++++++++++++++++++ model_usage_events_data.go | 98 +++++++++++++++++++++++++++++++++ model_usage_route_logs_data.go | 53 +++++++++++++++++- model_usage_sessions_data.go | 99 +++++++++++++++++++++++++++++++--- openapi_filtered.yaml | 40 ++++++++++++++ 10 files changed, 629 insertions(+), 38 deletions(-) diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index 39ec824..dcb435e 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -303,4 +303,15 @@ model_user_dfu_state_machine_status.go model_user_firmware_info.go model_webhook_settings.go response.go +test/api_alert_test.go +test/api_authorization_test.go +test/api_billing_account_test.go +test/api_device_test.go +test/api_event_test.go +test/api_external_devices_test.go +test/api_monitor_test.go +test/api_project_test.go +test/api_route_test.go +test/api_usage_test.go +test/api_webhook_test.go utils.go diff --git a/docs/FirmwareInfo.md b/docs/FirmwareInfo.md index 39242c3..7087558 100644 --- a/docs/FirmwareInfo.md +++ b/docs/FirmwareInfo.md @@ -2,20 +2,22 @@ ## Properties -| Name | Type | Description | Notes | -| ---------------- | --------------------- | -------------------------------------------- | ---------- | -| **Built** | Pointer to **string** | The date the firmware was built. | [optional] | -| **Created** | Pointer to **string** | The date the firmware was created. | [optional] | -| **Description** | Pointer to **string** | A description of the firmware. | [optional] | -| **Filename** | Pointer to **string** | The name of the firmware file. | [optional] | -| **Md5** | Pointer to **string** | The MD5 hash of the firmware file. | [optional] | -| **Organization** | Pointer to **string** | The organization that owns the firmware. | [optional] | -| **Product** | Pointer to **string** | The product that the firmware is for. | [optional] | -| **Published** | Pointer to **bool** | True if the firmware is published. | [optional] | -| **Tags** | Pointer to **string** | A list of tags associated with the firmware. | [optional] | -| **Target** | Pointer to **string** | The target device for the firmware. | [optional] | -| **Type** | Pointer to **string** | The type of firmware. | [optional] | -| **Version** | Pointer to **string** | The version of the firmware. | [optional] | +| Name | Type | Description | Notes | +| ---------------- | ------------------------------------- | -------------------------------------------- | ---------- | +| **Built** | Pointer to **string** | The date the firmware was built. | [optional] | +| **Created** | Pointer to **string** | The date the firmware was created. | [optional] | +| **Description** | Pointer to **string** | A description of the firmware. | [optional] | +| **Filename** | Pointer to **string** | The name of the firmware file. | [optional] | +| **Info** | Pointer to **map[string]interface{}** | User-defined metadata | [optional] | +| **Md5** | Pointer to **string** | The MD5 hash of the firmware file. | [optional] | +| **Notes** | Pointer to **string** | User-defined notes | [optional] | +| **Organization** | Pointer to **string** | The organization that owns the firmware. | [optional] | +| **Product** | Pointer to **string** | The product that the firmware is for. | [optional] | +| **Published** | Pointer to **bool** | True if the firmware is published. | [optional] | +| **Tags** | Pointer to **string** | A list of tags associated with the firmware. | [optional] | +| **Target** | Pointer to **string** | The target device for the firmware. | [optional] | +| **Type** | Pointer to **string** | The type of firmware. | [optional] | +| **Version** | Pointer to **string** | The version of the firmware. | [optional] | ## Methods @@ -136,6 +138,31 @@ SetFilename sets Filename field to given value. HasFilename returns a boolean if a field has been set. +### GetInfo + +`func (o *FirmwareInfo) GetInfo() map[string]interface{}` + +GetInfo returns the Info field if non-nil, zero value otherwise. + +### GetInfoOk + +`func (o *FirmwareInfo) GetInfoOk() (*map[string]interface{}, bool)` + +GetInfoOk returns a tuple with the Info field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetInfo + +`func (o *FirmwareInfo) SetInfo(v map[string]interface{})` + +SetInfo sets Info field to given value. + +### HasInfo + +`func (o *FirmwareInfo) HasInfo() bool` + +HasInfo returns a boolean if a field has been set. + ### GetMd5 `func (o *FirmwareInfo) GetMd5() string` @@ -161,6 +188,31 @@ SetMd5 sets Md5 field to given value. HasMd5 returns a boolean if a field has been set. +### GetNotes + +`func (o *FirmwareInfo) GetNotes() string` + +GetNotes returns the Notes field if non-nil, zero value otherwise. + +### GetNotesOk + +`func (o *FirmwareInfo) GetNotesOk() (*string, bool)` + +GetNotesOk returns a tuple with the Notes field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetNotes + +`func (o *FirmwareInfo) SetNotes(v string)` + +SetNotes sets Notes field to given value. + +### HasNotes + +`func (o *FirmwareInfo) HasNotes() bool` + +HasNotes returns a boolean if a field has been set. + ### GetOrganization `func (o *FirmwareInfo) GetOrganization() string` diff --git a/docs/UsageEventsData.md b/docs/UsageEventsData.md index 3ee5285..332389d 100644 --- a/docs/UsageEventsData.md +++ b/docs/UsageEventsData.md @@ -13,6 +13,8 @@ | **TotalDaysInPeriod** | Pointer to **int32** | The total number of days in this period. Useful for calculating daily averages for month period. Note that the current period will be the total number of days in the current period, including days in the future. | [optional] | | **TotalDevices** | **int64** | Total devices represented in this count | | **TotalEvents** | **int64** | Total events the device sent to notehub, including associated notehub generated events | +| **TotalFwUpdates** | Pointer to **NullableInt64** | Number of firmware updates in this period (from \_health.qo DFU events) | [optional] | +| **TotalReboots** | Pointer to **NullableInt64** | Number of device reboots in this period (from \_health.qo boot events) | [optional] | | **WatchdogEvents** | **int64** | Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time. | ## Methods @@ -235,6 +237,80 @@ and a boolean to check if the value has been set. SetTotalEvents sets TotalEvents field to given value. +### GetTotalFwUpdates + +`func (o *UsageEventsData) GetTotalFwUpdates() int64` + +GetTotalFwUpdates returns the TotalFwUpdates field if non-nil, zero value otherwise. + +### GetTotalFwUpdatesOk + +`func (o *UsageEventsData) GetTotalFwUpdatesOk() (*int64, bool)` + +GetTotalFwUpdatesOk returns a tuple with the TotalFwUpdates field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetTotalFwUpdates + +`func (o *UsageEventsData) SetTotalFwUpdates(v int64)` + +SetTotalFwUpdates sets TotalFwUpdates field to given value. + +### HasTotalFwUpdates + +`func (o *UsageEventsData) HasTotalFwUpdates() bool` + +HasTotalFwUpdates returns a boolean if a field has been set. + +### SetTotalFwUpdatesNil + +`func (o *UsageEventsData) SetTotalFwUpdatesNil(b bool)` + +SetTotalFwUpdatesNil sets the value for TotalFwUpdates to be an explicit nil + +### UnsetTotalFwUpdates + +`func (o *UsageEventsData) UnsetTotalFwUpdates()` + +UnsetTotalFwUpdates ensures that no value is present for TotalFwUpdates, not even an explicit nil + +### GetTotalReboots + +`func (o *UsageEventsData) GetTotalReboots() int64` + +GetTotalReboots returns the TotalReboots field if non-nil, zero value otherwise. + +### GetTotalRebootsOk + +`func (o *UsageEventsData) GetTotalRebootsOk() (*int64, bool)` + +GetTotalRebootsOk returns a tuple with the TotalReboots field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetTotalReboots + +`func (o *UsageEventsData) SetTotalReboots(v int64)` + +SetTotalReboots sets TotalReboots field to given value. + +### HasTotalReboots + +`func (o *UsageEventsData) HasTotalReboots() bool` + +HasTotalReboots returns a boolean if a field has been set. + +### SetTotalRebootsNil + +`func (o *UsageEventsData) SetTotalRebootsNil(b bool)` + +SetTotalRebootsNil sets the value for TotalReboots to be an explicit nil + +### UnsetTotalReboots + +`func (o *UsageEventsData) UnsetTotalReboots()` + +UnsetTotalReboots ensures that no value is present for TotalReboots, not even an explicit nil + ### GetWatchdogEvents `func (o *UsageEventsData) GetWatchdogEvents() int64` diff --git a/docs/UsageRouteLogsData.md b/docs/UsageRouteLogsData.md index 5d52058..a31adb8 100644 --- a/docs/UsageRouteLogsData.md +++ b/docs/UsageRouteLogsData.md @@ -2,13 +2,14 @@ ## Properties -| Name | Type | Description | Notes | -| -------------------- | --------------------- | -------------------------------------------------------------- | ---------- | -| **FailedRoutes** | **int64** | | -| **Period** | **time.Time** | | -| **Route** | Pointer to **string** | The route UID (only present when aggregate is 'route') | [optional] | -| **SuccessfulRoutes** | **int64** | | -| **TotalRoutes** | **int64** | | +| Name | Type | Description | Notes | +| -------------------- | ------------------------------ | ----------------------------------------------------------------------------- | ---------- | +| **AvgLatencyMs** | Pointer to **NullableFloat64** | Average routing latency in milliseconds for route logs with recorded duration | [optional] | +| **FailedRoutes** | **int64** | | +| **Period** | **time.Time** | | +| **Route** | Pointer to **string** | The route UID (only present when aggregate is 'route') | [optional] | +| **SuccessfulRoutes** | **int64** | | +| **TotalRoutes** | **int64** | | ## Methods @@ -29,6 +30,43 @@ NewUsageRouteLogsDataWithDefaults instantiates a new UsageRouteLogsData object This constructor will only assign default values to properties that have it defined, but it doesn't guarantee that properties required by API are set +### GetAvgLatencyMs + +`func (o *UsageRouteLogsData) GetAvgLatencyMs() float64` + +GetAvgLatencyMs returns the AvgLatencyMs field if non-nil, zero value otherwise. + +### GetAvgLatencyMsOk + +`func (o *UsageRouteLogsData) GetAvgLatencyMsOk() (*float64, bool)` + +GetAvgLatencyMsOk returns a tuple with the AvgLatencyMs field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetAvgLatencyMs + +`func (o *UsageRouteLogsData) SetAvgLatencyMs(v float64)` + +SetAvgLatencyMs sets AvgLatencyMs field to given value. + +### HasAvgLatencyMs + +`func (o *UsageRouteLogsData) HasAvgLatencyMs() bool` + +HasAvgLatencyMs returns a boolean if a field has been set. + +### SetAvgLatencyMsNil + +`func (o *UsageRouteLogsData) SetAvgLatencyMsNil(b bool)` + +SetAvgLatencyMsNil sets the value for AvgLatencyMs to be an explicit nil + +### UnsetAvgLatencyMs + +`func (o *UsageRouteLogsData) UnsetAvgLatencyMs()` + +UnsetAvgLatencyMs ensures that no value is present for AvgLatencyMs, not even an explicit nil + ### GetFailedRoutes `func (o *UsageRouteLogsData) GetFailedRoutes() int64` diff --git a/docs/UsageSessionsData.md b/docs/UsageSessionsData.md index 12638a6..8a601ca 100644 --- a/docs/UsageSessionsData.md +++ b/docs/UsageSessionsData.md @@ -2,15 +2,17 @@ ## Properties -| Name | Type | Description | Notes | -| --------------------- | --------------------- | -------------------------------------------- | ---------- | -| **Device** | Pointer to **string** | | [optional] | -| **FirstSyncSessions** | **int64** | Number of first sync sessions in this period | -| **Fleet** | Pointer to **string** | | [optional] | -| **Period** | **time.Time** | | -| **Sessions** | **int64** | | -| **TotalBytes** | **int64** | | -| **TotalDevices** | **int64** | | +| Name | Type | Description | Notes | +| ----------------------- | ------------------------------- | ---------------------------------------------------------------------------------- | ---------- | +| **Device** | Pointer to **string** | | [optional] | +| **FirstSyncSessions** | **int64** | Number of first sync sessions in this period | +| **Fleet** | Pointer to **string** | | [optional] | +| **Period** | **time.Time** | | +| **Sessions** | **int64** | | +| **SessionsByTransport** | Pointer to **map[string]int64** | Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan) | [optional] | +| **TlsSessions** | Pointer to **NullableInt64** | Number of TLS sessions in this period | [optional] | +| **TotalBytes** | **int64** | | +| **TotalDevices** | **int64** | | ## Methods @@ -138,6 +140,68 @@ and a boolean to check if the value has been set. SetSessions sets Sessions field to given value. +### GetSessionsByTransport + +`func (o *UsageSessionsData) GetSessionsByTransport() map[string]int64` + +GetSessionsByTransport returns the SessionsByTransport field if non-nil, zero value otherwise. + +### GetSessionsByTransportOk + +`func (o *UsageSessionsData) GetSessionsByTransportOk() (*map[string]int64, bool)` + +GetSessionsByTransportOk returns a tuple with the SessionsByTransport field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetSessionsByTransport + +`func (o *UsageSessionsData) SetSessionsByTransport(v map[string]int64)` + +SetSessionsByTransport sets SessionsByTransport field to given value. + +### HasSessionsByTransport + +`func (o *UsageSessionsData) HasSessionsByTransport() bool` + +HasSessionsByTransport returns a boolean if a field has been set. + +### GetTlsSessions + +`func (o *UsageSessionsData) GetTlsSessions() int64` + +GetTlsSessions returns the TlsSessions field if non-nil, zero value otherwise. + +### GetTlsSessionsOk + +`func (o *UsageSessionsData) GetTlsSessionsOk() (*int64, bool)` + +GetTlsSessionsOk returns a tuple with the TlsSessions field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetTlsSessions + +`func (o *UsageSessionsData) SetTlsSessions(v int64)` + +SetTlsSessions sets TlsSessions field to given value. + +### HasTlsSessions + +`func (o *UsageSessionsData) HasTlsSessions() bool` + +HasTlsSessions returns a boolean if a field has been set. + +### SetTlsSessionsNil + +`func (o *UsageSessionsData) SetTlsSessionsNil(b bool)` + +SetTlsSessionsNil sets the value for TlsSessions to be an explicit nil + +### UnsetTlsSessions + +`func (o *UsageSessionsData) UnsetTlsSessions()` + +UnsetTlsSessions ensures that no value is present for TlsSessions, not even an explicit nil + ### GetTotalBytes `func (o *UsageSessionsData) GetTotalBytes() int64` diff --git a/model_firmware_info.go b/model_firmware_info.go index 38e562d..02f5a91 100644 --- a/model_firmware_info.go +++ b/model_firmware_info.go @@ -28,8 +28,12 @@ type FirmwareInfo struct { Description *string `json:"description,omitempty"` // The name of the firmware file. Filename *string `json:"filename,omitempty"` + // User-defined metadata + Info map[string]interface{} `json:"info,omitempty"` // The MD5 hash of the firmware file. Md5 *string `json:"md5,omitempty"` + // User-defined notes + Notes *string `json:"notes,omitempty"` // The organization that owns the firmware. Organization *string `json:"organization,omitempty"` // The product that the firmware is for. @@ -194,6 +198,38 @@ func (o *FirmwareInfo) SetFilename(v string) { o.Filename = &v } +// GetInfo returns the Info field value if set, zero value otherwise. +func (o *FirmwareInfo) GetInfo() map[string]interface{} { + if o == nil || IsNil(o.Info) { + var ret map[string]interface{} + return ret + } + return o.Info +} + +// GetInfoOk returns a tuple with the Info field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *FirmwareInfo) GetInfoOk() (map[string]interface{}, bool) { + if o == nil || IsNil(o.Info) { + return map[string]interface{}{}, false + } + return o.Info, true +} + +// HasInfo returns a boolean if a field has been set. +func (o *FirmwareInfo) HasInfo() bool { + if o != nil && !IsNil(o.Info) { + return true + } + + return false +} + +// SetInfo gets a reference to the given map[string]interface{} and assigns it to the Info field. +func (o *FirmwareInfo) SetInfo(v map[string]interface{}) { + o.Info = v +} + // GetMd5 returns the Md5 field value if set, zero value otherwise. func (o *FirmwareInfo) GetMd5() string { if o == nil || IsNil(o.Md5) { @@ -226,6 +262,38 @@ func (o *FirmwareInfo) SetMd5(v string) { o.Md5 = &v } +// GetNotes returns the Notes field value if set, zero value otherwise. +func (o *FirmwareInfo) GetNotes() string { + if o == nil || IsNil(o.Notes) { + var ret string + return ret + } + return *o.Notes +} + +// GetNotesOk returns a tuple with the Notes field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *FirmwareInfo) GetNotesOk() (*string, bool) { + if o == nil || IsNil(o.Notes) { + return nil, false + } + return o.Notes, true +} + +// HasNotes returns a boolean if a field has been set. +func (o *FirmwareInfo) HasNotes() bool { + if o != nil && !IsNil(o.Notes) { + return true + } + + return false +} + +// SetNotes gets a reference to the given string and assigns it to the Notes field. +func (o *FirmwareInfo) SetNotes(v string) { + o.Notes = &v +} + // GetOrganization returns the Organization field value if set, zero value otherwise. func (o *FirmwareInfo) GetOrganization() string { if o == nil || IsNil(o.Organization) { @@ -472,9 +540,15 @@ func (o FirmwareInfo) ToMap() (map[string]interface{}, error) { if !IsNil(o.Filename) { toSerialize["filename"] = o.Filename } + if !IsNil(o.Info) { + toSerialize["info"] = o.Info + } if !IsNil(o.Md5) { toSerialize["md5"] = o.Md5 } + if !IsNil(o.Notes) { + toSerialize["notes"] = o.Notes + } if !IsNil(o.Organization) { toSerialize["organization"] = o.Organization } @@ -522,7 +596,9 @@ func (o *FirmwareInfo) UnmarshalJSON(data []byte) (err error) { delete(additionalProperties, "created") delete(additionalProperties, "description") delete(additionalProperties, "filename") + delete(additionalProperties, "info") delete(additionalProperties, "md5") + delete(additionalProperties, "notes") delete(additionalProperties, "organization") delete(additionalProperties, "product") delete(additionalProperties, "published") diff --git a/model_usage_events_data.go b/model_usage_events_data.go index 2cf8fc0..7851be9 100644 --- a/model_usage_events_data.go +++ b/model_usage_events_data.go @@ -37,6 +37,10 @@ type UsageEventsData struct { TotalDevices int64 `json:"total_devices"` // Total events the device sent to notehub, including associated notehub generated events TotalEvents int64 `json:"total_events"` + // Number of firmware updates in this period (from _health.qo DFU events) + TotalFwUpdates NullableInt64 `json:"total_fw_updates,omitempty"` + // Number of device reboots in this period (from _health.qo boot events) + TotalReboots NullableInt64 `json:"total_reboots,omitempty"` // Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time. WatchdogEvents int64 `json:"watchdog_events"` AdditionalProperties map[string]interface{} @@ -322,6 +326,92 @@ func (o *UsageEventsData) SetTotalEvents(v int64) { o.TotalEvents = v } +// GetTotalFwUpdates returns the TotalFwUpdates field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *UsageEventsData) GetTotalFwUpdates() int64 { + if o == nil || IsNil(o.TotalFwUpdates.Get()) { + var ret int64 + return ret + } + return *o.TotalFwUpdates.Get() +} + +// GetTotalFwUpdatesOk returns a tuple with the TotalFwUpdates field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *UsageEventsData) GetTotalFwUpdatesOk() (*int64, bool) { + if o == nil { + return nil, false + } + return o.TotalFwUpdates.Get(), o.TotalFwUpdates.IsSet() +} + +// HasTotalFwUpdates returns a boolean if a field has been set. +func (o *UsageEventsData) HasTotalFwUpdates() bool { + if o != nil && o.TotalFwUpdates.IsSet() { + return true + } + + return false +} + +// SetTotalFwUpdates gets a reference to the given NullableInt64 and assigns it to the TotalFwUpdates field. +func (o *UsageEventsData) SetTotalFwUpdates(v int64) { + o.TotalFwUpdates.Set(&v) +} + +// SetTotalFwUpdatesNil sets the value for TotalFwUpdates to be an explicit nil +func (o *UsageEventsData) SetTotalFwUpdatesNil() { + o.TotalFwUpdates.Set(nil) +} + +// UnsetTotalFwUpdates ensures that no value is present for TotalFwUpdates, not even an explicit nil +func (o *UsageEventsData) UnsetTotalFwUpdates() { + o.TotalFwUpdates.Unset() +} + +// GetTotalReboots returns the TotalReboots field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *UsageEventsData) GetTotalReboots() int64 { + if o == nil || IsNil(o.TotalReboots.Get()) { + var ret int64 + return ret + } + return *o.TotalReboots.Get() +} + +// GetTotalRebootsOk returns a tuple with the TotalReboots field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *UsageEventsData) GetTotalRebootsOk() (*int64, bool) { + if o == nil { + return nil, false + } + return o.TotalReboots.Get(), o.TotalReboots.IsSet() +} + +// HasTotalReboots returns a boolean if a field has been set. +func (o *UsageEventsData) HasTotalReboots() bool { + if o != nil && o.TotalReboots.IsSet() { + return true + } + + return false +} + +// SetTotalReboots gets a reference to the given NullableInt64 and assigns it to the TotalReboots field. +func (o *UsageEventsData) SetTotalReboots(v int64) { + o.TotalReboots.Set(&v) +} + +// SetTotalRebootsNil sets the value for TotalReboots to be an explicit nil +func (o *UsageEventsData) SetTotalRebootsNil() { + o.TotalReboots.Set(nil) +} + +// UnsetTotalReboots ensures that no value is present for TotalReboots, not even an explicit nil +func (o *UsageEventsData) UnsetTotalReboots() { + o.TotalReboots.Unset() +} + // GetWatchdogEvents returns the WatchdogEvents field value func (o *UsageEventsData) GetWatchdogEvents() int64 { if o == nil { @@ -375,6 +465,12 @@ func (o UsageEventsData) ToMap() (map[string]interface{}, error) { } toSerialize["total_devices"] = o.TotalDevices toSerialize["total_events"] = o.TotalEvents + if o.TotalFwUpdates.IsSet() { + toSerialize["total_fw_updates"] = o.TotalFwUpdates.Get() + } + if o.TotalReboots.IsSet() { + toSerialize["total_reboots"] = o.TotalReboots.Get() + } toSerialize["watchdog_events"] = o.WatchdogEvents for key, value := range o.AdditionalProperties { @@ -432,6 +528,8 @@ func (o *UsageEventsData) UnmarshalJSON(data []byte) (err error) { delete(additionalProperties, "total_days_in_period") delete(additionalProperties, "total_devices") delete(additionalProperties, "total_events") + delete(additionalProperties, "total_fw_updates") + delete(additionalProperties, "total_reboots") delete(additionalProperties, "watchdog_events") o.AdditionalProperties = additionalProperties } diff --git a/model_usage_route_logs_data.go b/model_usage_route_logs_data.go index 477808f..77923a7 100644 --- a/model_usage_route_logs_data.go +++ b/model_usage_route_logs_data.go @@ -22,8 +22,10 @@ var _ MappedNullable = &UsageRouteLogsData{} // UsageRouteLogsData struct for UsageRouteLogsData type UsageRouteLogsData struct { - FailedRoutes int64 `json:"failed_routes"` - Period time.Time `json:"period"` + // Average routing latency in milliseconds for route logs with recorded duration + AvgLatencyMs NullableFloat64 `json:"avg_latency_ms,omitempty"` + FailedRoutes int64 `json:"failed_routes"` + Period time.Time `json:"period"` // The route UID (only present when aggregate is 'route') Route *string `json:"route,omitempty"` SuccessfulRoutes int64 `json:"successful_routes"` @@ -54,6 +56,49 @@ func NewUsageRouteLogsDataWithDefaults() *UsageRouteLogsData { return &this } +// GetAvgLatencyMs returns the AvgLatencyMs field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *UsageRouteLogsData) GetAvgLatencyMs() float64 { + if o == nil || IsNil(o.AvgLatencyMs.Get()) { + var ret float64 + return ret + } + return *o.AvgLatencyMs.Get() +} + +// GetAvgLatencyMsOk returns a tuple with the AvgLatencyMs field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *UsageRouteLogsData) GetAvgLatencyMsOk() (*float64, bool) { + if o == nil { + return nil, false + } + return o.AvgLatencyMs.Get(), o.AvgLatencyMs.IsSet() +} + +// HasAvgLatencyMs returns a boolean if a field has been set. +func (o *UsageRouteLogsData) HasAvgLatencyMs() bool { + if o != nil && o.AvgLatencyMs.IsSet() { + return true + } + + return false +} + +// SetAvgLatencyMs gets a reference to the given NullableFloat64 and assigns it to the AvgLatencyMs field. +func (o *UsageRouteLogsData) SetAvgLatencyMs(v float64) { + o.AvgLatencyMs.Set(&v) +} + +// SetAvgLatencyMsNil sets the value for AvgLatencyMs to be an explicit nil +func (o *UsageRouteLogsData) SetAvgLatencyMsNil() { + o.AvgLatencyMs.Set(nil) +} + +// UnsetAvgLatencyMs ensures that no value is present for AvgLatencyMs, not even an explicit nil +func (o *UsageRouteLogsData) UnsetAvgLatencyMs() { + o.AvgLatencyMs.Unset() +} + // GetFailedRoutes returns the FailedRoutes field value func (o *UsageRouteLogsData) GetFailedRoutes() int64 { if o == nil { @@ -192,6 +237,9 @@ func (o UsageRouteLogsData) MarshalJSON() ([]byte, error) { func (o UsageRouteLogsData) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} + if o.AvgLatencyMs.IsSet() { + toSerialize["avg_latency_ms"] = o.AvgLatencyMs.Get() + } toSerialize["failed_routes"] = o.FailedRoutes toSerialize["period"] = o.Period if !IsNil(o.Route) { @@ -245,6 +293,7 @@ func (o *UsageRouteLogsData) UnmarshalJSON(data []byte) (err error) { additionalProperties := make(map[string]interface{}) if err = json.Unmarshal(data, &additionalProperties); err == nil { + delete(additionalProperties, "avg_latency_ms") delete(additionalProperties, "failed_routes") delete(additionalProperties, "period") delete(additionalProperties, "route") diff --git a/model_usage_sessions_data.go b/model_usage_sessions_data.go index 34926f1..7d8f20f 100644 --- a/model_usage_sessions_data.go +++ b/model_usage_sessions_data.go @@ -24,12 +24,16 @@ var _ MappedNullable = &UsageSessionsData{} type UsageSessionsData struct { Device *string `json:"device,omitempty"` // Number of first sync sessions in this period - FirstSyncSessions int64 `json:"first_sync_sessions"` - Fleet *string `json:"fleet,omitempty"` - Period time.Time `json:"period"` - Sessions int64 `json:"sessions"` - TotalBytes int64 `json:"total_bytes"` - TotalDevices int64 `json:"total_devices"` + FirstSyncSessions int64 `json:"first_sync_sessions"` + Fleet *string `json:"fleet,omitempty"` + Period time.Time `json:"period"` + Sessions int64 `json:"sessions"` + // Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan) + SessionsByTransport *map[string]int64 `json:"sessions_by_transport,omitempty"` + // Number of TLS sessions in this period + TlsSessions NullableInt64 `json:"tls_sessions,omitempty"` + TotalBytes int64 `json:"total_bytes"` + TotalDevices int64 `json:"total_devices"` AdditionalProperties map[string]interface{} } @@ -193,6 +197,81 @@ func (o *UsageSessionsData) SetSessions(v int64) { o.Sessions = v } +// GetSessionsByTransport returns the SessionsByTransport field value if set, zero value otherwise. +func (o *UsageSessionsData) GetSessionsByTransport() map[string]int64 { + if o == nil || IsNil(o.SessionsByTransport) { + var ret map[string]int64 + return ret + } + return *o.SessionsByTransport +} + +// GetSessionsByTransportOk returns a tuple with the SessionsByTransport field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *UsageSessionsData) GetSessionsByTransportOk() (*map[string]int64, bool) { + if o == nil || IsNil(o.SessionsByTransport) { + return nil, false + } + return o.SessionsByTransport, true +} + +// HasSessionsByTransport returns a boolean if a field has been set. +func (o *UsageSessionsData) HasSessionsByTransport() bool { + if o != nil && !IsNil(o.SessionsByTransport) { + return true + } + + return false +} + +// SetSessionsByTransport gets a reference to the given map[string]int64 and assigns it to the SessionsByTransport field. +func (o *UsageSessionsData) SetSessionsByTransport(v map[string]int64) { + o.SessionsByTransport = &v +} + +// GetTlsSessions returns the TlsSessions field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *UsageSessionsData) GetTlsSessions() int64 { + if o == nil || IsNil(o.TlsSessions.Get()) { + var ret int64 + return ret + } + return *o.TlsSessions.Get() +} + +// GetTlsSessionsOk returns a tuple with the TlsSessions field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *UsageSessionsData) GetTlsSessionsOk() (*int64, bool) { + if o == nil { + return nil, false + } + return o.TlsSessions.Get(), o.TlsSessions.IsSet() +} + +// HasTlsSessions returns a boolean if a field has been set. +func (o *UsageSessionsData) HasTlsSessions() bool { + if o != nil && o.TlsSessions.IsSet() { + return true + } + + return false +} + +// SetTlsSessions gets a reference to the given NullableInt64 and assigns it to the TlsSessions field. +func (o *UsageSessionsData) SetTlsSessions(v int64) { + o.TlsSessions.Set(&v) +} + +// SetTlsSessionsNil sets the value for TlsSessions to be an explicit nil +func (o *UsageSessionsData) SetTlsSessionsNil() { + o.TlsSessions.Set(nil) +} + +// UnsetTlsSessions ensures that no value is present for TlsSessions, not even an explicit nil +func (o *UsageSessionsData) UnsetTlsSessions() { + o.TlsSessions.Unset() +} + // GetTotalBytes returns the TotalBytes field value func (o *UsageSessionsData) GetTotalBytes() int64 { if o == nil { @@ -260,6 +339,12 @@ func (o UsageSessionsData) ToMap() (map[string]interface{}, error) { } toSerialize["period"] = o.Period toSerialize["sessions"] = o.Sessions + if !IsNil(o.SessionsByTransport) { + toSerialize["sessions_by_transport"] = o.SessionsByTransport + } + if o.TlsSessions.IsSet() { + toSerialize["tls_sessions"] = o.TlsSessions.Get() + } toSerialize["total_bytes"] = o.TotalBytes toSerialize["total_devices"] = o.TotalDevices @@ -314,6 +399,8 @@ func (o *UsageSessionsData) UnmarshalJSON(data []byte) (err error) { delete(additionalProperties, "fleet") delete(additionalProperties, "period") delete(additionalProperties, "sessions") + delete(additionalProperties, "sessions_by_transport") + delete(additionalProperties, "tls_sessions") delete(additionalProperties, "total_bytes") delete(additionalProperties, "total_devices") o.AdditionalProperties = additionalProperties diff --git a/openapi_filtered.yaml b/openapi_filtered.yaml index 6c4d02d..dc964b6 100644 --- a/openapi_filtered.yaml +++ b/openapi_filtered.yaml @@ -4620,9 +4620,15 @@ components: filename: description: The name of the firmware file. type: string + info: + description: User-defined metadata + type: object md5: description: The MD5 hash of the firmware file. type: string + notes: + description: User-defined notes + type: string organization: description: The organization that owns the firmware. type: string @@ -5806,6 +5812,18 @@ components: type: integer format: int64 example: 42 + total_fw_updates: + description: Number of firmware updates in this period (from _health.qo DFU events) + type: integer + format: int64 + example: 1 + nullable: true + total_reboots: + description: Number of device reboots in this period (from _health.qo boot events) + type: integer + format: int64 + example: 2 + nullable: true watchdog_events: description: Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time. type: integer @@ -5831,6 +5849,12 @@ components: UsageRouteLogsData: type: object properties: + avg_latency_ms: + description: Average routing latency in milliseconds for route logs with recorded duration + type: number + format: double + example: 342.5 + nullable: true failed_routes: type: integer format: int64 @@ -5878,6 +5902,22 @@ components: type: integer format: int64 example: 12 + sessions_by_transport: + description: Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan) + type: object + example: + cell: 8 + ntn: 1 + wifi: 3 + additionalProperties: + format: int64 + type: integer + tls_sessions: + description: Number of TLS sessions in this period + type: integer + format: int64 + example: 3 + nullable: true total_bytes: type: integer format: int64 From 598da861cdf4dc0913283b25126167ed5a70e858 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 27 Mar 2026 18:27:42 +0000 Subject: [PATCH 08/18] feat: Update OpenAPI file replicated from Notehub commit 8c4a499 --- openapi.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index a0bb9ba..6e479ae 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -217,8 +217,12 @@ paths: remaining_event_capacity: type: integer format: int64 + total_event_capacity_used: + type: integer + format: int64 required: - remaining_event_capacity + - total_event_capacity_used - period type: object default: From 4d9b225bc0c6611eea266160e211afc2df35391a Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 30 Mar 2026 14:49:09 +0000 Subject: [PATCH 09/18] feat: Update OpenAPI file replicated from Notehub commit cb5ef0f --- openapi.yaml | 358 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 358 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 6e479ae..2f796c0 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -2029,6 +2029,178 @@ paths: - personalAccessToken: [] tags: - project + '/v1/projects/{projectOrProductUID}/jobs': + get: + operationId: GetJobs + description: List all batch jobs for a project + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + responses: + '200': + $ref: '#/components/responses/GetJobsResponse' + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - jobs + post: + operationId: CreateJob + description: Create a new batch job with an optional name + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - name: name + in: query + description: Name for the job + required: true + schema: + type: string + requestBody: + description: The job definition as raw JSON + required: true + content: + application/json: + schema: + description: Job definition (structure varies by job type) + type: object + responses: + '201': + $ref: '#/components/responses/CreateJobResponse' + '400': + description: Missing required name parameter or invalid job definition + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - jobs + '/v1/projects/{projectOrProductUID}/jobs/{jobUID}': + delete: + operationId: DeleteJob + description: Delete a batch job + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/jobUIDParam' + responses: + '200': + $ref: '#/components/responses/DeleteJobResponse' + '404': + description: Job not found + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - jobs + get: + operationId: GetJob + description: Get a specific batch job definition + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/jobUIDParam' + responses: + '200': + $ref: '#/components/responses/GetJobResponse' + '404': + description: Job not found + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - jobs + '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/run': + post: + operationId: RunJob + description: Execute a batch job + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/jobUIDParam' + - name: dry_run + in: query + description: Run job in dry-run mode without making actual changes + required: false + schema: + type: boolean + default: false + responses: + '200': + $ref: '#/components/responses/RunJobResponse' + '404': + description: Job not found + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - jobs + '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/runs': + get: + operationId: GetJobRuns + description: List all runs for a specific job + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/jobUIDParam' + - name: status + in: query + description: Filter runs by status + required: false + schema: + type: string + - name: dry_run + in: query + description: Filter runs by dry run flag + required: false + schema: + type: boolean + nullable: true + responses: + '200': + $ref: '#/components/responses/GetJobRunsResponse' + '404': + description: Job not found + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - jobs + '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}': + get: + operationId: GetJobRun + description: Get the result of a job execution + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/reportUIDParam' + responses: + '200': + $ref: '#/components/responses/GetJobRunResponse' + '404': + description: Run not found + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - jobs + '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}/cancel': + post: + operationId: CancelJobRun + description: Cancel a running job execution + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/reportUIDParam' + responses: + '200': + $ref: '#/components/responses/CancelJobRunResponse' + '404': + description: Run not found + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - jobs '/v1/projects/{projectOrProductUID}/members': get: operationId: GetProjectMembers @@ -3129,6 +3301,14 @@ components: items: type: string style: form + jobUIDParam: + description: Unique identifier for a batch job + example: my-reconciliation-job + in: path + name: jobUID + required: true + schema: + type: string limitParam: in: query name: limit @@ -3245,6 +3425,14 @@ components: required: true schema: type: string + reportUIDParam: + description: Unique identifier for a job run report + example: my-reconciliation-job-1707654321000 + in: path + name: reportUID + required: true + schema: + type: string repositoryKey: description: The secret key used to access this repository in: header @@ -4787,6 +4975,84 @@ components: JSONata: type: object properties: {} + Job: + type: object + properties: + created: + description: Unix timestamp when job was created + type: integer + format: int64 + created_by: + description: User who created the job + type: string + definition: + description: Full job definition (only in detail view) + type: object + additionalProperties: true + job_uid: + description: Unique identifier for the job + type: string + name: + description: Human-readable job name + type: string + required: + - job_uid + - name + - created + - created_by + JobRun: + type: object + properties: + cancel: + description: Whether cancellation was requested + type: boolean + completed: + description: Unix timestamp when completed + type: integer + format: int64 + dry_run: + description: Whether this was a dry run + type: boolean + job_name: + description: Name of the job + type: string + job_uid: + description: Unique identifier for the job + type: string + report_uid: + description: Unique identifier for this run + type: string + results: + description: Full results (only in detail view) + type: object + additionalProperties: true + started: + description: Unix timestamp when started + type: integer + format: int64 + status: + description: 'Current status (submitted, running, completed, cancelled, failed)' + type: string + submitted: + description: Unix timestamp when submitted + type: integer + format: int64 + submitted_by: + description: User who submitted the run + type: string + updated: + description: Unix timestamp of last update + type: integer + format: int64 + required: + - report_uid + - job_uid + - job_name + - status + - dry_run + - submitted_by + - submitted + - updated Location: type: object properties: @@ -6037,6 +6303,42 @@ components: required: - alerts - has_more + CancelJobRunResponse: + description: Cancel operation completed + content: + application/json: + schema: + type: object + properties: + successful: + description: True if cancellation was successful + type: boolean + required: + - successful + CreateJobResponse: + description: Job created successfully + content: + application/json: + schema: + type: object + properties: + job_uid: + description: The unique identifier for the created job + type: string + required: + - job_uid + DeleteJobResponse: + description: Job deleted successfully + content: + application/json: + schema: + type: object + properties: + success: + description: True if deletion was successful + type: boolean + required: + - success DevicePlansResponse: description: Response body for /plans content: @@ -6247,6 +6549,48 @@ components: required: - environment_variables - environment_variables_env_default + GetJobResponse: + description: Batch job details + content: + application/json: + schema: + type: '' + properties: {} + $ref: '#/components/schemas/Job' + GetJobRunResponse: + description: Job run details + content: + application/json: + schema: + type: '' + properties: {} + $ref: '#/components/schemas/JobRun' + GetJobRunsResponse: + description: List of job runs + content: + application/json: + schema: + type: object + properties: + runs: + type: array + items: + $ref: '#/components/schemas/JobRun' + required: + - runs + GetJobsResponse: + description: List of batch jobs + content: + application/json: + schema: + type: object + properties: + jobs: + type: array + items: + $ref: '#/components/schemas/Job' + required: + - jobs LatestResponse: description: The response body for a Latest Events request. content: @@ -6344,6 +6688,18 @@ components: total: description: The total number of notes active on the Notefile. type: integer + RunJobResponse: + description: Job execution started + content: + application/json: + schema: + type: object + properties: + report_uid: + description: Unique identifier for this job run + type: string + required: + - report_uid SessionResponse: description: The response body for a session request. content: @@ -6519,6 +6875,8 @@ tags: name: external devices - description: 'Project Usage information related to events, route logs, sessions, and data usage' name: usage + - description: Batch job operations + name: jobs externalDocs: description: Find out more about Blues url: 'https://blues.io' From 09d6c72834c7b84f1c7c47f53609efd875ba8cdb Mon Sep 17 00:00:00 2001 From: "blues-hub-automation[bot]" Date: Wed, 8 Apr 2026 16:05:57 +0000 Subject: [PATCH 10/18] feat: Update OpenAPI file replicated from Notehub commit 07a3c60 --- openapi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openapi.yaml b/openapi.yaml index 2f796c0..2455b09 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -194,7 +194,7 @@ paths: '/v1/billing-accounts/{billingAccountUID}/balance-history': get: operationId: GetBillingAccountBalanceHistory - description: 'Get Billing Account Balance history, only enterprise supported' + description: Get Billing Account Balance history parameters: - $ref: '#/components/parameters/billingAccountUIDParam' - $ref: '#/components/parameters/startDateParam' From fc22db0d4e07396c9ae0eaabf01fbc372a6a825e Mon Sep 17 00:00:00 2001 From: "blues-hub-automation[bot]" Date: Wed, 15 Apr 2026 14:15:35 +0000 Subject: [PATCH 11/18] feat: Update OpenAPI file replicated from Notehub commit 781834f --- openapi.yaml | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 2455b09..aed060c 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -1607,6 +1607,33 @@ paths: tags: - project '/v1/projects/{projectOrProductUID}/firmware/{firmwareType}/{filename}': + delete: + operationId: DeleteFirmware + description: | + Delete a host firmware binary. The filename must be the full stored filename including the timestamp suffix (e.g. test$20260324190911.bin) as returned by the firmware upload or list endpoints. + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - name: firmwareType + in: path + required: true + schema: + type: string + enum: + - host + - name: filename + in: path + required: true + schema: + type: string + responses: + '204': + description: Firmware deleted successfully + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - project get: operationId: DownloadFirmware description: Download firmware binary @@ -1632,6 +1659,44 @@ paths: - personalAccessToken: [] tags: - project + post: + operationId: UpdateFirmware + description: | + Update the metadata of an existing host firmware entry. The filename must be the full stored filename including the timestamp suffix (e.g. test$20260324190911.bin) as returned by the firmware upload or list endpoints. + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - name: firmwareType + in: path + required: true + schema: + type: string + enum: + - host + - name: filename + in: path + required: true + schema: + type: string + requestBody: + description: Firmware metadata fields to update. All fields are optional; only provided fields will be updated. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateHostFirmwareRequest' + responses: + '200': + description: Update successful + content: + application/json: + schema: + $ref: '#/components/schemas/FirmwareInfo' + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - project put: operationId: UploadFirmware description: Upload firmware binary @@ -5994,6 +6059,21 @@ components: to: type: string additionalProperties: false + UpdateHostFirmwareRequest: + description: | + Request body for updating host firmware metadata. All fields are optional; only provided fields will be updated. + type: object + properties: + info: + description: Arbitrary JSON metadata associated with this firmware entry. + type: object + additionalProperties: true + notes: + description: Notes describing this firmware version. + type: string + version: + description: The firmware version string. + type: string UploadMetadata: type: object properties: From 3c4bd00866c075f7bcb5aa13df52659131f7ba5d Mon Sep 17 00:00:00 2001 From: "blues-hub-automation[bot]" Date: Mon, 4 May 2026 16:06:22 +0000 Subject: [PATCH 12/18] feat: Update OpenAPI file replicated from Notehub commit f226c16 --- openapi.yaml | 510 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 508 insertions(+), 2 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index aed060c..3f8b442 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -46,6 +46,8 @@ paths: description: Internal Server Error tags: - authorization + x-custom-attributes: + permission: create /oauth2/token: post: operationId: OAuth2ClientCredentials @@ -143,6 +145,8 @@ paths: - personalAccessToken: [] tags: - billing_account + x-custom-attributes: + permission: read '/v1/billing-accounts/{billingAccountUID}': get: operationId: GetBillingAccount @@ -191,6 +195,8 @@ paths: - personalAccessToken: [] tags: - billing_account + x-custom-attributes: + permission: read '/v1/billing-accounts/{billingAccountUID}/balance-history': get: operationId: GetBillingAccountBalanceHistory @@ -231,6 +237,8 @@ paths: - personalAccessToken: [] tags: - billing_account + x-custom-attributes: + permission: read '/v1/products/{productUID}/devices/{deviceUID}/environment_variables_with_pin': get: operationId: GetDeviceEnvironmentVariablesByPin @@ -240,8 +248,12 @@ paths: $ref: '#/components/responses/GetDeviceEnvironmentVariablesResponse' default: $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -261,8 +273,82 @@ paths: $ref: '#/components/responses/EnvironmentVariablesResponse' default: $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: update + '/v1/products/{productUID}/devices/{deviceUID}/webhook-event': + post: + operationId: CreateLegacyWebhookEvent + description: 'Legacy endpoint for sending an event from a webhook, associated with the given device (provisioning it if necessary). The request body is a Note-shaped object containing the notefile name, body, and optional payload.' + parameters: + - $ref: '#/components/parameters/productUIDParam' + - $ref: '#/components/parameters/deviceUIDParam' + requestBody: + description: 'A Note-shaped event with notefile name, JSON body, and optional base64-encoded payload.' + required: true + content: + application/json: + example: + body: + key: value + file: data.qo + payload: SGVsbG8sIFdvcmxkIQ== + schema: + type: object + properties: + body: + description: Arbitrary JSON event body. + type: object + additionalProperties: true + file: + description: The notefile to which the event should be written. + type: string + payload: + description: Optional base64-encoded binary payload. + type: string + additionalProperties: true + responses: + '200': + description: Event created successfully + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - webhook + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/devices/{deviceUID}/webhook-session': + put: + operationId: UpdateLegacyWebhookSession + description: Legacy endpoint for opening or updating a webhook session for the given device (provisioning the device if necessary). Used by external services that need to maintain a callable session against a device behind a webhook. + parameters: + - $ref: '#/components/parameters/productUIDParam' + - $ref: '#/components/parameters/deviceUIDParam' + requestBody: + description: Optional session metadata. + required: false + content: + application/json: + schema: + type: object + additionalProperties: true + responses: + '200': + description: Webhook session updated successfully + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - webhook + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notes' '/v1/products/{productUID}/ext-devices/{deviceUID}/event': post: operationId: CreateEventExtDevice @@ -286,6 +372,9 @@ paths: - personalAccessToken: [] tags: - external devices + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notes' '/v1/products/{productUID}/ext-devices/{deviceUID}/session/close': post: operationId: ExtDeviceSessionClose @@ -309,6 +398,9 @@ paths: - personalAccessToken: [] tags: - external devices + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notes' '/v1/products/{productUID}/ext-devices/{deviceUID}/session/open': post: operationId: ExtDeviceSessionOpen @@ -332,6 +424,9 @@ paths: - personalAccessToken: [] tags: - external devices + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notes' '/v1/products/{productUID}/project': get: operationId: GetProjectByProduct @@ -356,6 +451,114 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/products/{productUID}/webhooks/{webhookUID}/devices/{deviceUID}/event': + post: + operationId: CreateWebhookDeviceEventByProduct + description: 'Sends an event to be processed by the specified webhook, addressed by productUID, associated with the given device (provisioning it if necessary). The entire request body becomes the event body. The webhook''s configured JSONata transform, if any, is applied before routing.' + parameters: + - $ref: '#/components/parameters/productUIDParam' + - $ref: '#/components/parameters/webhookUIDParam' + - $ref: '#/components/parameters/deviceUIDParam' + requestBody: + description: The event body (arbitrary JSON) + required: true + content: + application/json: + schema: + type: object + additionalProperties: true + responses: + '200': + description: Event created successfully + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - webhook + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/webhooks/{webhookUID}/event': + post: + operationId: CreateWebhookEventByProduct + description: 'Sends an event to be processed by the specified webhook, addressed by productUID. The entire request body becomes the event body. The webhook''s configured JSONata transform, if any, is applied before routing. The event is not associated with a specific device.' + parameters: + - $ref: '#/components/parameters/productUIDParam' + - $ref: '#/components/parameters/webhookUIDParam' + requestBody: + description: The event body (arbitrary JSON) + required: true + content: + application/json: + schema: + type: object + additionalProperties: true + responses: + '200': + description: Event created successfully + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - webhook + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/webhooks/{webhookUID}/settings': + get: + operationId: GetWebhookSettingsByProduct + description: 'Retrieves the configuration settings for the specified webhook, addressed by productUID.' + parameters: + - $ref: '#/components/parameters/productUIDParam' + - $ref: '#/components/parameters/webhookUIDParam' + responses: + '200': + description: Webhook settings retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookSettings' + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - webhook + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' + put: + operationId: UpdateWebhookSettingsByProduct + description: 'Updates the configuration settings for the specified webhook, addressed by productUID. Update body will completely replace the existing settings.' + parameters: + - $ref: '#/components/parameters/productUIDParam' + - $ref: '#/components/parameters/webhookUIDParam' + requestBody: + required: true + content: + application/json: + example: + disabled: false + transform: '{"device":body.end_device_ids.dev_eui,"sn":body.end_device_ids.device_id,"body":body.uplink_message.decoded_payload,"details":body}' + schema: + $ref: '#/components/schemas/WebhookSettings' + responses: + '200': + description: Webhook settings updated successfully + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - webhook + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' /v1/projects: get: operationId: GetProjects @@ -378,6 +581,8 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read post: operationId: CreateProject description: Create a Project @@ -412,6 +617,8 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: create '/v1/projects/{projectOrProductUID}': delete: operationId: DeleteProject @@ -427,6 +634,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:settings' get: operationId: GetProject description: Get a Project by ProjectUID @@ -445,6 +655,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/alerts': get: operationId: GetAlerts @@ -463,6 +676,9 @@ paths: - personalAccessToken: [] tags: - alert + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/aws-role-config': get: operationId: GetAWSRoleConfig @@ -485,6 +701,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/clone': post: operationId: CloneProject @@ -527,6 +746,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/devices': get: operationId: GetDevices @@ -553,6 +775,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}': delete: operationId: DeleteDevice @@ -566,6 +791,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:devices' get: operationId: GetDevice description: Get Device @@ -582,6 +810,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -606,6 +837,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/status': get: operationId: GetDeviceDfuStatus @@ -627,6 +861,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/disable': post: operationId: DisableDevice @@ -643,6 +880,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/enable': post: operationId: EnableDevice @@ -659,6 +899,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_hierarchy': get: operationId: GetDeviceEnvironmentHierarchy @@ -681,6 +924,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables': get: operationId: GetDeviceEnvironmentVariables @@ -694,6 +940,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -716,6 +965,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables/{key}': delete: operationId: DeleteDeviceEnvironmentVariable @@ -738,6 +990,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/files': delete: operationId: DeleteNotefiles @@ -766,6 +1021,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:notefiles' get: operationId: ListNotefiles description: Lists .qi and .db files for the device @@ -799,6 +1057,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:notefiles' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/fleets': delete: operationId: DeleteDeviceFromFleets @@ -828,6 +1089,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:devices' get: operationId: GetDeviceFleets description: Get Device Fleets @@ -840,6 +1104,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -871,6 +1138,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/health-log': get: operationId: GetDeviceHealthLog @@ -923,6 +1193,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/latest': get: operationId: GetDeviceLatestEvents @@ -939,6 +1212,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notefiles/{notefileID}': post: operationId: CreateNotefile @@ -956,6 +1232,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notefiles' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}': get: operationId: GetNotefile @@ -1005,6 +1284,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:notefiles' post: operationId: AddQiNote description: 'Adds a Note to a Notefile, creating the Notefile if it doesn''t yet exist.' @@ -1028,6 +1310,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notes' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}/{noteID}': delete: operationId: DeleteNote @@ -1046,6 +1331,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:notes' get: operationId: GetDbNote description: Get a note from a .db or .qi notefile @@ -1089,6 +1377,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:notes' post: operationId: AddDbNote description: Add a Note to a .db notefile. if noteID is '-' then payload is ignored and empty notefile is created @@ -1113,6 +1404,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:notes' put: operationId: UpdateDbNote description: Update a note in a .db or .qi notefile @@ -1137,6 +1431,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:notes' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/plans': get: operationId: GetDevicePlans @@ -1150,6 +1447,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1196,6 +1496,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/public-key': get: operationId: GetDevicePublicKey @@ -1224,6 +1527,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/sessions': get: operationId: GetDeviceSessions @@ -1245,6 +1551,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/signal': post: operationId: SignalDevice @@ -1276,6 +1585,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/public-keys': get: operationId: GetDevicePublicKeys @@ -1312,6 +1624,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/{action}': post: operationId: PerformDfuAction @@ -1345,6 +1660,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/history': get: operationId: GetDevicesDfuHistory @@ -1378,6 +1696,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/status': get: operationId: GetDevicesDfuStatus @@ -1411,6 +1732,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/environment_hierarchy': get: operationId: GetProjectEnvironmentHierarchy @@ -1432,6 +1756,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/environment_variables': get: operationId: GetProjectEnvironmentVariables @@ -1445,6 +1772,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' put: @@ -1464,6 +1794,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/environment_variables/{key}': delete: operationId: DeleteProjectEnvironmentVariable @@ -1485,6 +1818,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/events': get: operationId: GetEvents @@ -1532,6 +1868,9 @@ paths: - personalAccessToken: [] tags: - event + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:events' '/v1/projects/{projectOrProductUID}/events-cursor': get: operationId: GetEventsByCursor @@ -1554,6 +1893,9 @@ paths: - personalAccessToken: [] tags: - event + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:events' '/v1/projects/{projectOrProductUID}/events/{eventUID}/route-logs': get: operationId: GetRouteLogsByEvent @@ -1576,6 +1918,9 @@ paths: - personalAccessToken: [] tags: - event + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:events' '/v1/projects/{projectOrProductUID}/firmware': get: operationId: GetFirmwareInfo @@ -1606,6 +1951,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/firmware/{firmwareType}/{filename}': delete: operationId: DeleteFirmware @@ -1634,6 +1982,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:settings' get: operationId: DownloadFirmware description: Download firmware binary @@ -1659,6 +2010,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' post: operationId: UpdateFirmware description: | @@ -1697,6 +2051,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' put: operationId: UploadFirmware description: Upload firmware binary @@ -1741,6 +2098,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/fleets': get: operationId: GetFleets @@ -1754,6 +2114,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:fleets' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' post: @@ -1789,6 +2152,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:fleets' '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}': delete: operationId: DeleteFleet @@ -1802,6 +2168,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:fleets' get: operationId: GetFleet description: Get Fleet @@ -1816,6 +2185,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:fleets' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/fleetUIDParam' @@ -1866,6 +2238,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:fleets' '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/devices': get: operationId: GetFleetDevices @@ -1892,6 +2267,9 @@ paths: - personalAccessToken: [] tags: - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_hierarchy': get: operationId: GetFleetEnvironmentHierarchy @@ -1914,6 +2292,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:fleets' '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables': get: operationId: GetFleetEnvironmentVariables @@ -1927,6 +2308,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:fleets' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/fleetUIDParam' @@ -1949,6 +2333,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:fleets' '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables/{key}': delete: operationId: DeleteFleetEnvironmentVariable @@ -1971,6 +2358,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:fleets' '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events': get: operationId: GetFleetEvents @@ -2018,6 +2408,9 @@ paths: - personalAccessToken: [] tags: - event + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:events' '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events-cursor': get: operationId: GetFleetEventsByCursor @@ -2042,6 +2435,9 @@ paths: - personalAccessToken: [] tags: - event + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:events' '/v1/projects/{projectOrProductUID}/global-transformation': post: operationId: SetGlobalEventTransformation @@ -2052,9 +2448,9 @@ paths: description: JSONata expression which will be applied to each event before it is persisted and routed required: true content: - application/json: + text/plain: schema: - $ref: '#/components/schemas/JSONata' + type: string responses: '200': description: Successful operation @@ -2064,6 +2460,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/global-transformation/disable': post: operationId: DisableGlobalEventTransformation @@ -2079,6 +2478,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/global-transformation/enable': post: operationId: EnableGlobalEventTransformation @@ -2094,6 +2496,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/jobs': get: operationId: GetJobs @@ -2109,6 +2514,9 @@ paths: - personalAccessToken: [] tags: - jobs + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' post: operationId: CreateJob description: Create a new batch job with an optional name @@ -2139,6 +2547,9 @@ paths: - personalAccessToken: [] tags: - jobs + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/jobs/{jobUID}': delete: operationId: DeleteJob @@ -2157,6 +2568,9 @@ paths: - personalAccessToken: [] tags: - jobs + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:settings' get: operationId: GetJob description: Get a specific batch job definition @@ -2174,6 +2588,9 @@ paths: - personalAccessToken: [] tags: - jobs + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/run': post: operationId: RunJob @@ -2199,6 +2616,9 @@ paths: - personalAccessToken: [] tags: - jobs + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/runs': get: operationId: GetJobRuns @@ -2230,6 +2650,9 @@ paths: - personalAccessToken: [] tags: - jobs + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}': get: operationId: GetJobRun @@ -2248,6 +2671,9 @@ paths: - personalAccessToken: [] tags: - jobs + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}/cancel': post: operationId: CancelJobRun @@ -2266,6 +2692,9 @@ paths: - personalAccessToken: [] tags: - jobs + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/members': get: operationId: GetProjectMembers @@ -2290,6 +2719,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:accounts' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' '/v1/projects/{projectOrProductUID}/monitors': @@ -2307,6 +2739,9 @@ paths: - personalAccessToken: [] tags: - monitor + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' post: operationId: CreateMonitor description: Create a new Monitor @@ -2332,6 +2767,9 @@ paths: - personalAccessToken: [] tags: - monitor + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/monitors/{monitorUID}': delete: operationId: DeleteMonitor @@ -2352,6 +2790,9 @@ paths: - personalAccessToken: [] tags: - monitor + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:devices' get: operationId: GetMonitor description: Get Monitor @@ -2371,6 +2812,9 @@ paths: - personalAccessToken: [] tags: - monitor + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' put: operationId: UpdateMonitor description: Update Monitor @@ -2397,6 +2841,9 @@ paths: - personalAccessToken: [] tags: - monitor + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/products': get: operationId: GetProducts @@ -2419,6 +2866,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:products' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' post: @@ -2461,6 +2911,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/products/{productUID}': delete: operationId: DeleteProduct @@ -2474,6 +2927,9 @@ paths: - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:settings' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/productUIDParam' @@ -2530,6 +2986,9 @@ paths: - personalAccessToken: [] tags: - route + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:routes' post: operationId: CreateRoute description: Create Route within a Project @@ -2589,6 +3048,9 @@ paths: - personalAccessToken: [] tags: - route + x-custom-attributes: + permission: create + resource: 'blues:resources:app:APPSERIAL:routes' '/v1/projects/{projectOrProductUID}/routes/{routeUID}': delete: operationId: DeleteRoute @@ -2605,6 +3067,9 @@ paths: - personalAccessToken: [] tags: - route + x-custom-attributes: + permission: delete + resource: 'blues:resources:app:APPSERIAL:routes' get: operationId: GetRoute description: Get single route within a project @@ -2642,6 +3107,9 @@ paths: - personalAccessToken: [] tags: - route + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:routes' put: operationId: UpdateRoute description: Update route by UID @@ -2702,6 +3170,9 @@ paths: - personalAccessToken: [] tags: - route + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:routes' '/v1/projects/{projectOrProductUID}/routes/{routeUID}/route-logs': get: operationId: GetRouteLogsByRoute @@ -2736,6 +3207,9 @@ paths: - personalAccessToken: [] tags: - route + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:routes' '/v1/projects/{projectOrProductUID}/schemas': get: operationId: GetNotefileSchemas @@ -2751,8 +3225,13 @@ paths: type: array items: $ref: '#/components/schemas/NotefileSchema' + security: + - personalAccessToken: [] tags: - project + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/usage/data': get: operationId: GetDataUsage @@ -2794,6 +3273,9 @@ paths: - personalAccessToken: [] tags: - usage + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:events' '/v1/projects/{projectOrProductUID}/usage/events': get: operationId: GetEventsUsage @@ -2863,6 +3345,9 @@ paths: - personalAccessToken: [] tags: - usage + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:events' '/v1/projects/{projectOrProductUID}/usage/route-logs': get: operationId: GetRouteLogsUsage @@ -2909,6 +3394,9 @@ paths: - personalAccessToken: [] tags: - usage + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:events' '/v1/projects/{projectOrProductUID}/usage/sessions': get: operationId: GetSessionsUsage @@ -2957,6 +3445,9 @@ paths: - personalAccessToken: [] tags: - usage + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:events' '/v1/projects/{projectOrProductUID}/webhooks': get: operationId: GetWebhooks @@ -2981,6 +3472,9 @@ paths: - personalAccessToken: [] tags: - webhook + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' '/v1/projects/{projectOrProductUID}/webhooks/{webhookUID}': delete: operationId: DeleteWebhook @@ -2997,6 +3491,9 @@ paths: - personalAccessToken: [] tags: - webhook + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' get: operationId: GetWebhook description: Retrieves the configuration settings for the specified webhook @@ -3016,6 +3513,9 @@ paths: - personalAccessToken: [] tags: - webhook + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' post: operationId: CreateWebhook description: Creates a webhook for the specified product with the given name. The name | must be unique within the project. @@ -3042,6 +3542,9 @@ paths: - personalAccessToken: [] tags: - webhook + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' put: operationId: UpdateWebhook description: Updates the configuration settings for the specified webhook. | Webhook will be created if it does not exist. Update body will completely replace the existing settings. @@ -3066,6 +3569,9 @@ paths: - personalAccessToken: [] tags: - webhook + x-custom-attributes: + permission: update + resource: 'blues:resources:app:APPSERIAL:settings' components: parameters: billingAccountUIDParam: From f10d0d692e2a1b27fe90816956df4cd51e8dbd6b Mon Sep 17 00:00:00 2001 From: "blues-hub-automation[bot]" Date: Wed, 6 May 2026 21:32:34 +0000 Subject: [PATCH 13/18] feat: Update OpenAPI file replicated from Notehub commit 944e5c4 --- openapi.yaml | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 3f8b442..0df2233 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -1196,6 +1196,125 @@ paths: x-custom-attributes: permission: read resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/journeys': + get: + operationId: GetDeviceJourneys + description: | + Get the list of journeys for a device, derived from `_track.qo` events. Returns journey metadata only (no event payloads). Capped at 100 most recent journeys; `has_more` is true when the cap is hit. + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/deviceUIDParam' + - $ref: '#/components/parameters/startDateParam' + - $ref: '#/components/parameters/endDateParam' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + type: object + properties: + has_more: + type: boolean + journeys: + type: array + items: + properties: + end_date: + description: Latest event time within the journey. + type: string + format: date-time + journey_id: + description: | + Identifier of the journey, taken from the `journey` field on `_track.qo` events. This value is itself a Unix timestamp marking the start of the journey. + type: integer + format: int64 + start_date: + description: Earliest event time within the journey. + type: string + format: date-time + required: + - journey_id + - start_date + - end_date + type: object + required: + - journeys + - has_more + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/journeys/{journeyID}': + get: + operationId: GetDeviceJourney + description: | + Get a single journey for a device along with its `_track.qo` events. The events array is paginated via `pageSize` / `pageNum`; use `journey.has_more` to detect additional pages. + parameters: + - $ref: '#/components/parameters/projectOrProductUIDParam' + - $ref: '#/components/parameters/deviceUIDParam' + - name: journeyID + in: path + description: | + Identifier of the journey, taken from the `journey` field on `_track.qo` events (a Unix timestamp marking the start of the journey). + required: true + schema: + type: integer + format: int64 + - $ref: '#/components/parameters/pageSizeParam' + - $ref: '#/components/parameters/pageNumParam' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + type: object + properties: + end_date: + description: Latest event time within the journey. + type: string + format: date-time + journey: + description: Paginated `_track.qo` events for the journey. + type: object + properties: + events: + type: array + items: + $ref: '#/components/schemas/Event' + has_more: + type: boolean + required: + - events + - has_more + journey_id: + description: Identifier of the journey. + type: integer + format: int64 + start_date: + description: Earliest event time within the journey. + type: string + format: date-time + required: + - journey_id + - start_date + - end_date + - journey + default: + $ref: '#/components/responses/ErrorResponse' + security: + - personalAccessToken: [] + tags: + - device + x-custom-attributes: + permission: read + resource: 'blues:resources:app:APPSERIAL:devices' '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/latest': get: operationId: GetDeviceLatestEvents From 2263c483fba297189d8b97f1f47214f2acde1701 Mon Sep 17 00:00:00 2001 From: "blues-hub-automation[bot]" Date: Thu, 7 May 2026 19:40:51 +0000 Subject: [PATCH 14/18] feat: Update OpenAPI file replicated from Notehub commit a245776 --- openapi.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 0df2233..76644b4 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -5850,6 +5850,16 @@ components: type: integer uid: type: string + usage_scope: + description: 'For usage monitors: the scope of aggregation. Supported values are "device" and "fleet".' + type: string + usage_type: + description: 'For usage monitors: the type of data usage to monitor. Supported values are "cellular" and "satellite".' + type: string + usage_window: + description: 'For usage monitors: the rolling time window in days to sum usage over (e.g. 30 for 30 days).' + type: integer + format: int32 MqttRoute: type: object properties: From 6f3d5a307ced70c64f86123312370d384ebbf95b Mon Sep 17 00:00:00 2001 From: "blues-hub-automation[bot]" Date: Fri, 8 May 2026 19:44:23 +0000 Subject: [PATCH 15/18] feat: Update OpenAPI file replicated from Notehub commit 1923a44 --- openapi.yaml | 725 ++++++++++++++++++++++++++++----------------------- 1 file changed, 393 insertions(+), 332 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 76644b4..7f1d82f 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3,14 +3,14 @@ info: contact: email: engineering@blues.io name: Blues Engineering - url: 'https://dev.blues.io/support/' + url: https://dev.blues.io/support/ description: | The OpenAPI definition for the Notehub.io API. title: Notehub API version: 1.2.0 servers: - description: Production server - url: 'https://api.notefile.net' + url: https://api.notefile.net paths: /auth/login: post: @@ -147,7 +147,7 @@ paths: - billing_account x-custom-attributes: permission: read - '/v1/billing-accounts/{billingAccountUID}': + /v1/billing-accounts/{billingAccountUID}: get: operationId: GetBillingAccount description: Get Billing Account Information @@ -197,7 +197,7 @@ paths: - billing_account x-custom-attributes: permission: read - '/v1/billing-accounts/{billingAccountUID}/balance-history': + /v1/billing-accounts/{billingAccountUID}/balance-history: get: operationId: GetBillingAccountBalanceHistory description: Get Billing Account Balance history @@ -239,7 +239,7 @@ paths: - billing_account x-custom-attributes: permission: read - '/v1/products/{productUID}/devices/{deviceUID}/environment_variables_with_pin': + /v1/products/{productUID}/devices/{deviceUID}/environment_variables_with_pin: get: operationId: GetDeviceEnvironmentVariablesByPin description: Get environment variables of a device with device pin authorization @@ -279,15 +279,15 @@ paths: - device x-custom-attributes: permission: update - '/v1/products/{productUID}/devices/{deviceUID}/webhook-event': + /v1/products/{productUID}/devices/{deviceUID}/webhook-event: post: operationId: CreateLegacyWebhookEvent - description: 'Legacy endpoint for sending an event from a webhook, associated with the given device (provisioning it if necessary). The request body is a Note-shaped object containing the notefile name, body, and optional payload.' + description: Legacy endpoint for sending an event from a webhook, associated with the given device (provisioning it if necessary). The request body is a Note-shaped object containing the notefile name, body, and optional payload. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/deviceUIDParam' requestBody: - description: 'A Note-shaped event with notefile name, JSON body, and optional base64-encoded payload.' + description: A Note-shaped event with notefile name, JSON body, and optional base64-encoded payload. required: true content: application/json: @@ -321,8 +321,8 @@ paths: - webhook x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/devices/{deviceUID}/webhook-session': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/devices/{deviceUID}/webhook-session: put: operationId: UpdateLegacyWebhookSession description: Legacy endpoint for opening or updating a webhook session for the given device (provisioning the device if necessary). Used by external services that need to maintain a callable session against a device behind a webhook. @@ -348,8 +348,8 @@ paths: - webhook x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/ext-devices/{deviceUID}/event': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/ext-devices/{deviceUID}/event: post: operationId: CreateEventExtDevice description: Creates an event using specified webhook @@ -374,8 +374,8 @@ paths: - external devices x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/ext-devices/{deviceUID}/session/close': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/ext-devices/{deviceUID}/session/close: post: operationId: ExtDeviceSessionClose description: Closes the session for the specified device if open @@ -400,8 +400,8 @@ paths: - external devices x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/ext-devices/{deviceUID}/session/open': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/ext-devices/{deviceUID}/session/open: post: operationId: ExtDeviceSessionOpen description: Create a Session for the specified device. | If a session is currently open it will be closed and a new one opened. @@ -426,8 +426,8 @@ paths: - external devices x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/project': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/project: get: operationId: GetProjectByProduct description: Get a Project by ProductUID @@ -453,11 +453,11 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/products/{productUID}/webhooks/{webhookUID}/devices/{deviceUID}/event': + resource: blues:resources:app:APPSERIAL:settings + /v1/products/{productUID}/webhooks/{webhookUID}/devices/{deviceUID}/event: post: operationId: CreateWebhookDeviceEventByProduct - description: 'Sends an event to be processed by the specified webhook, addressed by productUID, associated with the given device (provisioning it if necessary). The entire request body becomes the event body. The webhook''s configured JSONata transform, if any, is applied before routing.' + description: Sends an event to be processed by the specified webhook, addressed by productUID, associated with the given device (provisioning it if necessary). The entire request body becomes the event body. The webhook's configured JSONata transform, if any, is applied before routing. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -481,11 +481,11 @@ paths: - webhook x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/webhooks/{webhookUID}/event': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/webhooks/{webhookUID}/event: post: operationId: CreateWebhookEventByProduct - description: 'Sends an event to be processed by the specified webhook, addressed by productUID. The entire request body becomes the event body. The webhook''s configured JSONata transform, if any, is applied before routing. The event is not associated with a specific device.' + description: Sends an event to be processed by the specified webhook, addressed by productUID. The entire request body becomes the event body. The webhook's configured JSONata transform, if any, is applied before routing. The event is not associated with a specific device. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -508,11 +508,11 @@ paths: - webhook x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/webhooks/{webhookUID}/settings': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/webhooks/{webhookUID}/settings: get: operationId: GetWebhookSettingsByProduct - description: 'Retrieves the configuration settings for the specified webhook, addressed by productUID.' + description: Retrieves the configuration settings for the specified webhook, addressed by productUID. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -531,10 +531,10 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings put: operationId: UpdateWebhookSettingsByProduct - description: 'Updates the configuration settings for the specified webhook, addressed by productUID. Update body will completely replace the existing settings.' + description: Updates the configuration settings for the specified webhook, addressed by productUID. Update body will completely replace the existing settings. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -558,7 +558,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings /v1/projects: get: operationId: GetProjects @@ -619,7 +619,7 @@ paths: - project x-custom-attributes: permission: create - '/v1/projects/{projectOrProductUID}': + /v1/projects/{projectOrProductUID}: delete: operationId: DeleteProject description: Delete a Project by ProjectUID @@ -636,7 +636,7 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings get: operationId: GetProject description: Get a Project by ProjectUID @@ -657,8 +657,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/alerts': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/alerts: get: operationId: GetAlerts description: Get list of defined Alerts @@ -678,8 +678,8 @@ paths: - alert x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/aws-role-config': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/aws-role-config: get: operationId: GetAWSRoleConfig summary: Get AWS role configuration for role-based authentication @@ -703,8 +703,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/clone': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/clone: post: operationId: CloneProject description: Clone a Project @@ -719,7 +719,7 @@ paths: type: object properties: billing_account_uid: - description: 'The billing account UID for the project. The caller of the API must be able to create projects within the billing account, otherwise an error will be returned.' + description: The billing account UID for the project. The caller of the API must be able to create projects within the billing account, otherwise an error will be returned. type: string disable_clone_fleets: description: Whether to disallow the cloning of the fleets from the parent project. Default is false if not specified. @@ -748,8 +748,8 @@ paths: - project x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/devices': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/devices: get: operationId: GetDevices description: Get Devices of a Project @@ -777,8 +777,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}: delete: operationId: DeleteDevice description: Delete Device @@ -793,7 +793,7 @@ paths: - device x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices get: operationId: GetDevice description: Get Device @@ -812,11 +812,11 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/history': + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/history: get: operationId: GetDeviceDfuHistory description: Get device DFU history for host or Notecard firmware @@ -839,8 +839,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/status': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/status: get: operationId: GetDeviceDfuStatus description: Get device DFU history for host or Notecard firmware @@ -863,8 +863,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/disable': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/disable: post: operationId: DisableDevice description: Disable Device @@ -882,8 +882,8 @@ paths: - device x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/enable': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/enable: post: operationId: EnableDevice description: Enable Device @@ -901,8 +901,8 @@ paths: - device x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_hierarchy': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_hierarchy: get: operationId: GetDeviceEnvironmentHierarchy summary: Get environment variable hierarchy for a device @@ -926,8 +926,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables: get: operationId: GetDeviceEnvironmentVariables description: Get environment variables of a device @@ -942,7 +942,7 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -967,8 +967,8 @@ paths: - device x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables/{key}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables/{key}: delete: operationId: DeleteDeviceEnvironmentVariable description: Delete environment variable of a device @@ -992,8 +992,8 @@ paths: - device x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/files': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/files: delete: operationId: DeleteNotefiles description: Deletes Notefiles and the Notes they contain. @@ -1023,7 +1023,7 @@ paths: - device x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:notefiles' + resource: blues:resources:app:APPSERIAL:notefiles get: operationId: ListNotefiles description: Lists .qi and .db files for the device @@ -1059,8 +1059,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:notefiles' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/fleets': + resource: blues:resources:app:APPSERIAL:notefiles + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/fleets: delete: operationId: DeleteDeviceFromFleets description: Remove Device from Fleets @@ -1091,7 +1091,7 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices get: operationId: GetDeviceFleets description: Get Device Fleets @@ -1106,7 +1106,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1140,8 +1140,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/health-log': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/health-log: get: operationId: GetDeviceHealthLog description: Get Device Health Log @@ -1333,8 +1333,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notefiles/{notefileID}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/notefiles/{notefileID}: post: operationId: CreateNotefile description: Creates an empty Notefile on the device. @@ -1353,11 +1353,11 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notefiles' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}': + resource: blues:resources:app:APPSERIAL:notefiles + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}: get: operationId: GetNotefile - description: 'For .qi files, returns the queued up notes. For .db files, returns all notes in the notefile' + description: For .qi files, returns the queued up notes. For .db files, returns all notes in the notefile parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1405,10 +1405,10 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:notefiles' + resource: blues:resources:app:APPSERIAL:notefiles post: operationId: AddQiNote - description: 'Adds a Note to a Notefile, creating the Notefile if it doesn''t yet exist.' + description: Adds a Note to a Notefile, creating the Notefile if it doesn't yet exist. parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1431,8 +1431,8 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}/{noteID}': + resource: blues:resources:app:APPSERIAL:notes + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}/{noteID}: delete: operationId: DeleteNote description: Delete a note from a .db or .qi notefile @@ -1452,7 +1452,7 @@ paths: - device x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:notes' + resource: blues:resources:app:APPSERIAL:notes get: operationId: GetDbNote description: Get a note from a .db or .qi notefile @@ -1498,7 +1498,7 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:notes' + resource: blues:resources:app:APPSERIAL:notes post: operationId: AddDbNote description: Add a Note to a .db notefile. if noteID is '-' then payload is ignored and empty notefile is created @@ -1525,7 +1525,7 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' + resource: blues:resources:app:APPSERIAL:notes put: operationId: UpdateDbNote description: Update a note in a .db or .qi notefile @@ -1552,11 +1552,11 @@ paths: - device x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/plans': + resource: blues:resources:app:APPSERIAL:notes + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/plans: get: operationId: GetDevicePlans - description: 'Get Data Plans associated with the device, this include the primary sim, any external sim, as well as any satellite connections.' + description: Get Data Plans associated with the device, this include the primary sim, any external sim, as well as any satellite connections. responses: '200': $ref: '#/components/responses/DevicePlansResponse' @@ -1568,11 +1568,11 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/provision': + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/provision: post: operationId: ProvisionDevice description: Provision Device for a Project @@ -1617,8 +1617,8 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/public-key': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/public-key: get: operationId: GetDevicePublicKey description: Get Device Public Key @@ -1648,8 +1648,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/sessions': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/sessions: get: operationId: GetDeviceSessions description: Get Device Sessions @@ -1672,8 +1672,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/signal': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/signal: post: operationId: SignalDevice description: Send a signal from Notehub to a Notecard. @@ -1706,8 +1706,8 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/public-keys': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/public-keys: get: operationId: GetDevicePublicKeys description: Get Device Public Keys of a Project @@ -1745,8 +1745,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/{action}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/dfu/{firmwareType}/{action}: post: operationId: PerformDfuAction description: Update/cancel host or notecard firmware updates @@ -1781,8 +1781,8 @@ paths: - project x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/history': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/dfu/{firmwareType}/history: get: operationId: GetDevicesDfuHistory description: Get host or Notecard DFU history for all devices that match the filter criteria @@ -1817,8 +1817,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/status': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/dfu/{firmwareType}/status: get: operationId: GetDevicesDfuStatus description: Get host or Notecard DFU history for all devices that match the filter criteria @@ -1853,8 +1853,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/environment_hierarchy': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/environment_hierarchy: get: operationId: GetProjectEnvironmentHierarchy summary: Get environment variable hierarchy for a device @@ -1877,8 +1877,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/environment_variables': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/environment_variables: get: operationId: GetProjectEnvironmentVariables description: Get environment variables of a project @@ -1893,7 +1893,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' put: @@ -1915,8 +1915,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/environment_variables/{key}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/environment_variables/{key}: delete: operationId: DeleteProjectEnvironmentVariable description: Delete an environment variable of a project by key @@ -1939,8 +1939,8 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/events': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/events: get: operationId: GetEvents description: Get Events of a Project @@ -1989,8 +1989,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/events-cursor': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/events-cursor: get: operationId: GetEventsByCursor description: Get Events of a Project by cursor @@ -2014,8 +2014,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/events/{eventUID}/route-logs': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/events/{eventUID}/route-logs: get: operationId: GetRouteLogsByEvent description: Get Route Logs by Event UID @@ -2039,8 +2039,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/firmware': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/firmware: get: operationId: GetFirmwareInfo description: Get Available Firmware Information @@ -2072,8 +2072,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/firmware/{firmwareType}/{filename}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/firmware/{firmwareType}/{filename}: delete: operationId: DeleteFirmware description: | @@ -2103,7 +2103,7 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings get: operationId: DownloadFirmware description: Download firmware binary @@ -2131,7 +2131,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings post: operationId: UpdateFirmware description: | @@ -2172,7 +2172,7 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings put: operationId: UploadFirmware description: Upload firmware binary @@ -2186,7 +2186,7 @@ paths: type: string - name: version in: query - description: 'Firmware version (optional). If not provided, the version will be extracted from firmware binary if available, otherwise left empty' + description: Firmware version (optional). If not provided, the version will be extracted from firmware binary if available, otherwise left empty required: false schema: type: string @@ -2219,8 +2219,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/fleets': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/fleets: get: operationId: GetFleets description: Get Project Fleets @@ -2235,7 +2235,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:fleets' + resource: blues:resources:app:APPSERIAL:fleets parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' post: @@ -2252,7 +2252,7 @@ paths: connectivity_assurance: $ref: '#/components/schemas/FleetConnectivityAssurance' label: - description: 'The label, or name, for the Fleet.' + description: The label, or name, for the Fleet. type: string smart_rule: $ref: '#/components/schemas/FleetRule' @@ -2273,8 +2273,8 @@ paths: - project x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}: delete: operationId: DeleteFleet description: Delete Fleet @@ -2289,7 +2289,7 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:fleets' + resource: blues:resources:app:APPSERIAL:fleets get: operationId: GetFleet description: Get Fleet @@ -2306,7 +2306,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:fleets' + resource: blues:resources:app:APPSERIAL:fleets parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/fleetUIDParam' @@ -2359,8 +2359,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/devices': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/devices: get: operationId: GetFleetDevices description: Get Devices of a Fleet within a Project @@ -2388,8 +2388,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_hierarchy': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_hierarchy: get: operationId: GetFleetEnvironmentHierarchy summary: Get environment variable hierarchy for a device @@ -2413,8 +2413,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables: get: operationId: GetFleetEnvironmentVariables description: Get environment variables of a fleet @@ -2429,7 +2429,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:fleets' + resource: blues:resources:app:APPSERIAL:fleets parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/fleetUIDParam' @@ -2454,8 +2454,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables/{key}': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables/{key}: delete: operationId: DeleteFleetEnvironmentVariable description: Delete environment variables of a fleet @@ -2479,8 +2479,8 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events: get: operationId: GetFleetEvents description: Get Events of a Fleet @@ -2529,8 +2529,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events-cursor': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events-cursor: get: operationId: GetFleetEventsByCursor description: Get Events of a Fleet by cursor @@ -2556,8 +2556,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/global-transformation': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/global-transformation: post: operationId: SetGlobalEventTransformation description: Set the project-level event JSONata transformation @@ -2581,8 +2581,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/global-transformation/disable': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/global-transformation/disable: post: operationId: DisableGlobalEventTransformation description: Disable the project-level event JSONata transformation @@ -2599,8 +2599,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/global-transformation/enable': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/global-transformation/enable: post: operationId: EnableGlobalEventTransformation description: Enable the project-level event JSONata transformation @@ -2617,8 +2617,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs: get: operationId: GetJobs description: List all batch jobs for a project @@ -2635,7 +2635,7 @@ paths: - jobs x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings post: operationId: CreateJob description: Create a new batch job with an optional name @@ -2668,8 +2668,8 @@ paths: - jobs x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/{jobUID}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/{jobUID}: delete: operationId: DeleteJob description: Delete a batch job @@ -2689,7 +2689,7 @@ paths: - jobs x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings get: operationId: GetJob description: Get a specific batch job definition @@ -2709,8 +2709,8 @@ paths: - jobs x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/run': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/{jobUID}/run: post: operationId: RunJob description: Execute a batch job @@ -2737,8 +2737,8 @@ paths: - jobs x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/runs': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/{jobUID}/runs: get: operationId: GetJobRuns description: List all runs for a specific job @@ -2771,8 +2771,8 @@ paths: - jobs x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}: get: operationId: GetJobRun description: Get the result of a job execution @@ -2792,8 +2792,8 @@ paths: - jobs x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}/cancel': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}/cancel: post: operationId: CancelJobRun description: Cancel a running job execution @@ -2813,8 +2813,8 @@ paths: - jobs x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/members': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/members: get: operationId: GetProjectMembers description: Get Project Members @@ -2840,10 +2840,10 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:accounts' + resource: blues:resources:app:APPSERIAL:accounts parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - '/v1/projects/{projectOrProductUID}/monitors': + /v1/projects/{projectOrProductUID}/monitors: get: operationId: GetMonitors description: Get list of defined Monitors @@ -2860,7 +2860,7 @@ paths: - monitor x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices post: operationId: CreateMonitor description: Create a new Monitor @@ -2888,8 +2888,8 @@ paths: - monitor x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/monitors/{monitorUID}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/monitors/{monitorUID}: delete: operationId: DeleteMonitor description: Delete Monitor @@ -2911,7 +2911,7 @@ paths: - monitor x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices get: operationId: GetMonitor description: Get Monitor @@ -2933,7 +2933,7 @@ paths: - monitor x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices put: operationId: UpdateMonitor description: Update Monitor @@ -2962,8 +2962,8 @@ paths: - monitor x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/products': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/products: get: operationId: GetProducts description: Get Products within a Project @@ -2987,7 +2987,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:products' + resource: blues:resources:app:APPSERIAL:products parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' post: @@ -3006,7 +3006,7 @@ paths: items: type: string disable_devices_by_default: - description: 'If `true`, devices provisioned to this product will be automatically disabled by default.' + description: If `true`, devices provisioned to this product will be automatically disabled by default. type: boolean label: description: The label for the Product. @@ -3032,8 +3032,8 @@ paths: - project x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/products/{productUID}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/products/{productUID}: delete: operationId: DeleteProduct description: Delete a product @@ -3048,11 +3048,11 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/productUIDParam' - '/v1/projects/{projectOrProductUID}/routes': + /v1/projects/{projectOrProductUID}/routes: get: operationId: GetRoutes description: Get all Routes within a Project @@ -3066,34 +3066,34 @@ paths: example: - disabled: false label: success route - modified: '2020-03-09T17:58:37Z' + modified: 2020-03-09T17:58:37Z type: http - uid: 'route:8d65a087d5d290ce5bdf03aeff2becc0' + uid: route:8d65a087d5d290ce5bdf03aeff2becc0 - disabled: false label: failing route - modified: '2020-03-09T17:59:15Z' + modified: 2020-03-09T17:59:15Z type: http - uid: 'route:a9eaad31d5cee8d01a42762f71fb777a' + uid: route:a9eaad31d5cee8d01a42762f71fb777a - disabled: true label: disabled route - modified: '2020-03-09T17:59:44Z' + modified: 2020-03-09T17:59:44Z type: http - uid: 'route:02ddc0e6e236c2a7e482da62047229ad' + uid: route:02ddc0e6e236c2a7e482da62047229ad - disabled: false label: Proxy Route - modified: '2020-03-09T17:58:36Z' + modified: 2020-03-09T17:58:36Z type: proxy - uid: 'route:0ac565deb7b478a250bb82348b9cfdd4' + uid: route:0ac565deb7b478a250bb82348b9cfdd4 - disabled: false label: Myjsonlive Webtest - modified: '2020-03-09T17:58:35Z' + modified: 2020-03-09T17:58:35Z type: proxy - uid: 'route:fb1b9e0aba1bf030311ba2c3c1e3efd7' + uid: route:fb1b9e0aba1bf030311ba2c3c1e3efd7 - disabled: false label: Myjsonlive Echo - modified: '2020-03-09T17:58:34Z' + modified: 2020-03-09T17:58:34Z type: proxy - uid: 'route:7804818f84a3be6193e14d804fe7fca7' + uid: route:7804818f84a3be6193e14d804fe7fca7 schema: type: array items: @@ -3107,7 +3107,7 @@ paths: - route x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:routes' + resource: blues:resources:app:APPSERIAL:routes post: operationId: CreateRoute description: Create Route within a Project @@ -3126,13 +3126,13 @@ paths: disable_http_headers: false filter: {} fleets: - - 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + - fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d http_headers: X-My-Header: value throttle_ms: 100 timeout: 5000 transform: {} - url: 'https://example.com/ingest' + url: https://example.com/ingest label: Route Label schema: $ref: '#/components/schemas/NotehubRoute' @@ -3149,16 +3149,16 @@ paths: system_notefiles: false type: '' fleets: - - 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + - fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d http_headers: null throttle_ms: 100 timeout: 0 transform: {} - url: 'http://route.url' + url: http://route.url label: Route Label - modified: '2020-03-09T17:59:44Z' + modified: 2020-03-09T17:59:44Z type: http - uid: 'route:8d65a087d5d290ce5bdf03aeff2becc0' + uid: route:8d65a087d5d290ce5bdf03aeff2becc0 schema: $ref: '#/components/schemas/NotehubRoute' default: @@ -3169,8 +3169,8 @@ paths: - route x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:routes' - '/v1/projects/{projectOrProductUID}/routes/{routeUID}': + resource: blues:resources:app:APPSERIAL:routes + /v1/projects/{projectOrProductUID}/routes/{routeUID}: delete: operationId: DeleteRoute description: Delete single route within a project @@ -3188,7 +3188,7 @@ paths: - route x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:routes' + resource: blues:resources:app:APPSERIAL:routes get: operationId: GetRoute description: Get single route within a project @@ -3208,16 +3208,16 @@ paths: system_notefiles: false type: '' fleets: - - 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + - fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d http_headers: null throttle_ms: 100 timeout: 0 transform: {} - url: 'http://route.url' + url: http://route.url label: Route Label - modified: '2020-03-09T17:59:44Z' + modified: 2020-03-09T17:59:44Z type: http - uid: 'route:8d65a087d5d290ce5bdf03aeff2becc0' + uid: route:8d65a087d5d290ce5bdf03aeff2becc0 schema: $ref: '#/components/schemas/NotehubRoute' default: @@ -3228,7 +3228,7 @@ paths: - route x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:routes' + resource: blues:resources:app:APPSERIAL:routes put: operationId: UpdateRoute description: Update route by UID @@ -3291,8 +3291,8 @@ paths: - route x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:routes' - '/v1/projects/{projectOrProductUID}/routes/{routeUID}/route-logs': + resource: blues:resources:app:APPSERIAL:routes + /v1/projects/{projectOrProductUID}/routes/{routeUID}/route-logs: get: operationId: GetRouteLogsByRoute description: Get Route Logs by Route UID @@ -3328,8 +3328,8 @@ paths: - route x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:routes' - '/v1/projects/{projectOrProductUID}/schemas': + resource: blues:resources:app:APPSERIAL:routes + /v1/projects/{projectOrProductUID}/schemas: get: operationId: GetNotefileSchemas summary: Get variable format for a notefile @@ -3350,8 +3350,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/usage/data': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/usage/data: get: operationId: GetDataUsage description: Get data usage in bytes for a project with time range and period aggregation @@ -3394,11 +3394,11 @@ paths: - usage x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/usage/events': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/usage/events: get: operationId: GetEventsUsage - description: 'Get events usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied' + description: Get events usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/startDateParam' @@ -3439,7 +3439,7 @@ paths: style: form - name: skipRecentData in: query - description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' + description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. required: false schema: type: boolean @@ -3466,11 +3466,11 @@ paths: - usage x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/usage/route-logs': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/usage/route-logs: get: operationId: GetRouteLogsUsage - description: 'Get route logs usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied' + description: Get route logs usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/startDateParam' @@ -3499,7 +3499,7 @@ paths: - project - name: skipRecentData in: query - description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' + description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. required: false schema: type: boolean @@ -3515,11 +3515,11 @@ paths: - usage x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/usage/sessions': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/usage/sessions: get: operationId: GetSessionsUsage - description: 'Get sessions usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied' + description: Get sessions usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/startDateParam' @@ -3550,7 +3550,7 @@ paths: - project - name: skipRecentData in: query - description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' + description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. required: false schema: type: boolean @@ -3566,8 +3566,8 @@ paths: - usage x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/webhooks': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/webhooks: get: operationId: GetWebhooks description: Retrieves all webhooks for the specified project @@ -3593,8 +3593,8 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/webhooks/{webhookUID}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/webhooks/{webhookUID}: delete: operationId: DeleteWebhook description: Deletes the specified webhook @@ -3612,7 +3612,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings get: operationId: GetWebhook description: Retrieves the configuration settings for the specified webhook @@ -3634,7 +3634,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings post: operationId: CreateWebhook description: Creates a webhook for the specified product with the given name. The name | must be unique within the project. @@ -3663,7 +3663,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings put: operationId: UpdateWebhook description: Updates the configuration settings for the specified webhook. | Webhook will be created if it does not exist. Update body will completely replace the existing settings. @@ -3690,7 +3690,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings components: parameters: billingAccountUIDParam: @@ -3709,7 +3709,7 @@ components: schema: type: string datasetAggregateWindowQueryParam: - description: 'Aggregate results into buckets for a time duration, expressed in Postgres INTERVAL format' + description: Aggregate results into buckets for a time duration, expressed in Postgres INTERVAL format in: query name: aggregate_window required: false @@ -3723,7 +3723,7 @@ components: schema: type: boolean datasetEndQueryParam: - description: 'End of the time range, as an ISO-8601 date or relative to now. If omitted, current time is used.' + description: End of the time range, as an ISO-8601 date or relative to now. If omitted, current time is used. in: query name: end required: false @@ -3737,15 +3737,15 @@ components: schema: type: integer datasetLocationNearQueryParam: - description: 'Latitude and Longitude for location-based filtering, location_near_radius must also be provided' + description: Latitude and Longitude for location-based filtering, location_near_radius must also be provided in: query name: location_near required: false schema: type: string - example: '42.393125,-71.185015' + example: 42.393125,-71.185015 datasetLocationRadiusQueryParam: - description: 'Distance from location_near in meters, location_near must also be provided' + description: Distance from location_near in meters, location_near must also be provided in: query name: location_near_radius required: false @@ -3766,28 +3766,28 @@ components: schema: type: string datasetSelectQueryParam: - description: 'Comma separated list of fields to include. Supports aggregate functions (avg, sum, min, max, count, most_recent).' + description: Comma separated list of fields to include. Supports aggregate functions (avg, sum, min, max, count, most_recent). in: query name: select required: false schema: type: string datasetStartQueryParam: - description: 'Start of the time range, as an ISO-8601 date or relative to now (e.g. -1y). Relative dates follow the Postgres INTERVAL format.' + description: Start of the time range, as an ISO-8601 date or relative to now (e.g. -1y). Relative dates follow the Postgres INTERVAL format. in: query name: start required: true schema: type: string datasetWhereQueryParam: - description: 'Additional filters using boolean logic mini-language (e.g. and.(device.eq.dev:123,temp.gt.100))' + description: Additional filters using boolean logic mini-language (e.g. and.(device.eq.dev:123,temp.gt.100)) in: query name: where required: false schema: type: string dateTypeParam: - description: 'Which date to filter on, either ''captured'' or ''uploaded''. This will apply to the startDate and endDate parameters' + description: Which date to filter on, either 'captured' or 'uploaded'. This will apply to the startDate and endDate parameters example: uploaded in: query name: dateType @@ -3807,7 +3807,7 @@ components: items: type: string deviceUIDParam: - example: 'dev:000000000000000' + example: dev:000000000000000 in: path name: deviceUID required: true @@ -3843,7 +3843,7 @@ components: - update - cancel endDateParam: - description: 'End date for filtering results, specified as a Unix timestamp' + description: End date for filtering results, specified as a Unix timestamp example: 1657894210 in: query name: endDate @@ -3877,7 +3877,7 @@ components: schema: type: string filesQueryParam: - example: '_health.qo, data.qo' + example: _health.qo, data.qo in: query name: files required: false @@ -3897,7 +3897,7 @@ components: - version - length firmwareSortOrderParam: - description: 'Sort order (asc for ascending, desc for descending)' + description: Sort order (asc for ascending, desc for descending) in: query name: sortOrder required: false @@ -3923,7 +3923,7 @@ components: schema: type: string firstSyncParam: - description: 'When true, filters results to only show first sync sessions' + description: When true, filters results to only show first sync sessions in: query name: firstSync required: false @@ -4025,7 +4025,7 @@ components: schema: type: string monitorUIDParam: - example: 'monitor:8bAdf00d-000f-51c-af-01d5eaf00dbad' + example: monitor:8bAdf00d-000f-51c-af-01d5eaf00dbad in: path name: monitorUID required: true @@ -4092,7 +4092,7 @@ components: schema: type: string productUIDParam: - example: 'com.blues.bridge:sensors' + example: com.blues.bridge:sensors in: path name: productUID required: true @@ -4109,7 +4109,7 @@ components: type: string style: form projectOrProductUIDParam: - example: 'app:2606f411-dea6-44a0-9743-1130f57d77d8' + example: app:2606f411-dea6-44a0-9743-1130f57d77d8 in: path name: projectOrProductUID required: true @@ -4136,7 +4136,7 @@ components: required: true schema: type: string - example: 'rid:2606f411-dea6-44a0-9743-1130f57d77d8' + example: rid:2606f411-dea6-44a0-9743-1130f57d77d8 responseStatusParam: example: 500 in: query @@ -4167,7 +4167,7 @@ components: - asc - desc routeUIDParam: - example: 'route:cbd20093cba58392c9f9bbdd0cdeb1a0' + example: route:cbd20093cba58392c9f9bbdd0cdeb1a0 in: path name: routeUID required: true @@ -4197,7 +4197,7 @@ components: - failure type: string selectFieldsParam: - description: 'Comma-separated list of fields to select from JSON payload (e.g., "field1,field2.subfield,field3"), this will reflect the columns in the CSV output.' + description: Comma-separated list of fields to select from JSON payload (e.g., "field1,field2.subfield,field3"), this will reflect the columns in the CSV output. in: query name: selectFields required: false @@ -4275,7 +4275,7 @@ components: - asc - desc startDateParam: - description: 'Start date for filtering results, specified as a Unix timestamp' + description: Start date for filtering results, specified as a Unix timestamp example: 1628631763 in: query name: startDate @@ -4434,7 +4434,7 @@ components: type: number type: object resolved: - description: 'If true, the alert has been resolved' + description: If true, the alert has been resolved type: boolean source: description: The UID of the source of the alert @@ -4592,9 +4592,9 @@ components: type: integer format: int64 plan_type: - description: 'Description of the SIM plan type including data allowance, region, and validity period' + description: Description of the SIM plan type including data allowance, region, and validity period type: string - example: '500MB, North America, 10-year lifetime' + example: 500MB, North America, 10-year lifetime CellularUsage: type: array items: @@ -4706,7 +4706,7 @@ components: description: Last updated timestamp type: number version: - description: 'Last known version, which is generally a JSON object contained within the firmware image' + description: Last known version, which is generally a JSON object contained within the firmware image type: string nullable: true DataField: @@ -4995,7 +4995,7 @@ components: bssid: type: string cell: - description: 'Cell ID where the session originated and quality ("mcc,mnc,lac,cellid")' + description: Cell ID where the session originated and quality ("mcc,mnc,lac,cellid") type: string continuous: description: Was this a continuous connection? @@ -5292,7 +5292,7 @@ components: description: Country type: string best_id: - description: 'The device serial number, or the DeviceUID if the serial number is not set' + description: The device serial number, or the DeviceUID if the serial number is not set type: string best_lat: description: Latitude @@ -5302,7 +5302,7 @@ components: description: Location type: string best_location_type: - description: 'One of "gps", "triangulated", or "tower"' + description: One of "gps", "triangulated", or "tower" type: string best_location_when: description: Unix timestamp @@ -5415,7 +5415,7 @@ components: description: Unix timestamp type: number transport: - description: 'The transport used for this event, e.g., "cellular", "wifi", ", etc.' + description: The transport used for this event, e.g., "cellular", "wifi", ", etc. type: string tri_country: description: Country @@ -5607,7 +5607,7 @@ components: enabled: true nullable: true FleetRule: - description: 'JSONata expression that will be evaluated to determine device membership into this fleet, if the expression evaluates to a 1, the device will be included, if it evaluates to -1 it will be removed, and if it evaluates to 0 or errors it will be left unchanged.' + description: JSONata expression that will be evaluated to determine device membership into this fleet, if the expression evaluates to a 1, the device will be included, if it evaluates to -1 it will be removed, and if it evaluates to 0 or errors it will be left unchanged. type: string properties: {} FleetsUIDList: @@ -5644,7 +5644,7 @@ components: filter: $ref: '#/components/schemas/Filter' fleets: - description: 'If non-empty, applies only to the listed fleets.' + description: If non-empty, applies only to the listed fleets. type: array items: type: string @@ -5721,7 +5721,7 @@ components: type: integer format: int64 status: - description: 'Current status (submitted, running, completed, cancelled, failed)' + description: Current status (submitted, running, completed, cancelled, failed) type: string submitted: description: Unix timestamp when submitted @@ -5772,7 +5772,7 @@ components: type: object properties: aggregate_function: - description: 'Aggregate function to apply to the selected values before applying the condition. [none, sum, average, max, min]' + description: Aggregate function to apply to the selected values before applying the condition. [none, sum, average, max, min] type: string enum: - none @@ -5784,9 +5784,9 @@ components: description: The time window to aggregate the selected values. It follows the format of a number followed by a time unit type: string example: 10m or 5h30m40s - pattern: '^[0-9]+[smh]$' + pattern: ^[0-9]+[smh]$ alert: - description: 'If true, the monitor is in alert state.' + description: If true, the monitor is in alert state. type: boolean alert_routes: type: array @@ -5796,7 +5796,7 @@ components: - $ref: '#/components/schemas/SlackBearerNotification' - $ref: '#/components/schemas/EmailNotification' condition_type: - description: 'A comparison operation to apply to the value selected by the source_selector [greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to, equal_to, not_equal_to]' + description: A comparison operation to apply to the value selected by the source_selector [greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to, equal_to, not_equal_to] type: string enum: - greater_than @@ -5809,7 +5809,7 @@ components: description: type: string disabled: - description: 'If true, the monitor will not be evaluated.' + description: If true, the monitor will not be evaluated. type: boolean fleet_filter: type: array @@ -5825,18 +5825,18 @@ components: items: type: string per_device: - description: 'Only relevant when using an aggregate_function. If true, the monitor will be evaluated per device, | rather than across the set of selected devices. If true then if a single device matches the specified criteria, | and alert will be created, otherwise the aggregate function will be applied across all devices.' + description: Only relevant when using an aggregate_function. If true, the monitor will be evaluated per device, | rather than across the set of selected devices. If true then if a single device matches the specified criteria, | and alert will be created, otherwise the aggregate function will be applied across all devices. type: boolean routing_cooldown_period: description: The time period to wait before routing another event after the monitor | has been triggered. It follows the format of a number followed by a time unit. type: string example: 10m or 5h30m40s - pattern: '^[0-9]+[smh]$' + pattern: ^[0-9]+[smh]$ silenced: - description: 'If true, alerts will be created, but no notifications will be sent.' + description: If true, alerts will be created, but no notifications will be sent. type: boolean source_selector: - description: 'A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value.' + description: A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value. type: string example: body.temperature source_type: @@ -5906,7 +5906,7 @@ components: description: True if originated from an edge source. type: boolean id: - description: 'Note name/identifier (e.g., "1:435", "my_note").' + description: Note name/identifier (e.g., "1:435", "my_note"). type: string payload: description: Optional base64-encoded payload. @@ -5941,7 +5941,7 @@ components: type: object properties: id: - description: 'Notefile id (e.g., "test.qi", "config.db").' + description: Notefile id (e.g., "test.qi", "config.db"). type: string notes: type: array @@ -5954,7 +5954,7 @@ components: - id - notes NotefileList: - description: 'Array of notefiles, each containing its notes.' + description: Array of notefiles, each containing its notes. type: array items: $ref: '#/components/schemas/Notefile' @@ -6041,7 +6041,7 @@ components: default: http uid: type: string - default: 'route:8d65a087d5d290ce5bdf03aeff2becc0' + default: route:8d65a087d5d290ce5bdf03aeff2becc0 OAuth2Error: type: object properties: @@ -6108,7 +6108,7 @@ components: format: date-time nullable: true last_used: - description: 'When it was last used, if ever' + description: When it was last used, if ever type: string format: date-time nullable: true @@ -6116,7 +6116,7 @@ components: description: Name for this API Key type: string suspended: - description: 'if true, this token cannot be used' + description: if true, this token cannot be used type: boolean uid: description: Unique and public identifier @@ -6134,7 +6134,7 @@ components: name: type: string suspended: - description: 'if true, the token is temporarily suspended' + description: if true, the token is temporarily suspended type: boolean required: - expiresAt @@ -6276,6 +6276,67 @@ components: uid: description: The unique identifier for the data repository type: string + RepositoryListResponse: + type: object + properties: + repositories: + type: array + items: + $ref: '#/components/schemas/Repository' + required: + - repositories + RepositoryTokenRequest: + type: object + properties: + intent: + description: | + Access intent for the vended credentials. Only `read` is + supported today; `write` and `admin` are reserved for future use. + type: string + default: read + enum: + - read + ttl_seconds: + description: | + Requested credential lifetime in seconds. Clamped server-side to + [60, 3600]. Defaults to 900 (15 minutes) if omitted. + type: integer + default: 900 + maximum: 3600 + minimum: 60 + RepositoryTokenResponse: + type: object + properties: + database: + description: Storage service database name scoped to this repository + type: string + expires_at: + description: | + Absolute expiration time of the ephemeral user. The storage + service will reject connections and queries after this instant. + type: string + format: date-time + host: + description: Storage service hostname the caller should connect to + type: string + password: + description: | + Ephemeral password. Returned once; not stored by Notehub. Hold + this in memory only and discard after `expires_at`. + type: string + port: + description: Storage service port + type: integer + username: + description: Ephemeral storage service username (prefixed with `u_`) + type: string + required: + - host + - port + - username + - password + - database + - expires_at Role: type: string properties: {} @@ -6290,7 +6351,7 @@ components: type: object properties: attn: - description: 'If true, an error was returned when routing' + description: If true, an error was returned when routing type: boolean date: description: The date of the logs. @@ -6320,7 +6381,7 @@ components: type: object properties: format: - description: 'Output format for transformed data (e.g., "json", "xml", "text").' + description: Output format for transformed data (e.g., "json", "xml", "text"). type: string example: json jsonata: @@ -6425,7 +6486,7 @@ components: psid: description: Provider-specific identifier for the satellite subscription type: string - example: 'skylo:5746354465786' + example: skylo:5746354465786 satellite_data_usage: $ref: '#/components/schemas/SatelliteDataUsage' nullable: true @@ -6499,7 +6560,7 @@ components: - text - blocks text: - description: 'The text of the message, or the blocks definition' + description: The text of the message, or the blocks definition type: string token: description: The bearer token for the Slack app. @@ -6541,7 +6602,7 @@ components: - text - blocks text: - description: 'The text of the message, or the blocks definition' + description: The text of the message, or the blocks definition type: string url: description: The URL of the Slack webhook. @@ -6650,7 +6711,7 @@ components: mnc: description: Mobile Network Code type: integer - 'n': + n: description: Name of the location type: string source: @@ -6763,7 +6824,7 @@ components: period: type: string format: date-time - example: '2025-07-23T00:00:00Z' + example: 2025-07-23T00:00:00Z total_bytes: type: integer format: int64 @@ -6787,16 +6848,16 @@ components: type: object properties: billable_events: - description: 'Events that are billable, this include all events except platform events' + description: Events that are billable, this include all events except platform events type: integer format: int64 example: 10 device: type: string - example: 'dev:123456789012345' + example: dev:123456789012345 fleet: type: string - example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + example: fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d notefiles: description: Count of events per notefile. Only present when includeNotefiles=true is specified. type: object @@ -6810,14 +6871,14 @@ components: period: type: string format: date-time - example: '2025-07-23T00:00:00Z' + example: 2025-07-23T00:00:00Z platform_events: - description: 'Total platform events. Platform events are _log, _session, _health, and _geolocate events some of which are send from the device, some generated by notehub. These events are not billed.' + description: Total platform events. Platform events are _log, _session, _health, and _geolocate events some of which are send from the device, some generated by notehub. These events are not billed. type: integer format: int64 example: 15 total_days_in_period: - description: 'The total number of days in this period. Useful for calculating daily averages for month period. Note that the current period will be the total number of days in the current period, including days in the future.' + description: The total number of days in this period. Useful for calculating daily averages for month period. Note that the current period will be the total number of days in the current period, including days in the future. type: integer format: int32 total_devices: @@ -6825,7 +6886,7 @@ components: type: integer format: int64 total_events: - description: 'Total events the device sent to notehub, including associated notehub generated events' + description: Total events the device sent to notehub, including associated notehub generated events type: integer format: int64 example: 42 @@ -6842,7 +6903,7 @@ components: example: 2 nullable: true watchdog_events: - description: 'Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time.' + description: Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time. type: integer format: int64 example: 10 @@ -6879,11 +6940,11 @@ components: period: type: string format: date-time - example: '2025-07-23T00:00:00Z' + example: 2025-07-23T00:00:00Z route: description: The route UID (only present when aggregate is 'route') type: string - example: 'route:cbd20093cba58392c9f9bbdd0cdeb1a0' + example: route:cbd20093cba58392c9f9bbdd0cdeb1a0 successful_routes: type: integer format: int64 @@ -6902,7 +6963,7 @@ components: properties: device: type: string - example: 'dev:123456789012345' + example: dev:123456789012345 first_sync_sessions: description: Number of first sync sessions in this period type: integer @@ -6910,17 +6971,17 @@ components: example: 2 fleet: type: string - example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + example: fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d period: type: string format: date-time - example: '2025-07-23T00:00:00Z' + example: 2025-07-23T00:00:00Z sessions: type: integer format: int64 example: 12 sessions_by_transport: - description: 'Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan)' + description: Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan) type: object example: cell: 8 @@ -6950,7 +7011,7 @@ components: - total_bytes - total_devices UsageTruncatedField: - description: 'If the data is truncated that means that the parameters selected resulted in a response of over | the requested limit of data points, in order to ensure' + description: If the data is truncated that means that the parameters selected resulted in a response of over | the requested limit of data points, in order to ensure type: boolean properties: {} UserDfuStateMachine: @@ -7122,7 +7183,7 @@ components: - has_more example: events: - - app: 'app:218f6217-9f78-432e-9fe0-02ca8b5a216c' + - app: app:218f6217-9f78-432e-9fe0-02ca8b5a216c best_country: US best_id: My Device best_lat: 34.82476372 @@ -7136,15 +7197,15 @@ components: pressure: 97705.66 temperature: 24.0625 voltage: 2.598 - device: 'dev:5c0272311928' + device: dev:5c0272311928 event: dfa3747d-688b-4250-935b-5dd60354313c file: air.qo - product: 'product:com.blues.project.demo' + product: product:com.blues.project.demo received: 1656011227.006928 req: note.add session: b623132c-6afb-4740-bc39-e3634e38f064 sn: My Device - tower_id: '0,0,0,0' + tower_id: 0,0,0,0 tri_country: US tri_lat: 34.82475372 tri_location: Atlanta GA @@ -7183,7 +7244,7 @@ components: - has_more example: events: - - app: 'app:218f6217-9f78-432e-9fe0-02ca8b5a216c' + - app: app:218f6217-9f78-432e-9fe0-02ca8b5a216c best_country: US best_id: My Device best_lat: 34.82476372 @@ -7197,15 +7258,15 @@ components: pressure: 97705.66 temperature: 24.0625 voltage: 2.598 - device: 'dev:5c0272311928' + device: dev:5c0272311928 event: dfa3747d-688b-4250-935b-5dd60354313c file: air.qo - product: 'product:com.blues.project.demo' + product: product:com.blues.project.demo received: 1656011227.006928 req: note.add session: b623132c-6afb-4740-bc39-e3634e38f064 sn: My Device - tower_id: '0,0,0,0' + tower_id: 0,0,0,0 tri_country: US tri_lat: 34.82475372 tri_location: Atlanta GA @@ -7252,7 +7313,7 @@ components: additionalProperties: type: string environment_variables_effective: - description: 'The environment variables as they will be seen by the device, fully resolved with project/fleet/device prioritization rules.' + description: The environment variables as they will be seen by the device, fully resolved with project/fleet/device prioritization rules. type: object additionalProperties: type: string @@ -7320,59 +7381,59 @@ components: $ref: '#/components/schemas/Event' example: latest_events: - - app: 'app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446' + - app: app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446 body: why: sensors.qo requested sync (sensors.qo) (TLS) - device: 'dev:864475040523995' + device: dev:864475040523995 event: 81bd2bf1-0399-4978-bc46-8f779b4af350 file: _session.qo - product: 'product:com.blues.app:myapp' + product: product:com.blues.app:myapp received: 1669667707.564694 req: session.begin session: ed18884b-f2a6-419f-b856-d28dc8f0892b tls: true tower_country: US - tower_id: '310,410,20483,184692495' + tower_id: 310,410,20483,184692495 tower_lat: 43.769062500000004 tower_location: Waverly MI tower_lon: -83.657359375 tower_timezone: America/Detroit tower_when: 1669667691 when: 1669667707 - - app: 'app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446' + - app: app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446 body: humid: 56.23 temp: 35.5 - device: 'dev:864475040523995' + device: dev:864475040523995 event: 916d4c81-06ae-4263-9b55-7a3a0f73cb5a file: data.qo - product: 'product:com.blues.app:myapp' + product: product:com.blues.app:myapp received: 1669667713.221659 req: note.add session: 28cdc39f-9f62-4789-b0a3-2f35f9448ced sn: tj-1 tower_country: US - tower_id: '310,410,20483,184692495' + tower_id: 310,410,20483,184692495 tower_lat: 43.769062500000004 tower_location: Waverly MI tower_lon: -83.657359375 tower_timezone: America/Detroit tower_when: 1669667677 when: 1669667689 - - app: 'app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446' + - app: app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446 body: humidity: 69.88647200683693 pressure: 993.6294496104914 temp: 21.273027181770885 - device: 'dev:864475040523995' + device: dev:864475040523995 event: e98c2c3b-edbe-4fe7-af57-2196cc843eb7 file: sensors.qo - product: 'product:com.blues.app:myapp' + product: product:com.blues.app:myapp received: 1669667711.85316 req: note.add session: 7211392c-6895-43f8-9256-790655348be5 tower_country: US - tower_id: '310,410,20483,184692496' + tower_id: 310,410,20483,184692496 tower_lat: 43.747037500000005 tower_location: Waverly MI tower_lon: -83.665859375 @@ -7437,12 +7498,12 @@ components: - apn: a-notehub.com.attz bars: 2 bearer: LTE FDD - cell: '310,410,17169,77315594' + cell: 310,410,17169,77315594 continuous: true - device: 'dev:000000000000000' + device: dev:000000000000000 events: 14 fleets: - - 'fleet:46be9834-5te6-42c1-0000-b5ea05e248d7' + - fleet:46be9834-5te6-42c1-0000-b5ea05e248d7 hp_cycles_data: 3 hp_cycles_total: 3 hp_secs_data: 7659 @@ -7458,7 +7519,7 @@ components: notes_sent: 12 sessions_tls: 1 since: 1667250832 - product: 'product:com.blues.demo:project' + product: product:com.blues.demo:project rat: lte rsrp: -91 rsrq: -13 @@ -7477,7 +7538,7 @@ components: lon: -89.44239062499999 mcc: 310 mnc: 410 - 'n': Shorewood Hills WI + n: Shorewood Hills WI time: 1667250835 towers: 1 zone: America/Chicago @@ -7504,14 +7565,14 @@ components: device: description: The device UID this usage data belongs to (only present when aggregate is 'device') type: string - example: 'dev:123456789012345' + example: dev:123456789012345 device_count: description: the number of devices represented by this data point type: integer fleet: description: The fleet UID this usage data belongs to (only present when aggregate is 'fleet') type: string - example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + example: fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d iccid: description: The ICCID of the cellular SIM card (only present when type is 'cellular') type: string @@ -7519,7 +7580,7 @@ components: psid: description: The PSID (Packet Service ID) of the satellite (or other packet-based device) type: string - example: 'skylo:5746354465786' + example: skylo:5746354465786 type: description: The type of connectivity type: string @@ -7588,10 +7649,10 @@ tags: name: webhook - description: APIs for events and sessions for external devices name: external devices - - description: 'Project Usage information related to events, route logs, sessions, and data usage' + - description: Project Usage information related to events, route logs, sessions, and data usage name: usage - description: Batch job operations name: jobs externalDocs: description: Find out more about Blues - url: 'https://blues.io' + url: https://blues.io From ad19e6c5efe2c68305f0ae3b292f3df267ccd214 Mon Sep 17 00:00:00 2001 From: "blues-hub-automation[bot]" Date: Wed, 13 May 2026 15:51:31 +0000 Subject: [PATCH 16/18] feat: Update OpenAPI file replicated from Notehub commit d85a90b --- openapi.yaml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 7f1d82f..c5987b7 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -1195,8 +1195,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/journeys': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/journeys: get: operationId: GetDeviceJourneys description: | @@ -1249,8 +1249,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/journeys/{journeyID}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/journeys/{journeyID}: get: operationId: GetDeviceJourney description: | @@ -1314,8 +1314,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/latest': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/latest: get: operationId: GetDeviceLatestEvents description: Get Device Latest Events @@ -4538,6 +4538,7 @@ components: - billing_admin - billing_manager - project_creator + - billing_member BlynkRoute: type: object properties: From 5fb029cb9786692803fe655ea4b972cf24e7cfc4 Mon Sep 17 00:00:00 2001 From: "blues-hub-automation[bot]" Date: Wed, 13 May 2026 16:50:41 +0000 Subject: [PATCH 17/18] feat: Update OpenAPI file replicated from Notehub commit dd5d44d --- openapi.yaml | 664 +++++++++++++++++++++++++-------------------------- 1 file changed, 332 insertions(+), 332 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index c5987b7..0b9ce19 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3,14 +3,14 @@ info: contact: email: engineering@blues.io name: Blues Engineering - url: https://dev.blues.io/support/ + url: 'https://dev.blues.io/support/' description: | The OpenAPI definition for the Notehub.io API. title: Notehub API version: 1.2.0 servers: - description: Production server - url: https://api.notefile.net + url: 'https://api.notefile.net' paths: /auth/login: post: @@ -147,7 +147,7 @@ paths: - billing_account x-custom-attributes: permission: read - /v1/billing-accounts/{billingAccountUID}: + '/v1/billing-accounts/{billingAccountUID}': get: operationId: GetBillingAccount description: Get Billing Account Information @@ -197,7 +197,7 @@ paths: - billing_account x-custom-attributes: permission: read - /v1/billing-accounts/{billingAccountUID}/balance-history: + '/v1/billing-accounts/{billingAccountUID}/balance-history': get: operationId: GetBillingAccountBalanceHistory description: Get Billing Account Balance history @@ -239,7 +239,7 @@ paths: - billing_account x-custom-attributes: permission: read - /v1/products/{productUID}/devices/{deviceUID}/environment_variables_with_pin: + '/v1/products/{productUID}/devices/{deviceUID}/environment_variables_with_pin': get: operationId: GetDeviceEnvironmentVariablesByPin description: Get environment variables of a device with device pin authorization @@ -279,15 +279,15 @@ paths: - device x-custom-attributes: permission: update - /v1/products/{productUID}/devices/{deviceUID}/webhook-event: + '/v1/products/{productUID}/devices/{deviceUID}/webhook-event': post: operationId: CreateLegacyWebhookEvent - description: Legacy endpoint for sending an event from a webhook, associated with the given device (provisioning it if necessary). The request body is a Note-shaped object containing the notefile name, body, and optional payload. + description: 'Legacy endpoint for sending an event from a webhook, associated with the given device (provisioning it if necessary). The request body is a Note-shaped object containing the notefile name, body, and optional payload.' parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/deviceUIDParam' requestBody: - description: A Note-shaped event with notefile name, JSON body, and optional base64-encoded payload. + description: 'A Note-shaped event with notefile name, JSON body, and optional base64-encoded payload.' required: true content: application/json: @@ -321,8 +321,8 @@ paths: - webhook x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notes - /v1/products/{productUID}/devices/{deviceUID}/webhook-session: + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/devices/{deviceUID}/webhook-session': put: operationId: UpdateLegacyWebhookSession description: Legacy endpoint for opening or updating a webhook session for the given device (provisioning the device if necessary). Used by external services that need to maintain a callable session against a device behind a webhook. @@ -348,8 +348,8 @@ paths: - webhook x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notes - /v1/products/{productUID}/ext-devices/{deviceUID}/event: + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/ext-devices/{deviceUID}/event': post: operationId: CreateEventExtDevice description: Creates an event using specified webhook @@ -374,8 +374,8 @@ paths: - external devices x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notes - /v1/products/{productUID}/ext-devices/{deviceUID}/session/close: + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/ext-devices/{deviceUID}/session/close': post: operationId: ExtDeviceSessionClose description: Closes the session for the specified device if open @@ -400,8 +400,8 @@ paths: - external devices x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notes - /v1/products/{productUID}/ext-devices/{deviceUID}/session/open: + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/ext-devices/{deviceUID}/session/open': post: operationId: ExtDeviceSessionOpen description: Create a Session for the specified device. | If a session is currently open it will be closed and a new one opened. @@ -426,8 +426,8 @@ paths: - external devices x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notes - /v1/products/{productUID}/project: + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/project': get: operationId: GetProjectByProduct description: Get a Project by ProductUID @@ -453,11 +453,11 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/products/{productUID}/webhooks/{webhookUID}/devices/{deviceUID}/event: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/products/{productUID}/webhooks/{webhookUID}/devices/{deviceUID}/event': post: operationId: CreateWebhookDeviceEventByProduct - description: Sends an event to be processed by the specified webhook, addressed by productUID, associated with the given device (provisioning it if necessary). The entire request body becomes the event body. The webhook's configured JSONata transform, if any, is applied before routing. + description: 'Sends an event to be processed by the specified webhook, addressed by productUID, associated with the given device (provisioning it if necessary). The entire request body becomes the event body. The webhook''s configured JSONata transform, if any, is applied before routing.' parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -481,11 +481,11 @@ paths: - webhook x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notes - /v1/products/{productUID}/webhooks/{webhookUID}/event: + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/webhooks/{webhookUID}/event': post: operationId: CreateWebhookEventByProduct - description: Sends an event to be processed by the specified webhook, addressed by productUID. The entire request body becomes the event body. The webhook's configured JSONata transform, if any, is applied before routing. The event is not associated with a specific device. + description: 'Sends an event to be processed by the specified webhook, addressed by productUID. The entire request body becomes the event body. The webhook''s configured JSONata transform, if any, is applied before routing. The event is not associated with a specific device.' parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -508,11 +508,11 @@ paths: - webhook x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notes - /v1/products/{productUID}/webhooks/{webhookUID}/settings: + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/products/{productUID}/webhooks/{webhookUID}/settings': get: operationId: GetWebhookSettingsByProduct - description: Retrieves the configuration settings for the specified webhook, addressed by productUID. + description: 'Retrieves the configuration settings for the specified webhook, addressed by productUID.' parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -531,10 +531,10 @@ paths: - webhook x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' put: operationId: UpdateWebhookSettingsByProduct - description: Updates the configuration settings for the specified webhook, addressed by productUID. Update body will completely replace the existing settings. + description: 'Updates the configuration settings for the specified webhook, addressed by productUID. Update body will completely replace the existing settings.' parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -558,7 +558,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' /v1/projects: get: operationId: GetProjects @@ -619,7 +619,7 @@ paths: - project x-custom-attributes: permission: create - /v1/projects/{projectOrProductUID}: + '/v1/projects/{projectOrProductUID}': delete: operationId: DeleteProject description: Delete a Project by ProjectUID @@ -636,7 +636,7 @@ paths: - project x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' get: operationId: GetProject description: Get a Project by ProjectUID @@ -657,8 +657,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/alerts: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/alerts': get: operationId: GetAlerts description: Get list of defined Alerts @@ -678,8 +678,8 @@ paths: - alert x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/aws-role-config: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/aws-role-config': get: operationId: GetAWSRoleConfig summary: Get AWS role configuration for role-based authentication @@ -703,8 +703,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/clone: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/clone': post: operationId: CloneProject description: Clone a Project @@ -719,7 +719,7 @@ paths: type: object properties: billing_account_uid: - description: The billing account UID for the project. The caller of the API must be able to create projects within the billing account, otherwise an error will be returned. + description: 'The billing account UID for the project. The caller of the API must be able to create projects within the billing account, otherwise an error will be returned.' type: string disable_clone_fleets: description: Whether to disallow the cloning of the fleets from the parent project. Default is false if not specified. @@ -748,8 +748,8 @@ paths: - project x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/devices: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/devices': get: operationId: GetDevices description: Get Devices of a Project @@ -777,8 +777,8 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}': delete: operationId: DeleteDevice description: Delete Device @@ -793,7 +793,7 @@ paths: - device x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:devices + resource: 'blues:resources:app:APPSERIAL:devices' get: operationId: GetDevice description: Get Device @@ -812,11 +812,11 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices + resource: 'blues:resources:app:APPSERIAL:devices' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/history: + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/history': get: operationId: GetDeviceDfuHistory description: Get device DFU history for host or Notecard firmware @@ -839,8 +839,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/status: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/status': get: operationId: GetDeviceDfuStatus description: Get device DFU history for host or Notecard firmware @@ -863,8 +863,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/disable: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/disable': post: operationId: DisableDevice description: Disable Device @@ -882,8 +882,8 @@ paths: - device x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/enable: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/enable': post: operationId: EnableDevice description: Enable Device @@ -901,8 +901,8 @@ paths: - device x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_hierarchy: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_hierarchy': get: operationId: GetDeviceEnvironmentHierarchy summary: Get environment variable hierarchy for a device @@ -926,8 +926,8 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables': get: operationId: GetDeviceEnvironmentVariables description: Get environment variables of a device @@ -942,7 +942,7 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices + resource: 'blues:resources:app:APPSERIAL:devices' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -967,8 +967,8 @@ paths: - device x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables/{key}: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables/{key}': delete: operationId: DeleteDeviceEnvironmentVariable description: Delete environment variable of a device @@ -992,8 +992,8 @@ paths: - device x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/files: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/files': delete: operationId: DeleteNotefiles description: Deletes Notefiles and the Notes they contain. @@ -1023,7 +1023,7 @@ paths: - device x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:notefiles + resource: 'blues:resources:app:APPSERIAL:notefiles' get: operationId: ListNotefiles description: Lists .qi and .db files for the device @@ -1059,8 +1059,8 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:notefiles - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/fleets: + resource: 'blues:resources:app:APPSERIAL:notefiles' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/fleets': delete: operationId: DeleteDeviceFromFleets description: Remove Device from Fleets @@ -1091,7 +1091,7 @@ paths: - project x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:devices + resource: 'blues:resources:app:APPSERIAL:devices' get: operationId: GetDeviceFleets description: Get Device Fleets @@ -1106,7 +1106,7 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices + resource: 'blues:resources:app:APPSERIAL:devices' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1140,8 +1140,8 @@ paths: - project x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/health-log: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/health-log': get: operationId: GetDeviceHealthLog description: Get Device Health Log @@ -1333,8 +1333,8 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/notefiles/{notefileID}: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notefiles/{notefileID}': post: operationId: CreateNotefile description: Creates an empty Notefile on the device. @@ -1353,11 +1353,11 @@ paths: - device x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notefiles - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}: + resource: 'blues:resources:app:APPSERIAL:notefiles' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}': get: operationId: GetNotefile - description: For .qi files, returns the queued up notes. For .db files, returns all notes in the notefile + description: 'For .qi files, returns the queued up notes. For .db files, returns all notes in the notefile' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1405,10 +1405,10 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:notefiles + resource: 'blues:resources:app:APPSERIAL:notefiles' post: operationId: AddQiNote - description: Adds a Note to a Notefile, creating the Notefile if it doesn't yet exist. + description: 'Adds a Note to a Notefile, creating the Notefile if it doesn''t yet exist.' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1431,8 +1431,8 @@ paths: - device x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notes - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}/{noteID}: + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}/{noteID}': delete: operationId: DeleteNote description: Delete a note from a .db or .qi notefile @@ -1452,7 +1452,7 @@ paths: - device x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:notes + resource: 'blues:resources:app:APPSERIAL:notes' get: operationId: GetDbNote description: Get a note from a .db or .qi notefile @@ -1498,7 +1498,7 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:notes + resource: 'blues:resources:app:APPSERIAL:notes' post: operationId: AddDbNote description: Add a Note to a .db notefile. if noteID is '-' then payload is ignored and empty notefile is created @@ -1525,7 +1525,7 @@ paths: - device x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:notes + resource: 'blues:resources:app:APPSERIAL:notes' put: operationId: UpdateDbNote description: Update a note in a .db or .qi notefile @@ -1552,11 +1552,11 @@ paths: - device x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:notes - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/plans: + resource: 'blues:resources:app:APPSERIAL:notes' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/plans': get: operationId: GetDevicePlans - description: Get Data Plans associated with the device, this include the primary sim, any external sim, as well as any satellite connections. + description: 'Get Data Plans associated with the device, this include the primary sim, any external sim, as well as any satellite connections.' responses: '200': $ref: '#/components/responses/DevicePlansResponse' @@ -1568,11 +1568,11 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices + resource: 'blues:resources:app:APPSERIAL:devices' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/provision: + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/provision': post: operationId: ProvisionDevice description: Provision Device for a Project @@ -1617,8 +1617,8 @@ paths: - device x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/public-key: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/public-key': get: operationId: GetDevicePublicKey description: Get Device Public Key @@ -1648,8 +1648,8 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/sessions: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/sessions': get: operationId: GetDeviceSessions description: Get Device Sessions @@ -1672,8 +1672,8 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/{deviceUID}/signal: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/signal': post: operationId: SignalDevice description: Send a signal from Notehub to a Notecard. @@ -1706,8 +1706,8 @@ paths: - device x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/devices/public-keys: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/devices/public-keys': get: operationId: GetDevicePublicKeys description: Get Device Public Keys of a Project @@ -1745,8 +1745,8 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/dfu/{firmwareType}/{action}: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/{action}': post: operationId: PerformDfuAction description: Update/cancel host or notecard firmware updates @@ -1781,8 +1781,8 @@ paths: - project x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/dfu/{firmwareType}/history: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/history': get: operationId: GetDevicesDfuHistory description: Get host or Notecard DFU history for all devices that match the filter criteria @@ -1817,8 +1817,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/dfu/{firmwareType}/status: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/status': get: operationId: GetDevicesDfuStatus description: Get host or Notecard DFU history for all devices that match the filter criteria @@ -1853,8 +1853,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/environment_hierarchy: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/environment_hierarchy': get: operationId: GetProjectEnvironmentHierarchy summary: Get environment variable hierarchy for a device @@ -1877,8 +1877,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/environment_variables: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/environment_variables': get: operationId: GetProjectEnvironmentVariables description: Get environment variables of a project @@ -1893,7 +1893,7 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' put: @@ -1915,8 +1915,8 @@ paths: - project x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/environment_variables/{key}: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/environment_variables/{key}': delete: operationId: DeleteProjectEnvironmentVariable description: Delete an environment variable of a project by key @@ -1939,8 +1939,8 @@ paths: - project x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/events: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/events': get: operationId: GetEvents description: Get Events of a Project @@ -1989,8 +1989,8 @@ paths: - event x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:events - /v1/projects/{projectOrProductUID}/events-cursor: + resource: 'blues:resources:app:APPSERIAL:events' + '/v1/projects/{projectOrProductUID}/events-cursor': get: operationId: GetEventsByCursor description: Get Events of a Project by cursor @@ -2014,8 +2014,8 @@ paths: - event x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:events - /v1/projects/{projectOrProductUID}/events/{eventUID}/route-logs: + resource: 'blues:resources:app:APPSERIAL:events' + '/v1/projects/{projectOrProductUID}/events/{eventUID}/route-logs': get: operationId: GetRouteLogsByEvent description: Get Route Logs by Event UID @@ -2039,8 +2039,8 @@ paths: - event x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:events - /v1/projects/{projectOrProductUID}/firmware: + resource: 'blues:resources:app:APPSERIAL:events' + '/v1/projects/{projectOrProductUID}/firmware': get: operationId: GetFirmwareInfo description: Get Available Firmware Information @@ -2072,8 +2072,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/firmware/{firmwareType}/{filename}: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/firmware/{firmwareType}/{filename}': delete: operationId: DeleteFirmware description: | @@ -2103,7 +2103,7 @@ paths: - project x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' get: operationId: DownloadFirmware description: Download firmware binary @@ -2131,7 +2131,7 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' post: operationId: UpdateFirmware description: | @@ -2172,7 +2172,7 @@ paths: - project x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' put: operationId: UploadFirmware description: Upload firmware binary @@ -2186,7 +2186,7 @@ paths: type: string - name: version in: query - description: Firmware version (optional). If not provided, the version will be extracted from firmware binary if available, otherwise left empty + description: 'Firmware version (optional). If not provided, the version will be extracted from firmware binary if available, otherwise left empty' required: false schema: type: string @@ -2219,8 +2219,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/fleets: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/fleets': get: operationId: GetFleets description: Get Project Fleets @@ -2235,7 +2235,7 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:fleets + resource: 'blues:resources:app:APPSERIAL:fleets' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' post: @@ -2252,7 +2252,7 @@ paths: connectivity_assurance: $ref: '#/components/schemas/FleetConnectivityAssurance' label: - description: The label, or name, for the Fleet. + description: 'The label, or name, for the Fleet.' type: string smart_rule: $ref: '#/components/schemas/FleetRule' @@ -2273,8 +2273,8 @@ paths: - project x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:fleets - /v1/projects/{projectOrProductUID}/fleets/{fleetUID}: + resource: 'blues:resources:app:APPSERIAL:fleets' + '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}': delete: operationId: DeleteFleet description: Delete Fleet @@ -2289,7 +2289,7 @@ paths: - project x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:fleets + resource: 'blues:resources:app:APPSERIAL:fleets' get: operationId: GetFleet description: Get Fleet @@ -2306,7 +2306,7 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:fleets + resource: 'blues:resources:app:APPSERIAL:fleets' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/fleetUIDParam' @@ -2359,8 +2359,8 @@ paths: - project x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:fleets - /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/devices: + resource: 'blues:resources:app:APPSERIAL:fleets' + '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/devices': get: operationId: GetFleetDevices description: Get Devices of a Fleet within a Project @@ -2388,8 +2388,8 @@ paths: - device x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_hierarchy: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_hierarchy': get: operationId: GetFleetEnvironmentHierarchy summary: Get environment variable hierarchy for a device @@ -2413,8 +2413,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:fleets - /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables: + resource: 'blues:resources:app:APPSERIAL:fleets' + '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables': get: operationId: GetFleetEnvironmentVariables description: Get environment variables of a fleet @@ -2429,7 +2429,7 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:fleets + resource: 'blues:resources:app:APPSERIAL:fleets' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/fleetUIDParam' @@ -2454,8 +2454,8 @@ paths: - project x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:fleets - /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables/{key}: + resource: 'blues:resources:app:APPSERIAL:fleets' + '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables/{key}': delete: operationId: DeleteFleetEnvironmentVariable description: Delete environment variables of a fleet @@ -2479,8 +2479,8 @@ paths: - project x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:fleets - /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events: + resource: 'blues:resources:app:APPSERIAL:fleets' + '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events': get: operationId: GetFleetEvents description: Get Events of a Fleet @@ -2529,8 +2529,8 @@ paths: - event x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:events - /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events-cursor: + resource: 'blues:resources:app:APPSERIAL:events' + '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events-cursor': get: operationId: GetFleetEventsByCursor description: Get Events of a Fleet by cursor @@ -2556,8 +2556,8 @@ paths: - event x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:events - /v1/projects/{projectOrProductUID}/global-transformation: + resource: 'blues:resources:app:APPSERIAL:events' + '/v1/projects/{projectOrProductUID}/global-transformation': post: operationId: SetGlobalEventTransformation description: Set the project-level event JSONata transformation @@ -2581,8 +2581,8 @@ paths: - project x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/global-transformation/disable: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/global-transformation/disable': post: operationId: DisableGlobalEventTransformation description: Disable the project-level event JSONata transformation @@ -2599,8 +2599,8 @@ paths: - project x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/global-transformation/enable: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/global-transformation/enable': post: operationId: EnableGlobalEventTransformation description: Enable the project-level event JSONata transformation @@ -2617,8 +2617,8 @@ paths: - project x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/jobs: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/jobs': get: operationId: GetJobs description: List all batch jobs for a project @@ -2635,7 +2635,7 @@ paths: - jobs x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' post: operationId: CreateJob description: Create a new batch job with an optional name @@ -2668,8 +2668,8 @@ paths: - jobs x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/jobs/{jobUID}: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/jobs/{jobUID}': delete: operationId: DeleteJob description: Delete a batch job @@ -2689,7 +2689,7 @@ paths: - jobs x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' get: operationId: GetJob description: Get a specific batch job definition @@ -2709,8 +2709,8 @@ paths: - jobs x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/jobs/{jobUID}/run: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/run': post: operationId: RunJob description: Execute a batch job @@ -2737,8 +2737,8 @@ paths: - jobs x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/jobs/{jobUID}/runs: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/runs': get: operationId: GetJobRuns description: List all runs for a specific job @@ -2771,8 +2771,8 @@ paths: - jobs x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}': get: operationId: GetJobRun description: Get the result of a job execution @@ -2792,8 +2792,8 @@ paths: - jobs x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}/cancel: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}/cancel': post: operationId: CancelJobRun description: Cancel a running job execution @@ -2813,8 +2813,8 @@ paths: - jobs x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/members: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/members': get: operationId: GetProjectMembers description: Get Project Members @@ -2840,10 +2840,10 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:accounts + resource: 'blues:resources:app:APPSERIAL:accounts' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - /v1/projects/{projectOrProductUID}/monitors: + '/v1/projects/{projectOrProductUID}/monitors': get: operationId: GetMonitors description: Get list of defined Monitors @@ -2860,7 +2860,7 @@ paths: - monitor x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices + resource: 'blues:resources:app:APPSERIAL:devices' post: operationId: CreateMonitor description: Create a new Monitor @@ -2888,8 +2888,8 @@ paths: - monitor x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/monitors/{monitorUID}: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/monitors/{monitorUID}': delete: operationId: DeleteMonitor description: Delete Monitor @@ -2911,7 +2911,7 @@ paths: - monitor x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:devices + resource: 'blues:resources:app:APPSERIAL:devices' get: operationId: GetMonitor description: Get Monitor @@ -2933,7 +2933,7 @@ paths: - monitor x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:devices + resource: 'blues:resources:app:APPSERIAL:devices' put: operationId: UpdateMonitor description: Update Monitor @@ -2962,8 +2962,8 @@ paths: - monitor x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:devices - /v1/projects/{projectOrProductUID}/products: + resource: 'blues:resources:app:APPSERIAL:devices' + '/v1/projects/{projectOrProductUID}/products': get: operationId: GetProducts description: Get Products within a Project @@ -2987,7 +2987,7 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:products + resource: 'blues:resources:app:APPSERIAL:products' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' post: @@ -3006,7 +3006,7 @@ paths: items: type: string disable_devices_by_default: - description: If `true`, devices provisioned to this product will be automatically disabled by default. + description: 'If `true`, devices provisioned to this product will be automatically disabled by default.' type: boolean label: description: The label for the Product. @@ -3032,8 +3032,8 @@ paths: - project x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/products/{productUID}: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/products/{productUID}': delete: operationId: DeleteProduct description: Delete a product @@ -3048,11 +3048,11 @@ paths: - project x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/productUIDParam' - /v1/projects/{projectOrProductUID}/routes: + '/v1/projects/{projectOrProductUID}/routes': get: operationId: GetRoutes description: Get all Routes within a Project @@ -3066,34 +3066,34 @@ paths: example: - disabled: false label: success route - modified: 2020-03-09T17:58:37Z + modified: '2020-03-09T17:58:37Z' type: http - uid: route:8d65a087d5d290ce5bdf03aeff2becc0 + uid: 'route:8d65a087d5d290ce5bdf03aeff2becc0' - disabled: false label: failing route - modified: 2020-03-09T17:59:15Z + modified: '2020-03-09T17:59:15Z' type: http - uid: route:a9eaad31d5cee8d01a42762f71fb777a + uid: 'route:a9eaad31d5cee8d01a42762f71fb777a' - disabled: true label: disabled route - modified: 2020-03-09T17:59:44Z + modified: '2020-03-09T17:59:44Z' type: http - uid: route:02ddc0e6e236c2a7e482da62047229ad + uid: 'route:02ddc0e6e236c2a7e482da62047229ad' - disabled: false label: Proxy Route - modified: 2020-03-09T17:58:36Z + modified: '2020-03-09T17:58:36Z' type: proxy - uid: route:0ac565deb7b478a250bb82348b9cfdd4 + uid: 'route:0ac565deb7b478a250bb82348b9cfdd4' - disabled: false label: Myjsonlive Webtest - modified: 2020-03-09T17:58:35Z + modified: '2020-03-09T17:58:35Z' type: proxy - uid: route:fb1b9e0aba1bf030311ba2c3c1e3efd7 + uid: 'route:fb1b9e0aba1bf030311ba2c3c1e3efd7' - disabled: false label: Myjsonlive Echo - modified: 2020-03-09T17:58:34Z + modified: '2020-03-09T17:58:34Z' type: proxy - uid: route:7804818f84a3be6193e14d804fe7fca7 + uid: 'route:7804818f84a3be6193e14d804fe7fca7' schema: type: array items: @@ -3107,7 +3107,7 @@ paths: - route x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:routes + resource: 'blues:resources:app:APPSERIAL:routes' post: operationId: CreateRoute description: Create Route within a Project @@ -3126,13 +3126,13 @@ paths: disable_http_headers: false filter: {} fleets: - - fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d + - 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' http_headers: X-My-Header: value throttle_ms: 100 timeout: 5000 transform: {} - url: https://example.com/ingest + url: 'https://example.com/ingest' label: Route Label schema: $ref: '#/components/schemas/NotehubRoute' @@ -3149,16 +3149,16 @@ paths: system_notefiles: false type: '' fleets: - - fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d + - 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' http_headers: null throttle_ms: 100 timeout: 0 transform: {} - url: http://route.url + url: 'http://route.url' label: Route Label - modified: 2020-03-09T17:59:44Z + modified: '2020-03-09T17:59:44Z' type: http - uid: route:8d65a087d5d290ce5bdf03aeff2becc0 + uid: 'route:8d65a087d5d290ce5bdf03aeff2becc0' schema: $ref: '#/components/schemas/NotehubRoute' default: @@ -3169,8 +3169,8 @@ paths: - route x-custom-attributes: permission: create - resource: blues:resources:app:APPSERIAL:routes - /v1/projects/{projectOrProductUID}/routes/{routeUID}: + resource: 'blues:resources:app:APPSERIAL:routes' + '/v1/projects/{projectOrProductUID}/routes/{routeUID}': delete: operationId: DeleteRoute description: Delete single route within a project @@ -3188,7 +3188,7 @@ paths: - route x-custom-attributes: permission: delete - resource: blues:resources:app:APPSERIAL:routes + resource: 'blues:resources:app:APPSERIAL:routes' get: operationId: GetRoute description: Get single route within a project @@ -3208,16 +3208,16 @@ paths: system_notefiles: false type: '' fleets: - - fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d + - 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' http_headers: null throttle_ms: 100 timeout: 0 transform: {} - url: http://route.url + url: 'http://route.url' label: Route Label - modified: 2020-03-09T17:59:44Z + modified: '2020-03-09T17:59:44Z' type: http - uid: route:8d65a087d5d290ce5bdf03aeff2becc0 + uid: 'route:8d65a087d5d290ce5bdf03aeff2becc0' schema: $ref: '#/components/schemas/NotehubRoute' default: @@ -3228,7 +3228,7 @@ paths: - route x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:routes + resource: 'blues:resources:app:APPSERIAL:routes' put: operationId: UpdateRoute description: Update route by UID @@ -3291,8 +3291,8 @@ paths: - route x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:routes - /v1/projects/{projectOrProductUID}/routes/{routeUID}/route-logs: + resource: 'blues:resources:app:APPSERIAL:routes' + '/v1/projects/{projectOrProductUID}/routes/{routeUID}/route-logs': get: operationId: GetRouteLogsByRoute description: Get Route Logs by Route UID @@ -3328,8 +3328,8 @@ paths: - route x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:routes - /v1/projects/{projectOrProductUID}/schemas: + resource: 'blues:resources:app:APPSERIAL:routes' + '/v1/projects/{projectOrProductUID}/schemas': get: operationId: GetNotefileSchemas summary: Get variable format for a notefile @@ -3350,8 +3350,8 @@ paths: - project x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/usage/data: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/usage/data': get: operationId: GetDataUsage description: Get data usage in bytes for a project with time range and period aggregation @@ -3394,11 +3394,11 @@ paths: - usage x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:events - /v1/projects/{projectOrProductUID}/usage/events: + resource: 'blues:resources:app:APPSERIAL:events' + '/v1/projects/{projectOrProductUID}/usage/events': get: operationId: GetEventsUsage - description: Get events usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied + description: 'Get events usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/startDateParam' @@ -3439,7 +3439,7 @@ paths: style: form - name: skipRecentData in: query - description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. + description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' required: false schema: type: boolean @@ -3466,11 +3466,11 @@ paths: - usage x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:events - /v1/projects/{projectOrProductUID}/usage/route-logs: + resource: 'blues:resources:app:APPSERIAL:events' + '/v1/projects/{projectOrProductUID}/usage/route-logs': get: operationId: GetRouteLogsUsage - description: Get route logs usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied + description: 'Get route logs usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/startDateParam' @@ -3499,7 +3499,7 @@ paths: - project - name: skipRecentData in: query - description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. + description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' required: false schema: type: boolean @@ -3515,11 +3515,11 @@ paths: - usage x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:events - /v1/projects/{projectOrProductUID}/usage/sessions: + resource: 'blues:resources:app:APPSERIAL:events' + '/v1/projects/{projectOrProductUID}/usage/sessions': get: operationId: GetSessionsUsage - description: Get sessions usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied + description: 'Get sessions usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied' parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/startDateParam' @@ -3550,7 +3550,7 @@ paths: - project - name: skipRecentData in: query - description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. + description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' required: false schema: type: boolean @@ -3566,8 +3566,8 @@ paths: - usage x-custom-attributes: permission: read - resource: blues:resources:app:APPSERIAL:events - /v1/projects/{projectOrProductUID}/webhooks: + resource: 'blues:resources:app:APPSERIAL:events' + '/v1/projects/{projectOrProductUID}/webhooks': get: operationId: GetWebhooks description: Retrieves all webhooks for the specified project @@ -3593,8 +3593,8 @@ paths: - webhook x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings - /v1/projects/{projectOrProductUID}/webhooks/{webhookUID}: + resource: 'blues:resources:app:APPSERIAL:settings' + '/v1/projects/{projectOrProductUID}/webhooks/{webhookUID}': delete: operationId: DeleteWebhook description: Deletes the specified webhook @@ -3612,7 +3612,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' get: operationId: GetWebhook description: Retrieves the configuration settings for the specified webhook @@ -3634,7 +3634,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' post: operationId: CreateWebhook description: Creates a webhook for the specified product with the given name. The name | must be unique within the project. @@ -3663,7 +3663,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' put: operationId: UpdateWebhook description: Updates the configuration settings for the specified webhook. | Webhook will be created if it does not exist. Update body will completely replace the existing settings. @@ -3690,7 +3690,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: blues:resources:app:APPSERIAL:settings + resource: 'blues:resources:app:APPSERIAL:settings' components: parameters: billingAccountUIDParam: @@ -3709,7 +3709,7 @@ components: schema: type: string datasetAggregateWindowQueryParam: - description: Aggregate results into buckets for a time duration, expressed in Postgres INTERVAL format + description: 'Aggregate results into buckets for a time duration, expressed in Postgres INTERVAL format' in: query name: aggregate_window required: false @@ -3723,7 +3723,7 @@ components: schema: type: boolean datasetEndQueryParam: - description: End of the time range, as an ISO-8601 date or relative to now. If omitted, current time is used. + description: 'End of the time range, as an ISO-8601 date or relative to now. If omitted, current time is used.' in: query name: end required: false @@ -3737,15 +3737,15 @@ components: schema: type: integer datasetLocationNearQueryParam: - description: Latitude and Longitude for location-based filtering, location_near_radius must also be provided + description: 'Latitude and Longitude for location-based filtering, location_near_radius must also be provided' in: query name: location_near required: false schema: type: string - example: 42.393125,-71.185015 + example: '42.393125,-71.185015' datasetLocationRadiusQueryParam: - description: Distance from location_near in meters, location_near must also be provided + description: 'Distance from location_near in meters, location_near must also be provided' in: query name: location_near_radius required: false @@ -3766,28 +3766,28 @@ components: schema: type: string datasetSelectQueryParam: - description: Comma separated list of fields to include. Supports aggregate functions (avg, sum, min, max, count, most_recent). + description: 'Comma separated list of fields to include. Supports aggregate functions (avg, sum, min, max, count, most_recent).' in: query name: select required: false schema: type: string datasetStartQueryParam: - description: Start of the time range, as an ISO-8601 date or relative to now (e.g. -1y). Relative dates follow the Postgres INTERVAL format. + description: 'Start of the time range, as an ISO-8601 date or relative to now (e.g. -1y). Relative dates follow the Postgres INTERVAL format.' in: query name: start required: true schema: type: string datasetWhereQueryParam: - description: Additional filters using boolean logic mini-language (e.g. and.(device.eq.dev:123,temp.gt.100)) + description: 'Additional filters using boolean logic mini-language (e.g. and.(device.eq.dev:123,temp.gt.100))' in: query name: where required: false schema: type: string dateTypeParam: - description: Which date to filter on, either 'captured' or 'uploaded'. This will apply to the startDate and endDate parameters + description: 'Which date to filter on, either ''captured'' or ''uploaded''. This will apply to the startDate and endDate parameters' example: uploaded in: query name: dateType @@ -3807,7 +3807,7 @@ components: items: type: string deviceUIDParam: - example: dev:000000000000000 + example: 'dev:000000000000000' in: path name: deviceUID required: true @@ -3843,7 +3843,7 @@ components: - update - cancel endDateParam: - description: End date for filtering results, specified as a Unix timestamp + description: 'End date for filtering results, specified as a Unix timestamp' example: 1657894210 in: query name: endDate @@ -3877,7 +3877,7 @@ components: schema: type: string filesQueryParam: - example: _health.qo, data.qo + example: '_health.qo, data.qo' in: query name: files required: false @@ -3897,7 +3897,7 @@ components: - version - length firmwareSortOrderParam: - description: Sort order (asc for ascending, desc for descending) + description: 'Sort order (asc for ascending, desc for descending)' in: query name: sortOrder required: false @@ -3923,7 +3923,7 @@ components: schema: type: string firstSyncParam: - description: When true, filters results to only show first sync sessions + description: 'When true, filters results to only show first sync sessions' in: query name: firstSync required: false @@ -4025,7 +4025,7 @@ components: schema: type: string monitorUIDParam: - example: monitor:8bAdf00d-000f-51c-af-01d5eaf00dbad + example: 'monitor:8bAdf00d-000f-51c-af-01d5eaf00dbad' in: path name: monitorUID required: true @@ -4092,7 +4092,7 @@ components: schema: type: string productUIDParam: - example: com.blues.bridge:sensors + example: 'com.blues.bridge:sensors' in: path name: productUID required: true @@ -4109,7 +4109,7 @@ components: type: string style: form projectOrProductUIDParam: - example: app:2606f411-dea6-44a0-9743-1130f57d77d8 + example: 'app:2606f411-dea6-44a0-9743-1130f57d77d8' in: path name: projectOrProductUID required: true @@ -4136,7 +4136,7 @@ components: required: true schema: type: string - example: rid:2606f411-dea6-44a0-9743-1130f57d77d8 + example: 'rid:2606f411-dea6-44a0-9743-1130f57d77d8' responseStatusParam: example: 500 in: query @@ -4167,7 +4167,7 @@ components: - asc - desc routeUIDParam: - example: route:cbd20093cba58392c9f9bbdd0cdeb1a0 + example: 'route:cbd20093cba58392c9f9bbdd0cdeb1a0' in: path name: routeUID required: true @@ -4197,7 +4197,7 @@ components: - failure type: string selectFieldsParam: - description: Comma-separated list of fields to select from JSON payload (e.g., "field1,field2.subfield,field3"), this will reflect the columns in the CSV output. + description: 'Comma-separated list of fields to select from JSON payload (e.g., "field1,field2.subfield,field3"), this will reflect the columns in the CSV output.' in: query name: selectFields required: false @@ -4275,7 +4275,7 @@ components: - asc - desc startDateParam: - description: Start date for filtering results, specified as a Unix timestamp + description: 'Start date for filtering results, specified as a Unix timestamp' example: 1628631763 in: query name: startDate @@ -4434,7 +4434,7 @@ components: type: number type: object resolved: - description: If true, the alert has been resolved + description: 'If true, the alert has been resolved' type: boolean source: description: The UID of the source of the alert @@ -4593,9 +4593,9 @@ components: type: integer format: int64 plan_type: - description: Description of the SIM plan type including data allowance, region, and validity period + description: 'Description of the SIM plan type including data allowance, region, and validity period' type: string - example: 500MB, North America, 10-year lifetime + example: '500MB, North America, 10-year lifetime' CellularUsage: type: array items: @@ -4707,7 +4707,7 @@ components: description: Last updated timestamp type: number version: - description: Last known version, which is generally a JSON object contained within the firmware image + description: 'Last known version, which is generally a JSON object contained within the firmware image' type: string nullable: true DataField: @@ -4996,7 +4996,7 @@ components: bssid: type: string cell: - description: Cell ID where the session originated and quality ("mcc,mnc,lac,cellid") + description: 'Cell ID where the session originated and quality ("mcc,mnc,lac,cellid")' type: string continuous: description: Was this a continuous connection? @@ -5293,7 +5293,7 @@ components: description: Country type: string best_id: - description: The device serial number, or the DeviceUID if the serial number is not set + description: 'The device serial number, or the DeviceUID if the serial number is not set' type: string best_lat: description: Latitude @@ -5303,7 +5303,7 @@ components: description: Location type: string best_location_type: - description: One of "gps", "triangulated", or "tower" + description: 'One of "gps", "triangulated", or "tower"' type: string best_location_when: description: Unix timestamp @@ -5416,7 +5416,7 @@ components: description: Unix timestamp type: number transport: - description: The transport used for this event, e.g., "cellular", "wifi", ", etc. + description: 'The transport used for this event, e.g., "cellular", "wifi", ", etc.' type: string tri_country: description: Country @@ -5608,7 +5608,7 @@ components: enabled: true nullable: true FleetRule: - description: JSONata expression that will be evaluated to determine device membership into this fleet, if the expression evaluates to a 1, the device will be included, if it evaluates to -1 it will be removed, and if it evaluates to 0 or errors it will be left unchanged. + description: 'JSONata expression that will be evaluated to determine device membership into this fleet, if the expression evaluates to a 1, the device will be included, if it evaluates to -1 it will be removed, and if it evaluates to 0 or errors it will be left unchanged.' type: string properties: {} FleetsUIDList: @@ -5645,7 +5645,7 @@ components: filter: $ref: '#/components/schemas/Filter' fleets: - description: If non-empty, applies only to the listed fleets. + description: 'If non-empty, applies only to the listed fleets.' type: array items: type: string @@ -5722,7 +5722,7 @@ components: type: integer format: int64 status: - description: Current status (submitted, running, completed, cancelled, failed) + description: 'Current status (submitted, running, completed, cancelled, failed)' type: string submitted: description: Unix timestamp when submitted @@ -5773,7 +5773,7 @@ components: type: object properties: aggregate_function: - description: Aggregate function to apply to the selected values before applying the condition. [none, sum, average, max, min] + description: 'Aggregate function to apply to the selected values before applying the condition. [none, sum, average, max, min]' type: string enum: - none @@ -5785,9 +5785,9 @@ components: description: The time window to aggregate the selected values. It follows the format of a number followed by a time unit type: string example: 10m or 5h30m40s - pattern: ^[0-9]+[smh]$ + pattern: '^[0-9]+[smh]$' alert: - description: If true, the monitor is in alert state. + description: 'If true, the monitor is in alert state.' type: boolean alert_routes: type: array @@ -5797,7 +5797,7 @@ components: - $ref: '#/components/schemas/SlackBearerNotification' - $ref: '#/components/schemas/EmailNotification' condition_type: - description: A comparison operation to apply to the value selected by the source_selector [greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to, equal_to, not_equal_to] + description: 'A comparison operation to apply to the value selected by the source_selector [greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to, equal_to, not_equal_to]' type: string enum: - greater_than @@ -5810,7 +5810,7 @@ components: description: type: string disabled: - description: If true, the monitor will not be evaluated. + description: 'If true, the monitor will not be evaluated.' type: boolean fleet_filter: type: array @@ -5826,18 +5826,18 @@ components: items: type: string per_device: - description: Only relevant when using an aggregate_function. If true, the monitor will be evaluated per device, | rather than across the set of selected devices. If true then if a single device matches the specified criteria, | and alert will be created, otherwise the aggregate function will be applied across all devices. + description: 'Only relevant when using an aggregate_function. If true, the monitor will be evaluated per device, | rather than across the set of selected devices. If true then if a single device matches the specified criteria, | and alert will be created, otherwise the aggregate function will be applied across all devices.' type: boolean routing_cooldown_period: description: The time period to wait before routing another event after the monitor | has been triggered. It follows the format of a number followed by a time unit. type: string example: 10m or 5h30m40s - pattern: ^[0-9]+[smh]$ + pattern: '^[0-9]+[smh]$' silenced: - description: If true, alerts will be created, but no notifications will be sent. + description: 'If true, alerts will be created, but no notifications will be sent.' type: boolean source_selector: - description: A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value. + description: 'A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value.' type: string example: body.temperature source_type: @@ -5907,7 +5907,7 @@ components: description: True if originated from an edge source. type: boolean id: - description: Note name/identifier (e.g., "1:435", "my_note"). + description: 'Note name/identifier (e.g., "1:435", "my_note").' type: string payload: description: Optional base64-encoded payload. @@ -5942,7 +5942,7 @@ components: type: object properties: id: - description: Notefile id (e.g., "test.qi", "config.db"). + description: 'Notefile id (e.g., "test.qi", "config.db").' type: string notes: type: array @@ -5955,7 +5955,7 @@ components: - id - notes NotefileList: - description: Array of notefiles, each containing its notes. + description: 'Array of notefiles, each containing its notes.' type: array items: $ref: '#/components/schemas/Notefile' @@ -6042,7 +6042,7 @@ components: default: http uid: type: string - default: route:8d65a087d5d290ce5bdf03aeff2becc0 + default: 'route:8d65a087d5d290ce5bdf03aeff2becc0' OAuth2Error: type: object properties: @@ -6109,7 +6109,7 @@ components: format: date-time nullable: true last_used: - description: When it was last used, if ever + description: 'When it was last used, if ever' type: string format: date-time nullable: true @@ -6117,7 +6117,7 @@ components: description: Name for this API Key type: string suspended: - description: if true, this token cannot be used + description: 'if true, this token cannot be used' type: boolean uid: description: Unique and public identifier @@ -6135,7 +6135,7 @@ components: name: type: string suspended: - description: if true, the token is temporarily suspended + description: 'if true, the token is temporarily suspended' type: boolean required: - expiresAt @@ -6352,7 +6352,7 @@ components: type: object properties: attn: - description: If true, an error was returned when routing + description: 'If true, an error was returned when routing' type: boolean date: description: The date of the logs. @@ -6382,7 +6382,7 @@ components: type: object properties: format: - description: Output format for transformed data (e.g., "json", "xml", "text"). + description: 'Output format for transformed data (e.g., "json", "xml", "text").' type: string example: json jsonata: @@ -6487,7 +6487,7 @@ components: psid: description: Provider-specific identifier for the satellite subscription type: string - example: skylo:5746354465786 + example: 'skylo:5746354465786' satellite_data_usage: $ref: '#/components/schemas/SatelliteDataUsage' nullable: true @@ -6561,7 +6561,7 @@ components: - text - blocks text: - description: The text of the message, or the blocks definition + description: 'The text of the message, or the blocks definition' type: string token: description: The bearer token for the Slack app. @@ -6603,7 +6603,7 @@ components: - text - blocks text: - description: The text of the message, or the blocks definition + description: 'The text of the message, or the blocks definition' type: string url: description: The URL of the Slack webhook. @@ -6712,7 +6712,7 @@ components: mnc: description: Mobile Network Code type: integer - n: + 'n': description: Name of the location type: string source: @@ -6825,7 +6825,7 @@ components: period: type: string format: date-time - example: 2025-07-23T00:00:00Z + example: '2025-07-23T00:00:00Z' total_bytes: type: integer format: int64 @@ -6849,16 +6849,16 @@ components: type: object properties: billable_events: - description: Events that are billable, this include all events except platform events + description: 'Events that are billable, this include all events except platform events' type: integer format: int64 example: 10 device: type: string - example: dev:123456789012345 + example: 'dev:123456789012345' fleet: type: string - example: fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d + example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' notefiles: description: Count of events per notefile. Only present when includeNotefiles=true is specified. type: object @@ -6872,14 +6872,14 @@ components: period: type: string format: date-time - example: 2025-07-23T00:00:00Z + example: '2025-07-23T00:00:00Z' platform_events: - description: Total platform events. Platform events are _log, _session, _health, and _geolocate events some of which are send from the device, some generated by notehub. These events are not billed. + description: 'Total platform events. Platform events are _log, _session, _health, and _geolocate events some of which are send from the device, some generated by notehub. These events are not billed.' type: integer format: int64 example: 15 total_days_in_period: - description: The total number of days in this period. Useful for calculating daily averages for month period. Note that the current period will be the total number of days in the current period, including days in the future. + description: 'The total number of days in this period. Useful for calculating daily averages for month period. Note that the current period will be the total number of days in the current period, including days in the future.' type: integer format: int32 total_devices: @@ -6887,7 +6887,7 @@ components: type: integer format: int64 total_events: - description: Total events the device sent to notehub, including associated notehub generated events + description: 'Total events the device sent to notehub, including associated notehub generated events' type: integer format: int64 example: 42 @@ -6904,7 +6904,7 @@ components: example: 2 nullable: true watchdog_events: - description: Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time. + description: 'Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time.' type: integer format: int64 example: 10 @@ -6941,11 +6941,11 @@ components: period: type: string format: date-time - example: 2025-07-23T00:00:00Z + example: '2025-07-23T00:00:00Z' route: description: The route UID (only present when aggregate is 'route') type: string - example: route:cbd20093cba58392c9f9bbdd0cdeb1a0 + example: 'route:cbd20093cba58392c9f9bbdd0cdeb1a0' successful_routes: type: integer format: int64 @@ -6964,7 +6964,7 @@ components: properties: device: type: string - example: dev:123456789012345 + example: 'dev:123456789012345' first_sync_sessions: description: Number of first sync sessions in this period type: integer @@ -6972,17 +6972,17 @@ components: example: 2 fleet: type: string - example: fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d + example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' period: type: string format: date-time - example: 2025-07-23T00:00:00Z + example: '2025-07-23T00:00:00Z' sessions: type: integer format: int64 example: 12 sessions_by_transport: - description: Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan) + description: 'Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan)' type: object example: cell: 8 @@ -7012,7 +7012,7 @@ components: - total_bytes - total_devices UsageTruncatedField: - description: If the data is truncated that means that the parameters selected resulted in a response of over | the requested limit of data points, in order to ensure + description: 'If the data is truncated that means that the parameters selected resulted in a response of over | the requested limit of data points, in order to ensure' type: boolean properties: {} UserDfuStateMachine: @@ -7184,7 +7184,7 @@ components: - has_more example: events: - - app: app:218f6217-9f78-432e-9fe0-02ca8b5a216c + - app: 'app:218f6217-9f78-432e-9fe0-02ca8b5a216c' best_country: US best_id: My Device best_lat: 34.82476372 @@ -7198,15 +7198,15 @@ components: pressure: 97705.66 temperature: 24.0625 voltage: 2.598 - device: dev:5c0272311928 + device: 'dev:5c0272311928' event: dfa3747d-688b-4250-935b-5dd60354313c file: air.qo - product: product:com.blues.project.demo + product: 'product:com.blues.project.demo' received: 1656011227.006928 req: note.add session: b623132c-6afb-4740-bc39-e3634e38f064 sn: My Device - tower_id: 0,0,0,0 + tower_id: '0,0,0,0' tri_country: US tri_lat: 34.82475372 tri_location: Atlanta GA @@ -7245,7 +7245,7 @@ components: - has_more example: events: - - app: app:218f6217-9f78-432e-9fe0-02ca8b5a216c + - app: 'app:218f6217-9f78-432e-9fe0-02ca8b5a216c' best_country: US best_id: My Device best_lat: 34.82476372 @@ -7259,15 +7259,15 @@ components: pressure: 97705.66 temperature: 24.0625 voltage: 2.598 - device: dev:5c0272311928 + device: 'dev:5c0272311928' event: dfa3747d-688b-4250-935b-5dd60354313c file: air.qo - product: product:com.blues.project.demo + product: 'product:com.blues.project.demo' received: 1656011227.006928 req: note.add session: b623132c-6afb-4740-bc39-e3634e38f064 sn: My Device - tower_id: 0,0,0,0 + tower_id: '0,0,0,0' tri_country: US tri_lat: 34.82475372 tri_location: Atlanta GA @@ -7314,7 +7314,7 @@ components: additionalProperties: type: string environment_variables_effective: - description: The environment variables as they will be seen by the device, fully resolved with project/fleet/device prioritization rules. + description: 'The environment variables as they will be seen by the device, fully resolved with project/fleet/device prioritization rules.' type: object additionalProperties: type: string @@ -7382,59 +7382,59 @@ components: $ref: '#/components/schemas/Event' example: latest_events: - - app: app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446 + - app: 'app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446' body: why: sensors.qo requested sync (sensors.qo) (TLS) - device: dev:864475040523995 + device: 'dev:864475040523995' event: 81bd2bf1-0399-4978-bc46-8f779b4af350 file: _session.qo - product: product:com.blues.app:myapp + product: 'product:com.blues.app:myapp' received: 1669667707.564694 req: session.begin session: ed18884b-f2a6-419f-b856-d28dc8f0892b tls: true tower_country: US - tower_id: 310,410,20483,184692495 + tower_id: '310,410,20483,184692495' tower_lat: 43.769062500000004 tower_location: Waverly MI tower_lon: -83.657359375 tower_timezone: America/Detroit tower_when: 1669667691 when: 1669667707 - - app: app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446 + - app: 'app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446' body: humid: 56.23 temp: 35.5 - device: dev:864475040523995 + device: 'dev:864475040523995' event: 916d4c81-06ae-4263-9b55-7a3a0f73cb5a file: data.qo - product: product:com.blues.app:myapp + product: 'product:com.blues.app:myapp' received: 1669667713.221659 req: note.add session: 28cdc39f-9f62-4789-b0a3-2f35f9448ced sn: tj-1 tower_country: US - tower_id: 310,410,20483,184692495 + tower_id: '310,410,20483,184692495' tower_lat: 43.769062500000004 tower_location: Waverly MI tower_lon: -83.657359375 tower_timezone: America/Detroit tower_when: 1669667677 when: 1669667689 - - app: app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446 + - app: 'app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446' body: humidity: 69.88647200683693 pressure: 993.6294496104914 temp: 21.273027181770885 - device: dev:864475040523995 + device: 'dev:864475040523995' event: e98c2c3b-edbe-4fe7-af57-2196cc843eb7 file: sensors.qo - product: product:com.blues.app:myapp + product: 'product:com.blues.app:myapp' received: 1669667711.85316 req: note.add session: 7211392c-6895-43f8-9256-790655348be5 tower_country: US - tower_id: 310,410,20483,184692496 + tower_id: '310,410,20483,184692496' tower_lat: 43.747037500000005 tower_location: Waverly MI tower_lon: -83.665859375 @@ -7499,12 +7499,12 @@ components: - apn: a-notehub.com.attz bars: 2 bearer: LTE FDD - cell: 310,410,17169,77315594 + cell: '310,410,17169,77315594' continuous: true - device: dev:000000000000000 + device: 'dev:000000000000000' events: 14 fleets: - - fleet:46be9834-5te6-42c1-0000-b5ea05e248d7 + - 'fleet:46be9834-5te6-42c1-0000-b5ea05e248d7' hp_cycles_data: 3 hp_cycles_total: 3 hp_secs_data: 7659 @@ -7520,7 +7520,7 @@ components: notes_sent: 12 sessions_tls: 1 since: 1667250832 - product: product:com.blues.demo:project + product: 'product:com.blues.demo:project' rat: lte rsrp: -91 rsrq: -13 @@ -7539,7 +7539,7 @@ components: lon: -89.44239062499999 mcc: 310 mnc: 410 - n: Shorewood Hills WI + 'n': Shorewood Hills WI time: 1667250835 towers: 1 zone: America/Chicago @@ -7566,14 +7566,14 @@ components: device: description: The device UID this usage data belongs to (only present when aggregate is 'device') type: string - example: dev:123456789012345 + example: 'dev:123456789012345' device_count: description: the number of devices represented by this data point type: integer fleet: description: The fleet UID this usage data belongs to (only present when aggregate is 'fleet') type: string - example: fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d + example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' iccid: description: The ICCID of the cellular SIM card (only present when type is 'cellular') type: string @@ -7581,7 +7581,7 @@ components: psid: description: The PSID (Packet Service ID) of the satellite (or other packet-based device) type: string - example: skylo:5746354465786 + example: 'skylo:5746354465786' type: description: The type of connectivity type: string @@ -7650,10 +7650,10 @@ tags: name: webhook - description: APIs for events and sessions for external devices name: external devices - - description: Project Usage information related to events, route logs, sessions, and data usage + - description: 'Project Usage information related to events, route logs, sessions, and data usage' name: usage - description: Batch job operations name: jobs externalDocs: description: Find out more about Blues - url: https://blues.io + url: 'https://blues.io' From 3b6202dfae610050a560d480aa4e23051daaf299 Mon Sep 17 00:00:00 2001 From: "blues-hub-automation[bot]" Date: Wed, 13 May 2026 20:57:37 +0000 Subject: [PATCH 18/18] feat: Update OpenAPI file replicated from Notehub commit d8f1c51 --- openapi.yaml | 664 +++++++++++++++++++++++++-------------------------- 1 file changed, 332 insertions(+), 332 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 0b9ce19..c5987b7 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3,14 +3,14 @@ info: contact: email: engineering@blues.io name: Blues Engineering - url: 'https://dev.blues.io/support/' + url: https://dev.blues.io/support/ description: | The OpenAPI definition for the Notehub.io API. title: Notehub API version: 1.2.0 servers: - description: Production server - url: 'https://api.notefile.net' + url: https://api.notefile.net paths: /auth/login: post: @@ -147,7 +147,7 @@ paths: - billing_account x-custom-attributes: permission: read - '/v1/billing-accounts/{billingAccountUID}': + /v1/billing-accounts/{billingAccountUID}: get: operationId: GetBillingAccount description: Get Billing Account Information @@ -197,7 +197,7 @@ paths: - billing_account x-custom-attributes: permission: read - '/v1/billing-accounts/{billingAccountUID}/balance-history': + /v1/billing-accounts/{billingAccountUID}/balance-history: get: operationId: GetBillingAccountBalanceHistory description: Get Billing Account Balance history @@ -239,7 +239,7 @@ paths: - billing_account x-custom-attributes: permission: read - '/v1/products/{productUID}/devices/{deviceUID}/environment_variables_with_pin': + /v1/products/{productUID}/devices/{deviceUID}/environment_variables_with_pin: get: operationId: GetDeviceEnvironmentVariablesByPin description: Get environment variables of a device with device pin authorization @@ -279,15 +279,15 @@ paths: - device x-custom-attributes: permission: update - '/v1/products/{productUID}/devices/{deviceUID}/webhook-event': + /v1/products/{productUID}/devices/{deviceUID}/webhook-event: post: operationId: CreateLegacyWebhookEvent - description: 'Legacy endpoint for sending an event from a webhook, associated with the given device (provisioning it if necessary). The request body is a Note-shaped object containing the notefile name, body, and optional payload.' + description: Legacy endpoint for sending an event from a webhook, associated with the given device (provisioning it if necessary). The request body is a Note-shaped object containing the notefile name, body, and optional payload. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/deviceUIDParam' requestBody: - description: 'A Note-shaped event with notefile name, JSON body, and optional base64-encoded payload.' + description: A Note-shaped event with notefile name, JSON body, and optional base64-encoded payload. required: true content: application/json: @@ -321,8 +321,8 @@ paths: - webhook x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/devices/{deviceUID}/webhook-session': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/devices/{deviceUID}/webhook-session: put: operationId: UpdateLegacyWebhookSession description: Legacy endpoint for opening or updating a webhook session for the given device (provisioning the device if necessary). Used by external services that need to maintain a callable session against a device behind a webhook. @@ -348,8 +348,8 @@ paths: - webhook x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/ext-devices/{deviceUID}/event': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/ext-devices/{deviceUID}/event: post: operationId: CreateEventExtDevice description: Creates an event using specified webhook @@ -374,8 +374,8 @@ paths: - external devices x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/ext-devices/{deviceUID}/session/close': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/ext-devices/{deviceUID}/session/close: post: operationId: ExtDeviceSessionClose description: Closes the session for the specified device if open @@ -400,8 +400,8 @@ paths: - external devices x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/ext-devices/{deviceUID}/session/open': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/ext-devices/{deviceUID}/session/open: post: operationId: ExtDeviceSessionOpen description: Create a Session for the specified device. | If a session is currently open it will be closed and a new one opened. @@ -426,8 +426,8 @@ paths: - external devices x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/project': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/project: get: operationId: GetProjectByProduct description: Get a Project by ProductUID @@ -453,11 +453,11 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/products/{productUID}/webhooks/{webhookUID}/devices/{deviceUID}/event': + resource: blues:resources:app:APPSERIAL:settings + /v1/products/{productUID}/webhooks/{webhookUID}/devices/{deviceUID}/event: post: operationId: CreateWebhookDeviceEventByProduct - description: 'Sends an event to be processed by the specified webhook, addressed by productUID, associated with the given device (provisioning it if necessary). The entire request body becomes the event body. The webhook''s configured JSONata transform, if any, is applied before routing.' + description: Sends an event to be processed by the specified webhook, addressed by productUID, associated with the given device (provisioning it if necessary). The entire request body becomes the event body. The webhook's configured JSONata transform, if any, is applied before routing. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -481,11 +481,11 @@ paths: - webhook x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/webhooks/{webhookUID}/event': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/webhooks/{webhookUID}/event: post: operationId: CreateWebhookEventByProduct - description: 'Sends an event to be processed by the specified webhook, addressed by productUID. The entire request body becomes the event body. The webhook''s configured JSONata transform, if any, is applied before routing. The event is not associated with a specific device.' + description: Sends an event to be processed by the specified webhook, addressed by productUID. The entire request body becomes the event body. The webhook's configured JSONata transform, if any, is applied before routing. The event is not associated with a specific device. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -508,11 +508,11 @@ paths: - webhook x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/products/{productUID}/webhooks/{webhookUID}/settings': + resource: blues:resources:app:APPSERIAL:notes + /v1/products/{productUID}/webhooks/{webhookUID}/settings: get: operationId: GetWebhookSettingsByProduct - description: 'Retrieves the configuration settings for the specified webhook, addressed by productUID.' + description: Retrieves the configuration settings for the specified webhook, addressed by productUID. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -531,10 +531,10 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings put: operationId: UpdateWebhookSettingsByProduct - description: 'Updates the configuration settings for the specified webhook, addressed by productUID. Update body will completely replace the existing settings.' + description: Updates the configuration settings for the specified webhook, addressed by productUID. Update body will completely replace the existing settings. parameters: - $ref: '#/components/parameters/productUIDParam' - $ref: '#/components/parameters/webhookUIDParam' @@ -558,7 +558,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings /v1/projects: get: operationId: GetProjects @@ -619,7 +619,7 @@ paths: - project x-custom-attributes: permission: create - '/v1/projects/{projectOrProductUID}': + /v1/projects/{projectOrProductUID}: delete: operationId: DeleteProject description: Delete a Project by ProjectUID @@ -636,7 +636,7 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings get: operationId: GetProject description: Get a Project by ProjectUID @@ -657,8 +657,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/alerts': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/alerts: get: operationId: GetAlerts description: Get list of defined Alerts @@ -678,8 +678,8 @@ paths: - alert x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/aws-role-config': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/aws-role-config: get: operationId: GetAWSRoleConfig summary: Get AWS role configuration for role-based authentication @@ -703,8 +703,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/clone': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/clone: post: operationId: CloneProject description: Clone a Project @@ -719,7 +719,7 @@ paths: type: object properties: billing_account_uid: - description: 'The billing account UID for the project. The caller of the API must be able to create projects within the billing account, otherwise an error will be returned.' + description: The billing account UID for the project. The caller of the API must be able to create projects within the billing account, otherwise an error will be returned. type: string disable_clone_fleets: description: Whether to disallow the cloning of the fleets from the parent project. Default is false if not specified. @@ -748,8 +748,8 @@ paths: - project x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/devices': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/devices: get: operationId: GetDevices description: Get Devices of a Project @@ -777,8 +777,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}: delete: operationId: DeleteDevice description: Delete Device @@ -793,7 +793,7 @@ paths: - device x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices get: operationId: GetDevice description: Get Device @@ -812,11 +812,11 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/history': + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/history: get: operationId: GetDeviceDfuHistory description: Get device DFU history for host or Notecard firmware @@ -839,8 +839,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/status': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/dfu/{firmwareType}/status: get: operationId: GetDeviceDfuStatus description: Get device DFU history for host or Notecard firmware @@ -863,8 +863,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/disable': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/disable: post: operationId: DisableDevice description: Disable Device @@ -882,8 +882,8 @@ paths: - device x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/enable': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/enable: post: operationId: EnableDevice description: Enable Device @@ -901,8 +901,8 @@ paths: - device x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_hierarchy': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_hierarchy: get: operationId: GetDeviceEnvironmentHierarchy summary: Get environment variable hierarchy for a device @@ -926,8 +926,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables: get: operationId: GetDeviceEnvironmentVariables description: Get environment variables of a device @@ -942,7 +942,7 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -967,8 +967,8 @@ paths: - device x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables/{key}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/environment_variables/{key}: delete: operationId: DeleteDeviceEnvironmentVariable description: Delete environment variable of a device @@ -992,8 +992,8 @@ paths: - device x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/files': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/files: delete: operationId: DeleteNotefiles description: Deletes Notefiles and the Notes they contain. @@ -1023,7 +1023,7 @@ paths: - device x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:notefiles' + resource: blues:resources:app:APPSERIAL:notefiles get: operationId: ListNotefiles description: Lists .qi and .db files for the device @@ -1059,8 +1059,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:notefiles' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/fleets': + resource: blues:resources:app:APPSERIAL:notefiles + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/fleets: delete: operationId: DeleteDeviceFromFleets description: Remove Device from Fleets @@ -1091,7 +1091,7 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices get: operationId: GetDeviceFleets description: Get Device Fleets @@ -1106,7 +1106,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1140,8 +1140,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/health-log': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/health-log: get: operationId: GetDeviceHealthLog description: Get Device Health Log @@ -1333,8 +1333,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notefiles/{notefileID}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/notefiles/{notefileID}: post: operationId: CreateNotefile description: Creates an empty Notefile on the device. @@ -1353,11 +1353,11 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notefiles' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}': + resource: blues:resources:app:APPSERIAL:notefiles + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}: get: operationId: GetNotefile - description: 'For .qi files, returns the queued up notes. For .db files, returns all notes in the notefile' + description: For .qi files, returns the queued up notes. For .db files, returns all notes in the notefile parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1405,10 +1405,10 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:notefiles' + resource: blues:resources:app:APPSERIAL:notefiles post: operationId: AddQiNote - description: 'Adds a Note to a Notefile, creating the Notefile if it doesn''t yet exist.' + description: Adds a Note to a Notefile, creating the Notefile if it doesn't yet exist. parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' @@ -1431,8 +1431,8 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}/{noteID}': + resource: blues:resources:app:APPSERIAL:notes + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/notes/{notefileID}/{noteID}: delete: operationId: DeleteNote description: Delete a note from a .db or .qi notefile @@ -1452,7 +1452,7 @@ paths: - device x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:notes' + resource: blues:resources:app:APPSERIAL:notes get: operationId: GetDbNote description: Get a note from a .db or .qi notefile @@ -1498,7 +1498,7 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:notes' + resource: blues:resources:app:APPSERIAL:notes post: operationId: AddDbNote description: Add a Note to a .db notefile. if noteID is '-' then payload is ignored and empty notefile is created @@ -1525,7 +1525,7 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:notes' + resource: blues:resources:app:APPSERIAL:notes put: operationId: UpdateDbNote description: Update a note in a .db or .qi notefile @@ -1552,11 +1552,11 @@ paths: - device x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:notes' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/plans': + resource: blues:resources:app:APPSERIAL:notes + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/plans: get: operationId: GetDevicePlans - description: 'Get Data Plans associated with the device, this include the primary sim, any external sim, as well as any satellite connections.' + description: Get Data Plans associated with the device, this include the primary sim, any external sim, as well as any satellite connections. responses: '200': $ref: '#/components/responses/DevicePlansResponse' @@ -1568,11 +1568,11 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/deviceUIDParam' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/provision': + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/provision: post: operationId: ProvisionDevice description: Provision Device for a Project @@ -1617,8 +1617,8 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/public-key': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/public-key: get: operationId: GetDevicePublicKey description: Get Device Public Key @@ -1648,8 +1648,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/sessions': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/sessions: get: operationId: GetDeviceSessions description: Get Device Sessions @@ -1672,8 +1672,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/{deviceUID}/signal': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/{deviceUID}/signal: post: operationId: SignalDevice description: Send a signal from Notehub to a Notecard. @@ -1706,8 +1706,8 @@ paths: - device x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/devices/public-keys': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/devices/public-keys: get: operationId: GetDevicePublicKeys description: Get Device Public Keys of a Project @@ -1745,8 +1745,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/{action}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/dfu/{firmwareType}/{action}: post: operationId: PerformDfuAction description: Update/cancel host or notecard firmware updates @@ -1781,8 +1781,8 @@ paths: - project x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/history': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/dfu/{firmwareType}/history: get: operationId: GetDevicesDfuHistory description: Get host or Notecard DFU history for all devices that match the filter criteria @@ -1817,8 +1817,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/dfu/{firmwareType}/status': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/dfu/{firmwareType}/status: get: operationId: GetDevicesDfuStatus description: Get host or Notecard DFU history for all devices that match the filter criteria @@ -1853,8 +1853,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/environment_hierarchy': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/environment_hierarchy: get: operationId: GetProjectEnvironmentHierarchy summary: Get environment variable hierarchy for a device @@ -1877,8 +1877,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/environment_variables': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/environment_variables: get: operationId: GetProjectEnvironmentVariables description: Get environment variables of a project @@ -1893,7 +1893,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' put: @@ -1915,8 +1915,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/environment_variables/{key}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/environment_variables/{key}: delete: operationId: DeleteProjectEnvironmentVariable description: Delete an environment variable of a project by key @@ -1939,8 +1939,8 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/events': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/events: get: operationId: GetEvents description: Get Events of a Project @@ -1989,8 +1989,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/events-cursor': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/events-cursor: get: operationId: GetEventsByCursor description: Get Events of a Project by cursor @@ -2014,8 +2014,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/events/{eventUID}/route-logs': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/events/{eventUID}/route-logs: get: operationId: GetRouteLogsByEvent description: Get Route Logs by Event UID @@ -2039,8 +2039,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/firmware': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/firmware: get: operationId: GetFirmwareInfo description: Get Available Firmware Information @@ -2072,8 +2072,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/firmware/{firmwareType}/{filename}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/firmware/{firmwareType}/{filename}: delete: operationId: DeleteFirmware description: | @@ -2103,7 +2103,7 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings get: operationId: DownloadFirmware description: Download firmware binary @@ -2131,7 +2131,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings post: operationId: UpdateFirmware description: | @@ -2172,7 +2172,7 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings put: operationId: UploadFirmware description: Upload firmware binary @@ -2186,7 +2186,7 @@ paths: type: string - name: version in: query - description: 'Firmware version (optional). If not provided, the version will be extracted from firmware binary if available, otherwise left empty' + description: Firmware version (optional). If not provided, the version will be extracted from firmware binary if available, otherwise left empty required: false schema: type: string @@ -2219,8 +2219,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/fleets': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/fleets: get: operationId: GetFleets description: Get Project Fleets @@ -2235,7 +2235,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:fleets' + resource: blues:resources:app:APPSERIAL:fleets parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' post: @@ -2252,7 +2252,7 @@ paths: connectivity_assurance: $ref: '#/components/schemas/FleetConnectivityAssurance' label: - description: 'The label, or name, for the Fleet.' + description: The label, or name, for the Fleet. type: string smart_rule: $ref: '#/components/schemas/FleetRule' @@ -2273,8 +2273,8 @@ paths: - project x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}: delete: operationId: DeleteFleet description: Delete Fleet @@ -2289,7 +2289,7 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:fleets' + resource: blues:resources:app:APPSERIAL:fleets get: operationId: GetFleet description: Get Fleet @@ -2306,7 +2306,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:fleets' + resource: blues:resources:app:APPSERIAL:fleets parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/fleetUIDParam' @@ -2359,8 +2359,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/devices': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/devices: get: operationId: GetFleetDevices description: Get Devices of a Fleet within a Project @@ -2388,8 +2388,8 @@ paths: - device x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_hierarchy': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_hierarchy: get: operationId: GetFleetEnvironmentHierarchy summary: Get environment variable hierarchy for a device @@ -2413,8 +2413,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables: get: operationId: GetFleetEnvironmentVariables description: Get environment variables of a fleet @@ -2429,7 +2429,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:fleets' + resource: blues:resources:app:APPSERIAL:fleets parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/fleetUIDParam' @@ -2454,8 +2454,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables/{key}': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/environment_variables/{key}: delete: operationId: DeleteFleetEnvironmentVariable description: Delete environment variables of a fleet @@ -2479,8 +2479,8 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:fleets' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events': + resource: blues:resources:app:APPSERIAL:fleets + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events: get: operationId: GetFleetEvents description: Get Events of a Fleet @@ -2529,8 +2529,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events-cursor': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/fleets/{fleetUID}/events-cursor: get: operationId: GetFleetEventsByCursor description: Get Events of a Fleet by cursor @@ -2556,8 +2556,8 @@ paths: - event x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/global-transformation': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/global-transformation: post: operationId: SetGlobalEventTransformation description: Set the project-level event JSONata transformation @@ -2581,8 +2581,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/global-transformation/disable': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/global-transformation/disable: post: operationId: DisableGlobalEventTransformation description: Disable the project-level event JSONata transformation @@ -2599,8 +2599,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/global-transformation/enable': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/global-transformation/enable: post: operationId: EnableGlobalEventTransformation description: Enable the project-level event JSONata transformation @@ -2617,8 +2617,8 @@ paths: - project x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs: get: operationId: GetJobs description: List all batch jobs for a project @@ -2635,7 +2635,7 @@ paths: - jobs x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings post: operationId: CreateJob description: Create a new batch job with an optional name @@ -2668,8 +2668,8 @@ paths: - jobs x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/{jobUID}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/{jobUID}: delete: operationId: DeleteJob description: Delete a batch job @@ -2689,7 +2689,7 @@ paths: - jobs x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings get: operationId: GetJob description: Get a specific batch job definition @@ -2709,8 +2709,8 @@ paths: - jobs x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/run': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/{jobUID}/run: post: operationId: RunJob description: Execute a batch job @@ -2737,8 +2737,8 @@ paths: - jobs x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/{jobUID}/runs': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/{jobUID}/runs: get: operationId: GetJobRuns description: List all runs for a specific job @@ -2771,8 +2771,8 @@ paths: - jobs x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}: get: operationId: GetJobRun description: Get the result of a job execution @@ -2792,8 +2792,8 @@ paths: - jobs x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}/cancel': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/jobs/runs/{reportUID}/cancel: post: operationId: CancelJobRun description: Cancel a running job execution @@ -2813,8 +2813,8 @@ paths: - jobs x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/members': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/members: get: operationId: GetProjectMembers description: Get Project Members @@ -2840,10 +2840,10 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:accounts' + resource: blues:resources:app:APPSERIAL:accounts parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - '/v1/projects/{projectOrProductUID}/monitors': + /v1/projects/{projectOrProductUID}/monitors: get: operationId: GetMonitors description: Get list of defined Monitors @@ -2860,7 +2860,7 @@ paths: - monitor x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices post: operationId: CreateMonitor description: Create a new Monitor @@ -2888,8 +2888,8 @@ paths: - monitor x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/monitors/{monitorUID}': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/monitors/{monitorUID}: delete: operationId: DeleteMonitor description: Delete Monitor @@ -2911,7 +2911,7 @@ paths: - monitor x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices get: operationId: GetMonitor description: Get Monitor @@ -2933,7 +2933,7 @@ paths: - monitor x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:devices' + resource: blues:resources:app:APPSERIAL:devices put: operationId: UpdateMonitor description: Update Monitor @@ -2962,8 +2962,8 @@ paths: - monitor x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:devices' - '/v1/projects/{projectOrProductUID}/products': + resource: blues:resources:app:APPSERIAL:devices + /v1/projects/{projectOrProductUID}/products: get: operationId: GetProducts description: Get Products within a Project @@ -2987,7 +2987,7 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:products' + resource: blues:resources:app:APPSERIAL:products parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' post: @@ -3006,7 +3006,7 @@ paths: items: type: string disable_devices_by_default: - description: 'If `true`, devices provisioned to this product will be automatically disabled by default.' + description: If `true`, devices provisioned to this product will be automatically disabled by default. type: boolean label: description: The label for the Product. @@ -3032,8 +3032,8 @@ paths: - project x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/products/{productUID}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/products/{productUID}: delete: operationId: DeleteProduct description: Delete a product @@ -3048,11 +3048,11 @@ paths: - project x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/productUIDParam' - '/v1/projects/{projectOrProductUID}/routes': + /v1/projects/{projectOrProductUID}/routes: get: operationId: GetRoutes description: Get all Routes within a Project @@ -3066,34 +3066,34 @@ paths: example: - disabled: false label: success route - modified: '2020-03-09T17:58:37Z' + modified: 2020-03-09T17:58:37Z type: http - uid: 'route:8d65a087d5d290ce5bdf03aeff2becc0' + uid: route:8d65a087d5d290ce5bdf03aeff2becc0 - disabled: false label: failing route - modified: '2020-03-09T17:59:15Z' + modified: 2020-03-09T17:59:15Z type: http - uid: 'route:a9eaad31d5cee8d01a42762f71fb777a' + uid: route:a9eaad31d5cee8d01a42762f71fb777a - disabled: true label: disabled route - modified: '2020-03-09T17:59:44Z' + modified: 2020-03-09T17:59:44Z type: http - uid: 'route:02ddc0e6e236c2a7e482da62047229ad' + uid: route:02ddc0e6e236c2a7e482da62047229ad - disabled: false label: Proxy Route - modified: '2020-03-09T17:58:36Z' + modified: 2020-03-09T17:58:36Z type: proxy - uid: 'route:0ac565deb7b478a250bb82348b9cfdd4' + uid: route:0ac565deb7b478a250bb82348b9cfdd4 - disabled: false label: Myjsonlive Webtest - modified: '2020-03-09T17:58:35Z' + modified: 2020-03-09T17:58:35Z type: proxy - uid: 'route:fb1b9e0aba1bf030311ba2c3c1e3efd7' + uid: route:fb1b9e0aba1bf030311ba2c3c1e3efd7 - disabled: false label: Myjsonlive Echo - modified: '2020-03-09T17:58:34Z' + modified: 2020-03-09T17:58:34Z type: proxy - uid: 'route:7804818f84a3be6193e14d804fe7fca7' + uid: route:7804818f84a3be6193e14d804fe7fca7 schema: type: array items: @@ -3107,7 +3107,7 @@ paths: - route x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:routes' + resource: blues:resources:app:APPSERIAL:routes post: operationId: CreateRoute description: Create Route within a Project @@ -3126,13 +3126,13 @@ paths: disable_http_headers: false filter: {} fleets: - - 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + - fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d http_headers: X-My-Header: value throttle_ms: 100 timeout: 5000 transform: {} - url: 'https://example.com/ingest' + url: https://example.com/ingest label: Route Label schema: $ref: '#/components/schemas/NotehubRoute' @@ -3149,16 +3149,16 @@ paths: system_notefiles: false type: '' fleets: - - 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + - fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d http_headers: null throttle_ms: 100 timeout: 0 transform: {} - url: 'http://route.url' + url: http://route.url label: Route Label - modified: '2020-03-09T17:59:44Z' + modified: 2020-03-09T17:59:44Z type: http - uid: 'route:8d65a087d5d290ce5bdf03aeff2becc0' + uid: route:8d65a087d5d290ce5bdf03aeff2becc0 schema: $ref: '#/components/schemas/NotehubRoute' default: @@ -3169,8 +3169,8 @@ paths: - route x-custom-attributes: permission: create - resource: 'blues:resources:app:APPSERIAL:routes' - '/v1/projects/{projectOrProductUID}/routes/{routeUID}': + resource: blues:resources:app:APPSERIAL:routes + /v1/projects/{projectOrProductUID}/routes/{routeUID}: delete: operationId: DeleteRoute description: Delete single route within a project @@ -3188,7 +3188,7 @@ paths: - route x-custom-attributes: permission: delete - resource: 'blues:resources:app:APPSERIAL:routes' + resource: blues:resources:app:APPSERIAL:routes get: operationId: GetRoute description: Get single route within a project @@ -3208,16 +3208,16 @@ paths: system_notefiles: false type: '' fleets: - - 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + - fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d http_headers: null throttle_ms: 100 timeout: 0 transform: {} - url: 'http://route.url' + url: http://route.url label: Route Label - modified: '2020-03-09T17:59:44Z' + modified: 2020-03-09T17:59:44Z type: http - uid: 'route:8d65a087d5d290ce5bdf03aeff2becc0' + uid: route:8d65a087d5d290ce5bdf03aeff2becc0 schema: $ref: '#/components/schemas/NotehubRoute' default: @@ -3228,7 +3228,7 @@ paths: - route x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:routes' + resource: blues:resources:app:APPSERIAL:routes put: operationId: UpdateRoute description: Update route by UID @@ -3291,8 +3291,8 @@ paths: - route x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:routes' - '/v1/projects/{projectOrProductUID}/routes/{routeUID}/route-logs': + resource: blues:resources:app:APPSERIAL:routes + /v1/projects/{projectOrProductUID}/routes/{routeUID}/route-logs: get: operationId: GetRouteLogsByRoute description: Get Route Logs by Route UID @@ -3328,8 +3328,8 @@ paths: - route x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:routes' - '/v1/projects/{projectOrProductUID}/schemas': + resource: blues:resources:app:APPSERIAL:routes + /v1/projects/{projectOrProductUID}/schemas: get: operationId: GetNotefileSchemas summary: Get variable format for a notefile @@ -3350,8 +3350,8 @@ paths: - project x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/usage/data': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/usage/data: get: operationId: GetDataUsage description: Get data usage in bytes for a project with time range and period aggregation @@ -3394,11 +3394,11 @@ paths: - usage x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/usage/events': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/usage/events: get: operationId: GetEventsUsage - description: 'Get events usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied' + description: Get events usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/startDateParam' @@ -3439,7 +3439,7 @@ paths: style: form - name: skipRecentData in: query - description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' + description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. required: false schema: type: boolean @@ -3466,11 +3466,11 @@ paths: - usage x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/usage/route-logs': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/usage/route-logs: get: operationId: GetRouteLogsUsage - description: 'Get route logs usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied' + description: Get route logs usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/startDateParam' @@ -3499,7 +3499,7 @@ paths: - project - name: skipRecentData in: query - description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' + description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. required: false schema: type: boolean @@ -3515,11 +3515,11 @@ paths: - usage x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/usage/sessions': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/usage/sessions: get: operationId: GetSessionsUsage - description: 'Get sessions usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied' + description: Get sessions usage for a project with time range and period aggregation, when endDate is 0 or unspecified the current time is implied parameters: - $ref: '#/components/parameters/projectOrProductUIDParam' - $ref: '#/components/parameters/startDateParam' @@ -3550,7 +3550,7 @@ paths: - project - name: skipRecentData in: query - description: 'When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects.' + description: When true, skips fetching recent data from raw event tables and only returns data from summary tables. Use this for better performance on large projects. required: false schema: type: boolean @@ -3566,8 +3566,8 @@ paths: - usage x-custom-attributes: permission: read - resource: 'blues:resources:app:APPSERIAL:events' - '/v1/projects/{projectOrProductUID}/webhooks': + resource: blues:resources:app:APPSERIAL:events + /v1/projects/{projectOrProductUID}/webhooks: get: operationId: GetWebhooks description: Retrieves all webhooks for the specified project @@ -3593,8 +3593,8 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' - '/v1/projects/{projectOrProductUID}/webhooks/{webhookUID}': + resource: blues:resources:app:APPSERIAL:settings + /v1/projects/{projectOrProductUID}/webhooks/{webhookUID}: delete: operationId: DeleteWebhook description: Deletes the specified webhook @@ -3612,7 +3612,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings get: operationId: GetWebhook description: Retrieves the configuration settings for the specified webhook @@ -3634,7 +3634,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings post: operationId: CreateWebhook description: Creates a webhook for the specified product with the given name. The name | must be unique within the project. @@ -3663,7 +3663,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings put: operationId: UpdateWebhook description: Updates the configuration settings for the specified webhook. | Webhook will be created if it does not exist. Update body will completely replace the existing settings. @@ -3690,7 +3690,7 @@ paths: - webhook x-custom-attributes: permission: update - resource: 'blues:resources:app:APPSERIAL:settings' + resource: blues:resources:app:APPSERIAL:settings components: parameters: billingAccountUIDParam: @@ -3709,7 +3709,7 @@ components: schema: type: string datasetAggregateWindowQueryParam: - description: 'Aggregate results into buckets for a time duration, expressed in Postgres INTERVAL format' + description: Aggregate results into buckets for a time duration, expressed in Postgres INTERVAL format in: query name: aggregate_window required: false @@ -3723,7 +3723,7 @@ components: schema: type: boolean datasetEndQueryParam: - description: 'End of the time range, as an ISO-8601 date or relative to now. If omitted, current time is used.' + description: End of the time range, as an ISO-8601 date or relative to now. If omitted, current time is used. in: query name: end required: false @@ -3737,15 +3737,15 @@ components: schema: type: integer datasetLocationNearQueryParam: - description: 'Latitude and Longitude for location-based filtering, location_near_radius must also be provided' + description: Latitude and Longitude for location-based filtering, location_near_radius must also be provided in: query name: location_near required: false schema: type: string - example: '42.393125,-71.185015' + example: 42.393125,-71.185015 datasetLocationRadiusQueryParam: - description: 'Distance from location_near in meters, location_near must also be provided' + description: Distance from location_near in meters, location_near must also be provided in: query name: location_near_radius required: false @@ -3766,28 +3766,28 @@ components: schema: type: string datasetSelectQueryParam: - description: 'Comma separated list of fields to include. Supports aggregate functions (avg, sum, min, max, count, most_recent).' + description: Comma separated list of fields to include. Supports aggregate functions (avg, sum, min, max, count, most_recent). in: query name: select required: false schema: type: string datasetStartQueryParam: - description: 'Start of the time range, as an ISO-8601 date or relative to now (e.g. -1y). Relative dates follow the Postgres INTERVAL format.' + description: Start of the time range, as an ISO-8601 date or relative to now (e.g. -1y). Relative dates follow the Postgres INTERVAL format. in: query name: start required: true schema: type: string datasetWhereQueryParam: - description: 'Additional filters using boolean logic mini-language (e.g. and.(device.eq.dev:123,temp.gt.100))' + description: Additional filters using boolean logic mini-language (e.g. and.(device.eq.dev:123,temp.gt.100)) in: query name: where required: false schema: type: string dateTypeParam: - description: 'Which date to filter on, either ''captured'' or ''uploaded''. This will apply to the startDate and endDate parameters' + description: Which date to filter on, either 'captured' or 'uploaded'. This will apply to the startDate and endDate parameters example: uploaded in: query name: dateType @@ -3807,7 +3807,7 @@ components: items: type: string deviceUIDParam: - example: 'dev:000000000000000' + example: dev:000000000000000 in: path name: deviceUID required: true @@ -3843,7 +3843,7 @@ components: - update - cancel endDateParam: - description: 'End date for filtering results, specified as a Unix timestamp' + description: End date for filtering results, specified as a Unix timestamp example: 1657894210 in: query name: endDate @@ -3877,7 +3877,7 @@ components: schema: type: string filesQueryParam: - example: '_health.qo, data.qo' + example: _health.qo, data.qo in: query name: files required: false @@ -3897,7 +3897,7 @@ components: - version - length firmwareSortOrderParam: - description: 'Sort order (asc for ascending, desc for descending)' + description: Sort order (asc for ascending, desc for descending) in: query name: sortOrder required: false @@ -3923,7 +3923,7 @@ components: schema: type: string firstSyncParam: - description: 'When true, filters results to only show first sync sessions' + description: When true, filters results to only show first sync sessions in: query name: firstSync required: false @@ -4025,7 +4025,7 @@ components: schema: type: string monitorUIDParam: - example: 'monitor:8bAdf00d-000f-51c-af-01d5eaf00dbad' + example: monitor:8bAdf00d-000f-51c-af-01d5eaf00dbad in: path name: monitorUID required: true @@ -4092,7 +4092,7 @@ components: schema: type: string productUIDParam: - example: 'com.blues.bridge:sensors' + example: com.blues.bridge:sensors in: path name: productUID required: true @@ -4109,7 +4109,7 @@ components: type: string style: form projectOrProductUIDParam: - example: 'app:2606f411-dea6-44a0-9743-1130f57d77d8' + example: app:2606f411-dea6-44a0-9743-1130f57d77d8 in: path name: projectOrProductUID required: true @@ -4136,7 +4136,7 @@ components: required: true schema: type: string - example: 'rid:2606f411-dea6-44a0-9743-1130f57d77d8' + example: rid:2606f411-dea6-44a0-9743-1130f57d77d8 responseStatusParam: example: 500 in: query @@ -4167,7 +4167,7 @@ components: - asc - desc routeUIDParam: - example: 'route:cbd20093cba58392c9f9bbdd0cdeb1a0' + example: route:cbd20093cba58392c9f9bbdd0cdeb1a0 in: path name: routeUID required: true @@ -4197,7 +4197,7 @@ components: - failure type: string selectFieldsParam: - description: 'Comma-separated list of fields to select from JSON payload (e.g., "field1,field2.subfield,field3"), this will reflect the columns in the CSV output.' + description: Comma-separated list of fields to select from JSON payload (e.g., "field1,field2.subfield,field3"), this will reflect the columns in the CSV output. in: query name: selectFields required: false @@ -4275,7 +4275,7 @@ components: - asc - desc startDateParam: - description: 'Start date for filtering results, specified as a Unix timestamp' + description: Start date for filtering results, specified as a Unix timestamp example: 1628631763 in: query name: startDate @@ -4434,7 +4434,7 @@ components: type: number type: object resolved: - description: 'If true, the alert has been resolved' + description: If true, the alert has been resolved type: boolean source: description: The UID of the source of the alert @@ -4593,9 +4593,9 @@ components: type: integer format: int64 plan_type: - description: 'Description of the SIM plan type including data allowance, region, and validity period' + description: Description of the SIM plan type including data allowance, region, and validity period type: string - example: '500MB, North America, 10-year lifetime' + example: 500MB, North America, 10-year lifetime CellularUsage: type: array items: @@ -4707,7 +4707,7 @@ components: description: Last updated timestamp type: number version: - description: 'Last known version, which is generally a JSON object contained within the firmware image' + description: Last known version, which is generally a JSON object contained within the firmware image type: string nullable: true DataField: @@ -4996,7 +4996,7 @@ components: bssid: type: string cell: - description: 'Cell ID where the session originated and quality ("mcc,mnc,lac,cellid")' + description: Cell ID where the session originated and quality ("mcc,mnc,lac,cellid") type: string continuous: description: Was this a continuous connection? @@ -5293,7 +5293,7 @@ components: description: Country type: string best_id: - description: 'The device serial number, or the DeviceUID if the serial number is not set' + description: The device serial number, or the DeviceUID if the serial number is not set type: string best_lat: description: Latitude @@ -5303,7 +5303,7 @@ components: description: Location type: string best_location_type: - description: 'One of "gps", "triangulated", or "tower"' + description: One of "gps", "triangulated", or "tower" type: string best_location_when: description: Unix timestamp @@ -5416,7 +5416,7 @@ components: description: Unix timestamp type: number transport: - description: 'The transport used for this event, e.g., "cellular", "wifi", ", etc.' + description: The transport used for this event, e.g., "cellular", "wifi", ", etc. type: string tri_country: description: Country @@ -5608,7 +5608,7 @@ components: enabled: true nullable: true FleetRule: - description: 'JSONata expression that will be evaluated to determine device membership into this fleet, if the expression evaluates to a 1, the device will be included, if it evaluates to -1 it will be removed, and if it evaluates to 0 or errors it will be left unchanged.' + description: JSONata expression that will be evaluated to determine device membership into this fleet, if the expression evaluates to a 1, the device will be included, if it evaluates to -1 it will be removed, and if it evaluates to 0 or errors it will be left unchanged. type: string properties: {} FleetsUIDList: @@ -5645,7 +5645,7 @@ components: filter: $ref: '#/components/schemas/Filter' fleets: - description: 'If non-empty, applies only to the listed fleets.' + description: If non-empty, applies only to the listed fleets. type: array items: type: string @@ -5722,7 +5722,7 @@ components: type: integer format: int64 status: - description: 'Current status (submitted, running, completed, cancelled, failed)' + description: Current status (submitted, running, completed, cancelled, failed) type: string submitted: description: Unix timestamp when submitted @@ -5773,7 +5773,7 @@ components: type: object properties: aggregate_function: - description: 'Aggregate function to apply to the selected values before applying the condition. [none, sum, average, max, min]' + description: Aggregate function to apply to the selected values before applying the condition. [none, sum, average, max, min] type: string enum: - none @@ -5785,9 +5785,9 @@ components: description: The time window to aggregate the selected values. It follows the format of a number followed by a time unit type: string example: 10m or 5h30m40s - pattern: '^[0-9]+[smh]$' + pattern: ^[0-9]+[smh]$ alert: - description: 'If true, the monitor is in alert state.' + description: If true, the monitor is in alert state. type: boolean alert_routes: type: array @@ -5797,7 +5797,7 @@ components: - $ref: '#/components/schemas/SlackBearerNotification' - $ref: '#/components/schemas/EmailNotification' condition_type: - description: 'A comparison operation to apply to the value selected by the source_selector [greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to, equal_to, not_equal_to]' + description: A comparison operation to apply to the value selected by the source_selector [greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to, equal_to, not_equal_to] type: string enum: - greater_than @@ -5810,7 +5810,7 @@ components: description: type: string disabled: - description: 'If true, the monitor will not be evaluated.' + description: If true, the monitor will not be evaluated. type: boolean fleet_filter: type: array @@ -5826,18 +5826,18 @@ components: items: type: string per_device: - description: 'Only relevant when using an aggregate_function. If true, the monitor will be evaluated per device, | rather than across the set of selected devices. If true then if a single device matches the specified criteria, | and alert will be created, otherwise the aggregate function will be applied across all devices.' + description: Only relevant when using an aggregate_function. If true, the monitor will be evaluated per device, | rather than across the set of selected devices. If true then if a single device matches the specified criteria, | and alert will be created, otherwise the aggregate function will be applied across all devices. type: boolean routing_cooldown_period: description: The time period to wait before routing another event after the monitor | has been triggered. It follows the format of a number followed by a time unit. type: string example: 10m or 5h30m40s - pattern: '^[0-9]+[smh]$' + pattern: ^[0-9]+[smh]$ silenced: - description: 'If true, alerts will be created, but no notifications will be sent.' + description: If true, alerts will be created, but no notifications will be sent. type: boolean source_selector: - description: 'A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value.' + description: A valid JSONata expression that selects the value to monitor from the source. | It should return a single, numeric value. type: string example: body.temperature source_type: @@ -5907,7 +5907,7 @@ components: description: True if originated from an edge source. type: boolean id: - description: 'Note name/identifier (e.g., "1:435", "my_note").' + description: Note name/identifier (e.g., "1:435", "my_note"). type: string payload: description: Optional base64-encoded payload. @@ -5942,7 +5942,7 @@ components: type: object properties: id: - description: 'Notefile id (e.g., "test.qi", "config.db").' + description: Notefile id (e.g., "test.qi", "config.db"). type: string notes: type: array @@ -5955,7 +5955,7 @@ components: - id - notes NotefileList: - description: 'Array of notefiles, each containing its notes.' + description: Array of notefiles, each containing its notes. type: array items: $ref: '#/components/schemas/Notefile' @@ -6042,7 +6042,7 @@ components: default: http uid: type: string - default: 'route:8d65a087d5d290ce5bdf03aeff2becc0' + default: route:8d65a087d5d290ce5bdf03aeff2becc0 OAuth2Error: type: object properties: @@ -6109,7 +6109,7 @@ components: format: date-time nullable: true last_used: - description: 'When it was last used, if ever' + description: When it was last used, if ever type: string format: date-time nullable: true @@ -6117,7 +6117,7 @@ components: description: Name for this API Key type: string suspended: - description: 'if true, this token cannot be used' + description: if true, this token cannot be used type: boolean uid: description: Unique and public identifier @@ -6135,7 +6135,7 @@ components: name: type: string suspended: - description: 'if true, the token is temporarily suspended' + description: if true, the token is temporarily suspended type: boolean required: - expiresAt @@ -6352,7 +6352,7 @@ components: type: object properties: attn: - description: 'If true, an error was returned when routing' + description: If true, an error was returned when routing type: boolean date: description: The date of the logs. @@ -6382,7 +6382,7 @@ components: type: object properties: format: - description: 'Output format for transformed data (e.g., "json", "xml", "text").' + description: Output format for transformed data (e.g., "json", "xml", "text"). type: string example: json jsonata: @@ -6487,7 +6487,7 @@ components: psid: description: Provider-specific identifier for the satellite subscription type: string - example: 'skylo:5746354465786' + example: skylo:5746354465786 satellite_data_usage: $ref: '#/components/schemas/SatelliteDataUsage' nullable: true @@ -6561,7 +6561,7 @@ components: - text - blocks text: - description: 'The text of the message, or the blocks definition' + description: The text of the message, or the blocks definition type: string token: description: The bearer token for the Slack app. @@ -6603,7 +6603,7 @@ components: - text - blocks text: - description: 'The text of the message, or the blocks definition' + description: The text of the message, or the blocks definition type: string url: description: The URL of the Slack webhook. @@ -6712,7 +6712,7 @@ components: mnc: description: Mobile Network Code type: integer - 'n': + n: description: Name of the location type: string source: @@ -6825,7 +6825,7 @@ components: period: type: string format: date-time - example: '2025-07-23T00:00:00Z' + example: 2025-07-23T00:00:00Z total_bytes: type: integer format: int64 @@ -6849,16 +6849,16 @@ components: type: object properties: billable_events: - description: 'Events that are billable, this include all events except platform events' + description: Events that are billable, this include all events except platform events type: integer format: int64 example: 10 device: type: string - example: 'dev:123456789012345' + example: dev:123456789012345 fleet: type: string - example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + example: fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d notefiles: description: Count of events per notefile. Only present when includeNotefiles=true is specified. type: object @@ -6872,14 +6872,14 @@ components: period: type: string format: date-time - example: '2025-07-23T00:00:00Z' + example: 2025-07-23T00:00:00Z platform_events: - description: 'Total platform events. Platform events are _log, _session, _health, and _geolocate events some of which are send from the device, some generated by notehub. These events are not billed.' + description: Total platform events. Platform events are _log, _session, _health, and _geolocate events some of which are send from the device, some generated by notehub. These events are not billed. type: integer format: int64 example: 15 total_days_in_period: - description: 'The total number of days in this period. Useful for calculating daily averages for month period. Note that the current period will be the total number of days in the current period, including days in the future.' + description: The total number of days in this period. Useful for calculating daily averages for month period. Note that the current period will be the total number of days in the current period, including days in the future. type: integer format: int32 total_devices: @@ -6887,7 +6887,7 @@ components: type: integer format: int64 total_events: - description: 'Total events the device sent to notehub, including associated notehub generated events' + description: Total events the device sent to notehub, including associated notehub generated events type: integer format: int64 example: 42 @@ -6904,7 +6904,7 @@ components: example: 2 nullable: true watchdog_events: - description: 'Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time.' + description: Watchdog events are events generated by notehub when a watchdog timer is configured for a device to indicate is has not been online for a period of time. These events are billed but should not be used to indicate a device is active, or connected, at this time. type: integer format: int64 example: 10 @@ -6941,11 +6941,11 @@ components: period: type: string format: date-time - example: '2025-07-23T00:00:00Z' + example: 2025-07-23T00:00:00Z route: description: The route UID (only present when aggregate is 'route') type: string - example: 'route:cbd20093cba58392c9f9bbdd0cdeb1a0' + example: route:cbd20093cba58392c9f9bbdd0cdeb1a0 successful_routes: type: integer format: int64 @@ -6964,7 +6964,7 @@ components: properties: device: type: string - example: 'dev:123456789012345' + example: dev:123456789012345 first_sync_sessions: description: Number of first sync sessions in this period type: integer @@ -6972,17 +6972,17 @@ components: example: 2 fleet: type: string - example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + example: fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d period: type: string format: date-time - example: '2025-07-23T00:00:00Z' + example: 2025-07-23T00:00:00Z sessions: type: integer format: int64 example: 12 sessions_by_transport: - description: 'Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan)' + description: Count of sessions grouped by transport type prefix (e.g. cell, wifi, ntn, lorawan) type: object example: cell: 8 @@ -7012,7 +7012,7 @@ components: - total_bytes - total_devices UsageTruncatedField: - description: 'If the data is truncated that means that the parameters selected resulted in a response of over | the requested limit of data points, in order to ensure' + description: If the data is truncated that means that the parameters selected resulted in a response of over | the requested limit of data points, in order to ensure type: boolean properties: {} UserDfuStateMachine: @@ -7184,7 +7184,7 @@ components: - has_more example: events: - - app: 'app:218f6217-9f78-432e-9fe0-02ca8b5a216c' + - app: app:218f6217-9f78-432e-9fe0-02ca8b5a216c best_country: US best_id: My Device best_lat: 34.82476372 @@ -7198,15 +7198,15 @@ components: pressure: 97705.66 temperature: 24.0625 voltage: 2.598 - device: 'dev:5c0272311928' + device: dev:5c0272311928 event: dfa3747d-688b-4250-935b-5dd60354313c file: air.qo - product: 'product:com.blues.project.demo' + product: product:com.blues.project.demo received: 1656011227.006928 req: note.add session: b623132c-6afb-4740-bc39-e3634e38f064 sn: My Device - tower_id: '0,0,0,0' + tower_id: 0,0,0,0 tri_country: US tri_lat: 34.82475372 tri_location: Atlanta GA @@ -7245,7 +7245,7 @@ components: - has_more example: events: - - app: 'app:218f6217-9f78-432e-9fe0-02ca8b5a216c' + - app: app:218f6217-9f78-432e-9fe0-02ca8b5a216c best_country: US best_id: My Device best_lat: 34.82476372 @@ -7259,15 +7259,15 @@ components: pressure: 97705.66 temperature: 24.0625 voltage: 2.598 - device: 'dev:5c0272311928' + device: dev:5c0272311928 event: dfa3747d-688b-4250-935b-5dd60354313c file: air.qo - product: 'product:com.blues.project.demo' + product: product:com.blues.project.demo received: 1656011227.006928 req: note.add session: b623132c-6afb-4740-bc39-e3634e38f064 sn: My Device - tower_id: '0,0,0,0' + tower_id: 0,0,0,0 tri_country: US tri_lat: 34.82475372 tri_location: Atlanta GA @@ -7314,7 +7314,7 @@ components: additionalProperties: type: string environment_variables_effective: - description: 'The environment variables as they will be seen by the device, fully resolved with project/fleet/device prioritization rules.' + description: The environment variables as they will be seen by the device, fully resolved with project/fleet/device prioritization rules. type: object additionalProperties: type: string @@ -7382,59 +7382,59 @@ components: $ref: '#/components/schemas/Event' example: latest_events: - - app: 'app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446' + - app: app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446 body: why: sensors.qo requested sync (sensors.qo) (TLS) - device: 'dev:864475040523995' + device: dev:864475040523995 event: 81bd2bf1-0399-4978-bc46-8f779b4af350 file: _session.qo - product: 'product:com.blues.app:myapp' + product: product:com.blues.app:myapp received: 1669667707.564694 req: session.begin session: ed18884b-f2a6-419f-b856-d28dc8f0892b tls: true tower_country: US - tower_id: '310,410,20483,184692495' + tower_id: 310,410,20483,184692495 tower_lat: 43.769062500000004 tower_location: Waverly MI tower_lon: -83.657359375 tower_timezone: America/Detroit tower_when: 1669667691 when: 1669667707 - - app: 'app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446' + - app: app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446 body: humid: 56.23 temp: 35.5 - device: 'dev:864475040523995' + device: dev:864475040523995 event: 916d4c81-06ae-4263-9b55-7a3a0f73cb5a file: data.qo - product: 'product:com.blues.app:myapp' + product: product:com.blues.app:myapp received: 1669667713.221659 req: note.add session: 28cdc39f-9f62-4789-b0a3-2f35f9448ced sn: tj-1 tower_country: US - tower_id: '310,410,20483,184692495' + tower_id: 310,410,20483,184692495 tower_lat: 43.769062500000004 tower_location: Waverly MI tower_lon: -83.657359375 tower_timezone: America/Detroit tower_when: 1669667677 when: 1669667689 - - app: 'app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446' + - app: app:2e49f10a-76a9-4e2d-8b18-cef0b8b46446 body: humidity: 69.88647200683693 pressure: 993.6294496104914 temp: 21.273027181770885 - device: 'dev:864475040523995' + device: dev:864475040523995 event: e98c2c3b-edbe-4fe7-af57-2196cc843eb7 file: sensors.qo - product: 'product:com.blues.app:myapp' + product: product:com.blues.app:myapp received: 1669667711.85316 req: note.add session: 7211392c-6895-43f8-9256-790655348be5 tower_country: US - tower_id: '310,410,20483,184692496' + tower_id: 310,410,20483,184692496 tower_lat: 43.747037500000005 tower_location: Waverly MI tower_lon: -83.665859375 @@ -7499,12 +7499,12 @@ components: - apn: a-notehub.com.attz bars: 2 bearer: LTE FDD - cell: '310,410,17169,77315594' + cell: 310,410,17169,77315594 continuous: true - device: 'dev:000000000000000' + device: dev:000000000000000 events: 14 fleets: - - 'fleet:46be9834-5te6-42c1-0000-b5ea05e248d7' + - fleet:46be9834-5te6-42c1-0000-b5ea05e248d7 hp_cycles_data: 3 hp_cycles_total: 3 hp_secs_data: 7659 @@ -7520,7 +7520,7 @@ components: notes_sent: 12 sessions_tls: 1 since: 1667250832 - product: 'product:com.blues.demo:project' + product: product:com.blues.demo:project rat: lte rsrp: -91 rsrq: -13 @@ -7539,7 +7539,7 @@ components: lon: -89.44239062499999 mcc: 310 mnc: 410 - 'n': Shorewood Hills WI + n: Shorewood Hills WI time: 1667250835 towers: 1 zone: America/Chicago @@ -7566,14 +7566,14 @@ components: device: description: The device UID this usage data belongs to (only present when aggregate is 'device') type: string - example: 'dev:123456789012345' + example: dev:123456789012345 device_count: description: the number of devices represented by this data point type: integer fleet: description: The fleet UID this usage data belongs to (only present when aggregate is 'fleet') type: string - example: 'fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d' + example: fleet:1042ddc5-3b2c-4cec-b1fb-d3040538094d iccid: description: The ICCID of the cellular SIM card (only present when type is 'cellular') type: string @@ -7581,7 +7581,7 @@ components: psid: description: The PSID (Packet Service ID) of the satellite (or other packet-based device) type: string - example: 'skylo:5746354465786' + example: skylo:5746354465786 type: description: The type of connectivity type: string @@ -7650,10 +7650,10 @@ tags: name: webhook - description: APIs for events and sessions for external devices name: external devices - - description: 'Project Usage information related to events, route logs, sessions, and data usage' + - description: Project Usage information related to events, route logs, sessions, and data usage name: usage - description: Batch job operations name: jobs externalDocs: description: Find out more about Blues - url: 'https://blues.io' + url: https://blues.io