From a13d225eaa49f479e93e81863ed8a6f2028da4af Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 17 Dec 2025 18:11:54 +0000 Subject: [PATCH 01/10] 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/10] 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/10] 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/10] 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/10] 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/10] 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/10] 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/10] 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/10] 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/10] 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'