# Job service

The Job Service is responsible for returning information about jobs for checklist executions.

OpenAPI file: [`JobService.json`](https://dev.nominal.io/api/_downloads/eee6f028ac49c2c49d053c824088362a/JobService.json)

## Endpoints

### Get job report

GET `/jobs/v1/{jobRid}/job-report`

Fetches the job report for a job RID. Throws ResourcesNotFound if no job exists with this job RID.

Path parameters

`jobRid` string (RID) required
:   ​

Response

`jobStatus` [`JobStatus`](https://dev.nominal.io/api/rest/job-service.md#jobstatus)
:   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgress`](https://dev.nominal.io/api/rest/job-service.md#inprogress)
    :   ​

    **completed**

    Set `type` to `"completed"`.

    `completed` [`Completed`](https://dev.nominal.io/api/rest/job-service.md#completed)
    :   ​

        Fields of `Completed`

        `result` [`JobResult`](https://dev.nominal.io/api/rest/job-service.md#jobresult)
        :   Absent if the job’s result payload is no longer available. The job still completed successfully.

            **checkJobResult**

            Set `type` to `"checkJobResult"`.

            `checkJobResult` [`CheckJobResult`](https://dev.nominal.io/api/rest/job-service.md#checkjobresult)
            :   ​

                Fields of `CheckJobResult`

                `status` [`Status`](https://dev.nominal.io/api/rest/job-service.md#status)
                :   ​

                    Values of `Status`

                    `PASS`
                    :   ​

                    `FAIL`
                    :   ​

                `failures` array of [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                :   ​

                    Fields of `Range`

                    `start` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                    :   ​

                        Fields of `Timestamp`

                        `seconds` integer (int64)
                        :   ​

                        `nanos` integer (int64)
                        :   ​

                    `end` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                    :   ​

                    `value` [`RangeValue`](https://dev.nominal.io/api/rest/job-service.md#rangevalue)
                    :   ​

                        **double**

                        Set `type` to `"double"`.

                        `double` number
                        :   ​

                        **aggregation**

                        Set `type` to `"aggregation"`.

                        `aggregation` [`RangeAggregation`](https://dev.nominal.io/api/rest/job-service.md#rangeaggregation)
                        :   ​

                            Fields of `RangeAggregation`

                            `average` number
                            :   ​

                            `min` number
                            :   ​

                            `max` number
                            :   ​

                            `standardDeviation` number
                            :   ​

                            `count` number
                            :   ​

                            `sum` number
                            :   ​

                            `rootMeanSquare` number
                            :   ​

                        **noPointsInRange**

                        Set `type` to `"noPointsInRange"`.

                        `noPointsInRange` [`Empty`](https://dev.nominal.io/api/rest/job-service.md#empty)
                        :   ​

                `areFailuresDecimated` boolean
                :   ​

            **computeJobResult**

            Set `type` to `"computeJobResult"`.

            `computeJobResult` [`ComputeJobResult`](https://dev.nominal.io/api/rest/job-service.md#computejobresult)
            :   ​

                Fields of `ComputeJobResult`

                `response` [`ComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#computenoderesponse)
                :   ​

                    **range**

                    Set `type` to `"range"`.

                    `range` array of [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                    :   ​

                    **rangesSummary**

                    Set `type` to `"rangesSummary"`.

                    `rangesSummary` [`RangesSummary`](https://dev.nominal.io/api/rest/job-service.md#rangessummary)
                    :   ​

                        Fields of `RangesSummary`

                        `rangesSummary` array of [`RangeSummary`](https://dev.nominal.io/api/rest/job-service.md#rangesummary)
                        :   ​

                            Fields of `RangeSummary`

                            `range` [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                            :   The range representing the minimum start and maximum end times of the ranges.

                            `subRangeCount` integer
                            :   The number of ranges found within this time range.

                    **rangeValue**

                    Set `type` to `"rangeValue"`.

                    `rangeValue` [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                    :   ​

                    **numeric**

                    Set `type` to `"numeric"`.

                    `numeric` [`NumericPlot`](https://dev.nominal.io/api/rest/job-service.md#numericplot)
                    :   ​

                        Fields of `NumericPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `values` array of number
                        :   ​

                        `nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
                        :   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

                            **timestampAndId**

                            Set `type` to `"timestampAndId"`.

                            `timestampAndId` [`TimestampAndId`](https://dev.nominal.io/api/rest/job-service.md#timestampandid)
                            :   ​

                                Fields of `TimestampAndId`

                                `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                                :   ​

                                `id` string (UUID)
                                :   ​

                    **bucketedNumeric**

                    Set `type` to `"bucketedNumeric"`.

                    `bucketedNumeric` [`BucketedNumericPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketednumericplot)
                    :   ​

                        Fields of `BucketedNumericPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   The end of the bucket, exclusive.

                        `buckets` array of [`NumericBucket`](https://dev.nominal.io/api/rest/job-service.md#numericbucket)
                        :   ​

                            Fields of `NumericBucket`

                            `min` number
                            :   ​

                            `max` number
                            :   ​

                            `mean` number
                            :   ​

                            `count` integer (int64)
                            :   ​

                            `variance` number
                            :   The population variance of the bucket. If the bucket has only one value, this will be 0.

                            `firstPoint` [`NumericPoint`](https://dev.nominal.io/api/rest/job-service.md#numericpoint)
                            :   ​

                                Fields of `NumericPoint`

                                `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                                :   ​

                                `value` number
                                :   ​

                            `lastPoint` [`NumericPoint`](https://dev.nominal.io/api/rest/job-service.md#numericpoint)
                            :   Will be empty if the bucket only has a single point.

                            `aggregations` map of string to number
                            :   Additional per-bucket aggregations that have no dedicated field above, keyed by the output column name requested via `numericAggregations` or `numericOutputFieldsV2` (e.g. `sum`, `standardDeviation`, `rootMeanSquare`, `p50`). Empty when no additional aggregations were requested.

                    **numericPoint**

                    Set `type` to `"numericPoint"`.

                    `numericPoint` [`NumericPoint`](https://dev.nominal.io/api/rest/job-service.md#numericpoint)
                    :   ​

                    **singlePoint**

                    Set `type` to `"singlePoint"`.

                    `singlePoint` [`SinglePoint`](https://dev.nominal.io/api/rest/job-service.md#singlepoint)
                    :   ​

                        Fields of `SinglePoint`

                        `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `value` [`Value`](https://dev.nominal.io/api/rest/job-service.md#value)
                        :   ​

                            **stringValue**

                            Set `type` to `"stringValue"`.

                            `stringValue` string
                            :   ​

                            **float64Value**

                            Set `type` to `"float64Value"`.

                            `float64Value` number
                            :   ​

                            **int64Value**

                            Set `type` to `"int64Value"`.

                            `int64Value` string
                            :   ​

                            **arrayValue**

                            Set `type` to `"arrayValue"`.

                            `arrayValue` array of [`Value`](https://dev.nominal.io/api/rest/job-service.md#value)
                            :   ​

                            **structValue**

                            Set `type` to `"structValue"`.

                            `structValue` any JSON value
                            :   A JSON representation of the struct

                        `precisionLoss` boolean
                        :   Returns true if the result required downcasting to a type with less precision, for example if the input series was Int64 and the result is a Float64.

                    **arrowNumeric**

                    Set `type` to `"arrowNumeric"`.

                    `arrowNumeric` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                        Fields of `ArrowPlot`

                        `arrowBinary` string (base64)
                        :   The raw binary containing an Arrow IPC stream.

                        `groupByKeys` array of string
                        :   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

                        `nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
                        :   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

                    **arrowBucketedNumeric**

                    Set `type` to `"arrowBucketedNumeric"`.

                    `arrowBucketedNumeric` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **enum**

                    Set `type` to `"enum"`.

                    `enum` [`EnumPlot`](https://dev.nominal.io/api/rest/job-service.md#enumplot)
                    :   ​

                        Fields of `EnumPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `values` array of integer
                        :   ​

                        `categories` array of string
                        :   ​

                        `nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
                        :   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

                    **enumPoint**

                    Set `type` to `"enumPoint"`.

                    `enumPoint` [`EnumPoint`](https://dev.nominal.io/api/rest/job-service.md#enumpoint)
                    :   ​

                        Fields of `EnumPoint`

                        `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `value` string
                        :   ​

                    **bucketedEnum**

                    Set `type` to `"bucketedEnum"`.

                    `bucketedEnum` [`BucketedEnumPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedenumplot)
                    :   ​

                        Fields of `BucketedEnumPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   The end of the bucket, exclusive.

                        `buckets` array of [`EnumBucket`](https://dev.nominal.io/api/rest/job-service.md#enumbucket)
                        :   ​

                            Fields of `EnumBucket`

                            `histogram` map of string to integer (int64)
                            :   The map of values within the bucket to their frequency.

                            `firstPoint` [`CompactEnumPoint`](https://dev.nominal.io/api/rest/job-service.md#compactenumpoint)
                            :   ​

                                Fields of `CompactEnumPoint`

                                `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                                :   ​

                                `value` integer
                                :   ​

                            `lastPoint` [`CompactEnumPoint`](https://dev.nominal.io/api/rest/job-service.md#compactenumpoint)
                            :   Will be empty if the bucket only has a single point.

                        `categories` array of string
                        :   ​

                    **arrowEnum**

                    Set `type` to `"arrowEnum"`.

                    `arrowEnum` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **arrowBucketedEnum**

                    Set `type` to `"arrowBucketedEnum"`.

                    `arrowBucketedEnum` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **pagedLog**

                    Set `type` to `"pagedLog"`.

                    `pagedLog` [`PagedLogPlot`](https://dev.nominal.io/api/rest/job-service.md#pagedlogplot)
                    :   ​

                        Fields of `PagedLogPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `values` array of [`LogValue`](https://dev.nominal.io/api/rest/job-service.md#logvalue)
                        :   ​

                            Fields of `LogValue`

                            `message` string
                            :   ​

                            `args` map of string to string
                            :   ​

                            `id` string (UUID)
                            :   ​

                        `nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
                        :   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

                    **logPoint**

                    Set `type` to `"logPoint"`.

                    `logPoint` [`LogPoint`](https://dev.nominal.io/api/rest/job-service.md#logpoint)
                    :   ​

                        Fields of `LogPoint`

                        `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `value` [`LogValue`](https://dev.nominal.io/api/rest/job-service.md#logvalue)
                        :   ​

                    **arrowLog**

                    Set `type` to `"arrowLog"`.

                    `arrowLog` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **cartesian**

                    Set `type` to `"cartesian"`.

                    `cartesian` [`CartesianPlot`](https://dev.nominal.io/api/rest/job-service.md#cartesianplot)
                    :   ​

                        Fields of `CartesianPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `xValues` array of number
                        :   ​

                        `yValues` array of number
                        :   ​

                    **bucketedCartesian**

                    Set `type` to `"bucketedCartesian"`.

                    `bucketedCartesian` [`BucketedCartesianPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedcartesianplot)
                    :   ​

                        Fields of `BucketedCartesianPlot`

                        `buckets` array of [`CartesianBucket`](https://dev.nominal.io/api/rest/job-service.md#cartesianbucket)
                        :   ​

                            Fields of `CartesianBucket`

                            `minX` number
                            :   ​

                            `maxX` number
                            :   ​

                            `minY` number
                            :   ​

                            `maxY` number
                            :   ​

                            `minTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `maxTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `count` integer (int64)
                            :   ​

                    **bucketedCartesian3d**

                    Set `type` to `"bucketedCartesian3d"`.

                    `bucketedCartesian3d` [`BucketedCartesian3dPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedcartesian3dplot)
                    :   ​

                        Fields of `BucketedCartesian3dPlot`

                        `buckets` array of [`Cartesian3dBucket`](https://dev.nominal.io/api/rest/job-service.md#cartesian3dbucket)
                        :   ​

                            Fields of `Cartesian3dBucket`

                            `minX` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `maxX` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `meanX` number
                            :   ​

                            `minY` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `maxY` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `meanY` number
                            :   ​

                            `minZ` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `maxZ` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `meanZ` number
                            :   ​

                            `minXPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                                Fields of `Point3d`

                                `x` number
                                :   ​

                                `y` number
                                :   ​

                                `z` number
                                :   ​

                                `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                                :   ​

                            `maxXPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `minYPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `maxYPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `minZPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `maxZPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `minTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `maxTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `count` integer (int64)
                            :   ​

                    **frequencyDomain**

                    Set `type` to `"frequencyDomain"`.

                    `frequencyDomain` [`FrequencyDomainPlot`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplot)
                    :   ​

                        Fields of `FrequencyDomainPlot`

                        `frequencies` array of number
                        :   ​

                        `amplitudes` array of number
                        :   ​

                    **frequencyDomainV2**

                    Set `type` to `"frequencyDomainV2"`.

                    `frequencyDomainV2` [`FrequencyDomainPlotV2`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplotv2)
                    :   ​

                        **real**

                        Set `type` to `"real"`.

                        `real` [`FrequencyDomainPlot`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplot)
                        :   ​

                        **complex**

                        Set `type` to `"complex"`.

                        `complex` [`FrequencyDomainPlotComplex`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplotcomplex)
                        :   ​

                            Fields of `FrequencyDomainPlotComplex`

                            `frequencies` array of number
                            :   ​

                            `real` array of number
                            :   ​

                            `imaginary` array of number
                            :   ​

                        **magnitudeAndPhase**

                        Set `type` to `"magnitudeAndPhase"`.

                        `magnitudeAndPhase` [`FrequencyDomainPlotMagnitudeAndPhase`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplotmagnitudeandphase)
                        :   ​

                            Fields of `FrequencyDomainPlotMagnitudeAndPhase`

                            `frequencies` array of number
                            :   ​

                            `magnitudes` array of number
                            :   ​

                            `phases` array of number
                            :   ​

                    **spectrogram**

                    Set `type` to `"spectrogram"`.

                    `spectrogram` [`SpectrogramPlot`](https://dev.nominal.io/api/rest/job-service.md#spectrogramplot)
                    :   ​

                        Fields of `SpectrogramPlot`

                        `frequencyCenters` array of number
                        :   Center frequency in Hz of each column.

                        `frequencyEdges` array of number
                        :   Column boundaries in Hz, one more than `frequencyCenters`: column `c` spans `frequencyEdges[c]` to `frequencyEdges[c + 1]`. Columns may differ in width.

                        `rows` array of [`SpectrogramRow`](https://dev.nominal.io/api/rest/job-service.md#spectrogramrow)
                        :   ​

                            Fields of `SpectrogramRow`

                            `start` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   Start of the time span this row covers.

                            `end` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   End of the time span this row covers.

                            `values` array of number
                            :   One value per column

                    **bucketedFrequencyDomain**

                    Set `type` to `"bucketedFrequencyDomain"`.

                    `bucketedFrequencyDomain` [`BucketedFrequencyDomainPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedfrequencydomainplot)
                    :   ​

                        Fields of `BucketedFrequencyDomainPlot`

                        `buckets` array of [`FrequencyBucket`](https://dev.nominal.io/api/rest/job-service.md#frequencybucket)
                        :   ​

                            Fields of `FrequencyBucket`

                            `frequencyStart` number
                            :   The start frequency of this bucket (inclusive).

                            `frequencyEnd` number
                            :   The end frequency of this bucket (exclusive).

                            `frequencyCenter` number
                            :   The center frequency of this bucket.

                            `minAmplitude` number
                            :   The minimum amplitude value in this bucket.

                            `maxAmplitude` number
                            :   The maximum amplitude value in this bucket.

                            `meanAmplitude` number
                            :   The mean amplitude value in this bucket.

                            `count` integer (int64)
                            :   The number of original frequency points that were aggregated into this bucket.

                            `firstPoint` [`FrequencyPoint`](https://dev.nominal.io/api/rest/job-service.md#frequencypoint)
                            :   The first point (lowest frequency) in this bucket.

                                Fields of `FrequencyPoint`

                                `frequency` number
                                :   ​

                                `amplitude` number
                                :   ​

                            `lastPoint` [`FrequencyPoint`](https://dev.nominal.io/api/rest/job-service.md#frequencypoint)
                            :   The last point (highest frequency) in this bucket. Will be empty if the bucket only has a single point.

                    **numericHistogram**

                    Set `type` to `"numericHistogram"`.

                    `numericHistogram` [`NumericHistogramPlot`](https://dev.nominal.io/api/rest/job-service.md#numerichistogramplot)
                    :   ​

                        Fields of `NumericHistogramPlot`

                        `buckets` array of [`NumericHistogramBucket`](https://dev.nominal.io/api/rest/job-service.md#numerichistogrambucket)
                        :   ​

                            Fields of `NumericHistogramBucket`

                            `lowerBound` number
                            :   The lower bound of the bucket, inclusive

                            `upperBound` number
                            :   The upper bound of the bucket, exclusive

                            `countsByChannel` map of `VariableName` to [`HistogramChannelCount`](https://dev.nominal.io/api/rest/job-service.md#histogramchannelcount)
                            :   ​

                                Fields of `HistogramChannelCount`

                                `count` integer (int64)
                                :   ​

                            `buckets` map of `VariableName` to [`HistogramChannelCount`](https://dev.nominal.io/api/rest/job-service.md#histogramchannelcount) deprecated
                            :   **Deprecated:** Use countsByChannel instead

                    **enumHistogram**

                    Set `type` to `"enumHistogram"`.

                    `enumHistogram` [`EnumHistogramPlot`](https://dev.nominal.io/api/rest/job-service.md#enumhistogramplot)
                    :   ​

                        Fields of `EnumHistogramPlot`

                        `buckets` array of [`EnumHistogramBucket`](https://dev.nominal.io/api/rest/job-service.md#enumhistogrambucket)
                        :   ​

                            Fields of `EnumHistogramBucket`

                            `value` string
                            :   The value of the enum as a string

                            `countsByChannel` map of `VariableName` to [`HistogramChannelCount`](https://dev.nominal.io/api/rest/job-service.md#histogramchannelcount)
                            :   ​

                    **curveFit**

                    Set `type` to `"curveFit"`.

                    `curveFit` [`CurveFitResult`](https://dev.nominal.io/api/rest/job-service.md#curvefitresult)
                    :   Deprecated: use `curveFitV2` (CurveFitResultV2) instead. Returned only for deprecated CurveFit requests.

                        Fields of `CurveFitResult`

                        `r2` number
                        :   R^2 (coefficient of determination) for the fit curve, a normalized measure of how well the curve fits the data. Usually ranges from 0 to 1, with higher indicating better fit (points closer to fit line).

                        `mae` number
                        :   Mean Absolute Error (MAE) - the average of the absolute differences between predicted and actual values. Measured in the same units as the y-values.

                        `mse` number
                        :   Mean Squared Error (MSE) - the average of the squared differences between predicted and actual values. Measured in the squared units of the y-values.

                        `rmse` number
                        :   Root Mean Squared Error (RMSE) - the square root of the mean squared error. Measured in the same units as the y-values.

                        `maxAbsoluteError` number
                        :   Maximum Absolute Error - the largest absolute difference between any predicted and actual value. Measured in the same units as the y-values.

                        `sampleCount` integer
                        :   The number of data points used in the curve fitting calculation.

                        `curveResultDetails` [`CurveResultDetails`](https://dev.nominal.io/api/rest/job-service.md#curveresultdetails)
                        :   Description of the fit curve.

                            **exponential**

                            Set `type` to `"exponential"`.

                            `exponential` [`ExponentialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#exponentialresultdetails)
                            :   ​

                                Fields of `ExponentialResultDetails`

                                `a` number
                                :   ​

                                `b` number
                                :   ​

                            **logarithmic**

                            Set `type` to `"logarithmic"`.

                            `logarithmic` [`LogarithmicResultDetails`](https://dev.nominal.io/api/rest/job-service.md#logarithmicresultdetails)
                            :   ​

                                Fields of `LogarithmicResultDetails`

                                `a` number
                                :   ​

                                `b` number
                                :   ​

                            **polynomial**

                            Set `type` to `"polynomial"`.

                            `polynomial` [`PolynomialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#polynomialresultdetails)
                            :   ​

                                Fields of `PolynomialResultDetails`

                                `a` array of number
                                :   ​

                            **power**

                            Set `type` to `"power"`.

                            `power` [`PowerResultDetails`](https://dev.nominal.io/api/rest/job-service.md#powerresultdetails)
                            :   ​

                                Fields of `PowerResultDetails`

                                `a` number
                                :   ​

                                `b` number
                                :   ​

                    **curveFitV2**

                    Set `type` to `"curveFitV2"`.

                    `curveFitV2` [`CurveFitResultV2`](https://dev.nominal.io/api/rest/job-service.md#curvefitresultv2)
                    :   ​

                        Fields of `CurveFitResultV2`

                        `r2` number
                        :   R^2 (coefficient of determination) for the fit curve, a normalized measure of how well the curve fits the data. Usually ranges from 0 to 1, with higher indicating better fit (points closer to fit line).

                        `mae` number
                        :   Mean Absolute Error (MAE) - the average of the absolute differences between predicted and actual values. Measured in the same units as the y-values.

                        `mse` number
                        :   Mean Squared Error (MSE) - the average of the squared differences between predicted and actual values. Measured in the squared units of the y-values.

                        `rmse` number
                        :   Root Mean Squared Error (RMSE) - the square root of the mean squared error. Measured in the same units as the y-values.

                        `maxAbsoluteError` number
                        :   Maximum Absolute Error - the largest absolute difference between any predicted and actual value. Measured in the same units as the y-values.

                        `sampleCount` integer
                        :   The number of data points used in the curve fitting calculation.

                        `curveResultDetails` [`CurveResultDetailsV2`](https://dev.nominal.io/api/rest/job-service.md#curveresultdetailsv2)
                        :   Description of the fit curve.

                            **exponential**

                            Set `type` to `"exponential"`.

                            `exponential` [`ExponentialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#exponentialresultdetails)
                            :   ​

                            **logarithmic**

                            Set `type` to `"logarithmic"`.

                            `logarithmic` [`LogarithmicResultDetails`](https://dev.nominal.io/api/rest/job-service.md#logarithmicresultdetails)
                            :   ​

                            **polynomial**

                            Set `type` to `"polynomial"`.

                            `polynomial` [`PolynomialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#polynomialresultdetails)
                            :   ​

                            **power**

                            Set `type` to `"power"`.

                            `power` [`PowerResultDetails`](https://dev.nominal.io/api/rest/job-service.md#powerresultdetails)
                            :   ​

                            **custom**

                            Set `type` to `"custom"`.

                            `custom` [`CustomCurveResultDetails`](https://dev.nominal.io/api/rest/job-service.md#customcurveresultdetails)
                            :   ​

                                Fields of `CustomCurveResultDetails`

                                `parameters` map of string to number
                                :   Optimized parameter values produced by the curve fit. Keys match the parameter names provided in the request.

                                `converged` boolean
                                :   Whether the optimizer converged to a solution within its iteration limit. When false, the returned parameters are the best estimate found before the iteration cap was reached and did not satisfy the solver’s convergence tolerances.

                                `iterations` integer
                                :   Number of iterations the solver completed.

                    **grouped**

                    Set `type` to `"grouped"`.

                    `grouped` [`GroupedComputeNodeResponses`](https://dev.nominal.io/api/rest/job-service.md#groupedcomputenoderesponses)
                    :   ​

                        Fields of `GroupedComputeNodeResponses`

                        `responses` array of [`GroupedComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#groupedcomputenoderesponse)
                        :   ​

                            Fields of `GroupedComputeNodeResponse`

                            `grouping` [`Grouping`](https://dev.nominal.io/api/rest/job-service.md#grouping)
                            :   ​

                                **tagsWithValues**

                                Set `type` to `"tagsWithValues"`.

                                `tagsWithValues` map of string to string
                                :   A grouping identified by a specific instantiation of tag keys and values.

                            `response` [`ComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#computenoderesponse)
                            :   ​

                    **array**

                    Set `type` to `"array"`.

                    `array` [`ArrowArrayPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowarrayplot)
                    :   ​

                        **bucketedNumeric**

                        Set `type` to `"bucketedNumeric"`.

                        `bucketedNumeric` [`BucketedNumericArrayPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketednumericarrayplot)
                        :   ​

                            Fields of `BucketedNumericArrayPlot`

                            `arrowBinary` string (base64)
                            :   The raw binary containing Arrow IPC stream for a bucketed N-dimensional numeric array plot.

                            `groupByKeys` array of string
                            :   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

                        **bucketedEnum**

                        Set `type` to `"bucketedEnum"`.

                        `bucketedEnum` [`BucketedEnumArrayPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedenumarrayplot)
                        :   ​

                            Fields of `BucketedEnumArrayPlot`

                            `arrowBinary` string (base64)
                            :   The raw binary containing Arrow IPC stream for a bucketed N-dimensional enum array plot.

                            `groupByKeys` array of string
                            :   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

                    **bucketedStruct**

                    Set `type` to `"bucketedStruct"`.

                    `bucketedStruct` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **arrowStruct**

                    Set `type` to `"arrowStruct"`.

                    `arrowStruct` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **fullResolution**

                    Set `type` to `"fullResolution"`.

                    `fullResolution` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **arrowBucketedMultivariate**

                    Set `type` to `"arrowBucketedMultivariate"`.

                    `arrowBucketedMultivariate` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **multivariate**

                    Set `type` to `"multivariate"`.

                    `multivariate` [`BucketedMultivariatePlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedmultivariateplot)
                    :   ​

                        Fields of `BucketedMultivariatePlot`

                        `buckets` array of [`MultivariateBucket`](https://dev.nominal.io/api/rest/job-service.md#multivariatebucket)
                        :   ​

                            Fields of `MultivariateBucket`

                            `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `values` array of [`Value`](https://dev.nominal.io/api/rest/job-service.md#value)
                            :   Values for each input series in the bucket.

                        `groupByKeys` array of string
                        :   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

                `executionEndTime` string (date-time)
                :   ​

            **udfCompilationJobResult**

            Set `type` to `"udfCompilationJobResult"`.

            `udfCompilationJobResult` [`UdfCompilationJobResult`](https://dev.nominal.io/api/rest/job-service.md#udfcompilationjobresult)
            :   ​

                Fields of `UdfCompilationJobResult`

                `artifactHandle` [`S3Handle`](https://dev.nominal.io/api/rest/job-service.md#s3handle)
                :   ​

                    Fields of `S3Handle`

                    `bucket` string
                    :   ​

                    `key` string
                    :   ​

                `manifestHandle` [`S3Handle`](https://dev.nominal.io/api/rest/job-service.md#s3handle)
                :   ​

                `compileKey` string
                :   ​

        `executionStartTime` string (date-time)
        :   ​

        `executionEndTime` string (date-time)
        :   ​

    **failed**

    Set `type` to `"failed"`.

    `failed` [`Failed`](https://dev.nominal.io/api/rest/job-service.md#failed)
    :   ​

        Fields of `Failed`

        `failureMessage` string
        :   ​

        `executionStartTime` string (date-time)
        :   ​

        `executionEndTime` string (date-time)
        :   ​

    **cancelled**

    Set `type` to `"cancelled"`.

    `cancelled` [`Cancelled`](https://dev.nominal.io/api/rest/job-service.md#cancelled)
    :   ​

        Fields of `Cancelled`

        `executionStartTime` string (date-time)
        :   ​

        `executionEndTime` string (date-time)
        :   ​

`jobRid` string (RID)
:   ​

`submittedAt` string (date-time)
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/jobs/v1/<job rid>/job-report" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/jobs/v1/<job rid>/job-report",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/jobs/v1/<job rid>/job-report",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/jobs/v1/<job rid>/job-report",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "jobStatus": {
    "type": "inProgress",
    "inProgress": {}
  },
  "jobRid": "<job rid>",
  "submittedAt": "2026-01-01T00:00:00Z"
}
```

### Batch get job reports

POST `/jobs/v1/batch-get-job-reports`

Fetches the job reports for a set of job RIDs. Omits any job reports the user is not permitted to see from the response.

Body

`jobRids` array of string (RID)
:   ​

Response

`jobRidsToJobReports` map of `JobRid` to [`JobReport`](https://dev.nominal.io/api/rest/job-service.md#jobreport)
:   ​

    Fields of `JobReport`

    `jobStatus` [`JobStatus`](https://dev.nominal.io/api/rest/job-service.md#jobstatus)
    :   ​

        **inProgress**

        Set `type` to `"inProgress"`.

        `inProgress` [`InProgress`](https://dev.nominal.io/api/rest/job-service.md#inprogress)
        :   ​

        **completed**

        Set `type` to `"completed"`.

        `completed` [`Completed`](https://dev.nominal.io/api/rest/job-service.md#completed)
        :   ​

            Fields of `Completed`

            `result` [`JobResult`](https://dev.nominal.io/api/rest/job-service.md#jobresult)
            :   Absent if the job’s result payload is no longer available. The job still completed successfully.

                **checkJobResult**

                Set `type` to `"checkJobResult"`.

                `checkJobResult` [`CheckJobResult`](https://dev.nominal.io/api/rest/job-service.md#checkjobresult)
                :   ​

                    Fields of `CheckJobResult`

                    `status` [`Status`](https://dev.nominal.io/api/rest/job-service.md#status)
                    :   ​

                        Values of `Status`

                        `PASS`
                        :   ​

                        `FAIL`
                        :   ​

                    `failures` array of [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                    :   ​

                        Fields of `Range`

                        `start` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                            Fields of `Timestamp`

                            `seconds` integer (int64)
                            :   ​

                            `nanos` integer (int64)
                            :   ​

                        `end` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `value` [`RangeValue`](https://dev.nominal.io/api/rest/job-service.md#rangevalue)
                        :   ​

                            **double**

                            Set `type` to `"double"`.

                            `double` number
                            :   ​

                            **aggregation**

                            Set `type` to `"aggregation"`.

                            `aggregation` [`RangeAggregation`](https://dev.nominal.io/api/rest/job-service.md#rangeaggregation)
                            :   ​

                                Fields of `RangeAggregation`

                                `average` number
                                :   ​

                                `min` number
                                :   ​

                                `max` number
                                :   ​

                                `standardDeviation` number
                                :   ​

                                `count` number
                                :   ​

                                `sum` number
                                :   ​

                                `rootMeanSquare` number
                                :   ​

                            **noPointsInRange**

                            Set `type` to `"noPointsInRange"`.

                            `noPointsInRange` [`Empty`](https://dev.nominal.io/api/rest/job-service.md#empty)
                            :   ​

                    `areFailuresDecimated` boolean
                    :   ​

                **computeJobResult**

                Set `type` to `"computeJobResult"`.

                `computeJobResult` [`ComputeJobResult`](https://dev.nominal.io/api/rest/job-service.md#computejobresult)
                :   ​

                    Fields of `ComputeJobResult`

                    `response` [`ComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#computenoderesponse)
                    :   ​

                        **range**

                        Set `type` to `"range"`.

                        `range` array of [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                        :   ​

                        **rangesSummary**

                        Set `type` to `"rangesSummary"`.

                        `rangesSummary` [`RangesSummary`](https://dev.nominal.io/api/rest/job-service.md#rangessummary)
                        :   ​

                            Fields of `RangesSummary`

                            `rangesSummary` array of [`RangeSummary`](https://dev.nominal.io/api/rest/job-service.md#rangesummary)
                            :   ​

                                Fields of `RangeSummary`

                                `range` [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                                :   The range representing the minimum start and maximum end times of the ranges.

                                `subRangeCount` integer
                                :   The number of ranges found within this time range.

                        **rangeValue**

                        Set `type` to `"rangeValue"`.

                        `rangeValue` [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                        :   ​

                        **numeric**

                        Set `type` to `"numeric"`.

                        `numeric` [`NumericPlot`](https://dev.nominal.io/api/rest/job-service.md#numericplot)
                        :   ​

                            Fields of `NumericPlot`

                            `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `values` array of number
                            :   ​

                            `nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
                            :   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

                                **timestampAndId**

                                Set `type` to `"timestampAndId"`.

                                `timestampAndId` [`TimestampAndId`](https://dev.nominal.io/api/rest/job-service.md#timestampandid)
                                :   ​

                                    Fields of `TimestampAndId`

                                    `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/jobs/v1/batch-get-job-reports" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "jobRids": [
    "<job rid>"
  ]
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/jobs/v1/batch-get-job-reports",
    headers={"Authorization": "Bearer <api key>"},
    json={"jobRids": ["<job rid>"]},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/jobs/v1/batch-get-job-reports",
    headers={"Authorization": "Bearer <api key>"},
    json={"jobRids": ["<job rid>"]},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/jobs/v1/batch-get-job-reports",
            headers={"Authorization": "Bearer <api key>"},
            json={"jobRids": ["<job rid>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "jobRidsToJobReports": {
    "<key>": {
      "jobStatus": {
        "type": "inProgress",
        "inProgress": {}
      },
      "jobRid": "<job rid>",
      "submittedAt": "2026-01-01T00:00:00Z"
    }
  }
}
```

### Cancel job

POST `/jobs/v1/{jobRid}/cancel`

Cancels an in-progress job. For compute jobs this also stops the running computation. A no-op for jobs already in a terminal state. Returns the resulting report.

Path parameters

`jobRid` string (RID) required
:   ​

Response

`jobStatus` [`JobStatus`](https://dev.nominal.io/api/rest/job-service.md#jobstatus)
:   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgress`](https://dev.nominal.io/api/rest/job-service.md#inprogress)
    :   ​

    **completed**

    Set `type` to `"completed"`.

    `completed` [`Completed`](https://dev.nominal.io/api/rest/job-service.md#completed)
    :   ​

        Fields of `Completed`

        `result` [`JobResult`](https://dev.nominal.io/api/rest/job-service.md#jobresult)
        :   Absent if the job’s result payload is no longer available. The job still completed successfully.

            **checkJobResult**

            Set `type` to `"checkJobResult"`.

            `checkJobResult` [`CheckJobResult`](https://dev.nominal.io/api/rest/job-service.md#checkjobresult)
            :   ​

                Fields of `CheckJobResult`

                `status` [`Status`](https://dev.nominal.io/api/rest/job-service.md#status)
                :   ​

                    Values of `Status`

                    `PASS`
                    :   ​

                    `FAIL`
                    :   ​

                `failures` array of [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                :   ​

                    Fields of `Range`

                    `start` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                    :   ​

                        Fields of `Timestamp`

                        `seconds` integer (int64)
                        :   ​

                        `nanos` integer (int64)
                        :   ​

                    `end` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                    :   ​

                    `value` [`RangeValue`](https://dev.nominal.io/api/rest/job-service.md#rangevalue)
                    :   ​

                        **double**

                        Set `type` to `"double"`.

                        `double` number
                        :   ​

                        **aggregation**

                        Set `type` to `"aggregation"`.

                        `aggregation` [`RangeAggregation`](https://dev.nominal.io/api/rest/job-service.md#rangeaggregation)
                        :   ​

                            Fields of `RangeAggregation`

                            `average` number
                            :   ​

                            `min` number
                            :   ​

                            `max` number
                            :   ​

                            `standardDeviation` number
                            :   ​

                            `count` number
                            :   ​

                            `sum` number
                            :   ​

                            `rootMeanSquare` number
                            :   ​

                        **noPointsInRange**

                        Set `type` to `"noPointsInRange"`.

                        `noPointsInRange` [`Empty`](https://dev.nominal.io/api/rest/job-service.md#empty)
                        :   ​

                `areFailuresDecimated` boolean
                :   ​

            **computeJobResult**

            Set `type` to `"computeJobResult"`.

            `computeJobResult` [`ComputeJobResult`](https://dev.nominal.io/api/rest/job-service.md#computejobresult)
            :   ​

                Fields of `ComputeJobResult`

                `response` [`ComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#computenoderesponse)
                :   ​

                    **range**

                    Set `type` to `"range"`.

                    `range` array of [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                    :   ​

                    **rangesSummary**

                    Set `type` to `"rangesSummary"`.

                    `rangesSummary` [`RangesSummary`](https://dev.nominal.io/api/rest/job-service.md#rangessummary)
                    :   ​

                        Fields of `RangesSummary`

                        `rangesSummary` array of [`RangeSummary`](https://dev.nominal.io/api/rest/job-service.md#rangesummary)
                        :   ​

                            Fields of `RangeSummary`

                            `range` [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                            :   The range representing the minimum start and maximum end times of the ranges.

                            `subRangeCount` integer
                            :   The number of ranges found within this time range.

                    **rangeValue**

                    Set `type` to `"rangeValue"`.

                    `rangeValue` [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
                    :   ​

                    **numeric**

                    Set `type` to `"numeric"`.

                    `numeric` [`NumericPlot`](https://dev.nominal.io/api/rest/job-service.md#numericplot)
                    :   ​

                        Fields of `NumericPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `values` array of number
                        :   ​

                        `nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
                        :   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

                            **timestampAndId**

                            Set `type` to `"timestampAndId"`.

                            `timestampAndId` [`TimestampAndId`](https://dev.nominal.io/api/rest/job-service.md#timestampandid)
                            :   ​

                                Fields of `TimestampAndId`

                                `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                                :   ​

                                `id` string (UUID)
                                :   ​

                    **bucketedNumeric**

                    Set `type` to `"bucketedNumeric"`.

                    `bucketedNumeric` [`BucketedNumericPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketednumericplot)
                    :   ​

                        Fields of `BucketedNumericPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   The end of the bucket, exclusive.

                        `buckets` array of [`NumericBucket`](https://dev.nominal.io/api/rest/job-service.md#numericbucket)
                        :   ​

                            Fields of `NumericBucket`

                            `min` number
                            :   ​

                            `max` number
                            :   ​

                            `mean` number
                            :   ​

                            `count` integer (int64)
                            :   ​

                            `variance` number
                            :   The population variance of the bucket. If the bucket has only one value, this will be 0.

                            `firstPoint` [`NumericPoint`](https://dev.nominal.io/api/rest/job-service.md#numericpoint)
                            :   ​

                                Fields of `NumericPoint`

                                `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                                :   ​

                                `value` number
                                :   ​

                            `lastPoint` [`NumericPoint`](https://dev.nominal.io/api/rest/job-service.md#numericpoint)
                            :   Will be empty if the bucket only has a single point.

                            `aggregations` map of string to number
                            :   Additional per-bucket aggregations that have no dedicated field above, keyed by the output column name requested via `numericAggregations` or `numericOutputFieldsV2` (e.g. `sum`, `standardDeviation`, `rootMeanSquare`, `p50`). Empty when no additional aggregations were requested.

                    **numericPoint**

                    Set `type` to `"numericPoint"`.

                    `numericPoint` [`NumericPoint`](https://dev.nominal.io/api/rest/job-service.md#numericpoint)
                    :   ​

                    **singlePoint**

                    Set `type` to `"singlePoint"`.

                    `singlePoint` [`SinglePoint`](https://dev.nominal.io/api/rest/job-service.md#singlepoint)
                    :   ​

                        Fields of `SinglePoint`

                        `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `value` [`Value`](https://dev.nominal.io/api/rest/job-service.md#value)
                        :   ​

                            **stringValue**

                            Set `type` to `"stringValue"`.

                            `stringValue` string
                            :   ​

                            **float64Value**

                            Set `type` to `"float64Value"`.

                            `float64Value` number
                            :   ​

                            **int64Value**

                            Set `type` to `"int64Value"`.

                            `int64Value` string
                            :   ​

                            **arrayValue**

                            Set `type` to `"arrayValue"`.

                            `arrayValue` array of [`Value`](https://dev.nominal.io/api/rest/job-service.md#value)
                            :   ​

                            **structValue**

                            Set `type` to `"structValue"`.

                            `structValue` any JSON value
                            :   A JSON representation of the struct

                        `precisionLoss` boolean
                        :   Returns true if the result required downcasting to a type with less precision, for example if the input series was Int64 and the result is a Float64.

                    **arrowNumeric**

                    Set `type` to `"arrowNumeric"`.

                    `arrowNumeric` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                        Fields of `ArrowPlot`

                        `arrowBinary` string (base64)
                        :   The raw binary containing an Arrow IPC stream.

                        `groupByKeys` array of string
                        :   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

                        `nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
                        :   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

                    **arrowBucketedNumeric**

                    Set `type` to `"arrowBucketedNumeric"`.

                    `arrowBucketedNumeric` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **enum**

                    Set `type` to `"enum"`.

                    `enum` [`EnumPlot`](https://dev.nominal.io/api/rest/job-service.md#enumplot)
                    :   ​

                        Fields of `EnumPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `values` array of integer
                        :   ​

                        `categories` array of string
                        :   ​

                        `nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
                        :   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

                    **enumPoint**

                    Set `type` to `"enumPoint"`.

                    `enumPoint` [`EnumPoint`](https://dev.nominal.io/api/rest/job-service.md#enumpoint)
                    :   ​

                        Fields of `EnumPoint`

                        `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `value` string
                        :   ​

                    **bucketedEnum**

                    Set `type` to `"bucketedEnum"`.

                    `bucketedEnum` [`BucketedEnumPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedenumplot)
                    :   ​

                        Fields of `BucketedEnumPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   The end of the bucket, exclusive.

                        `buckets` array of [`EnumBucket`](https://dev.nominal.io/api/rest/job-service.md#enumbucket)
                        :   ​

                            Fields of `EnumBucket`

                            `histogram` map of string to integer (int64)
                            :   The map of values within the bucket to their frequency.

                            `firstPoint` [`CompactEnumPoint`](https://dev.nominal.io/api/rest/job-service.md#compactenumpoint)
                            :   ​

                                Fields of `CompactEnumPoint`

                                `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                                :   ​

                                `value` integer
                                :   ​

                            `lastPoint` [`CompactEnumPoint`](https://dev.nominal.io/api/rest/job-service.md#compactenumpoint)
                            :   Will be empty if the bucket only has a single point.

                        `categories` array of string
                        :   ​

                    **arrowEnum**

                    Set `type` to `"arrowEnum"`.

                    `arrowEnum` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **arrowBucketedEnum**

                    Set `type` to `"arrowBucketedEnum"`.

                    `arrowBucketedEnum` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **pagedLog**

                    Set `type` to `"pagedLog"`.

                    `pagedLog` [`PagedLogPlot`](https://dev.nominal.io/api/rest/job-service.md#pagedlogplot)
                    :   ​

                        Fields of `PagedLogPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `values` array of [`LogValue`](https://dev.nominal.io/api/rest/job-service.md#logvalue)
                        :   ​

                            Fields of `LogValue`

                            `message` string
                            :   ​

                            `args` map of string to string
                            :   ​

                            `id` string (UUID)
                            :   ​

                        `nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
                        :   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

                    **logPoint**

                    Set `type` to `"logPoint"`.

                    `logPoint` [`LogPoint`](https://dev.nominal.io/api/rest/job-service.md#logpoint)
                    :   ​

                        Fields of `LogPoint`

                        `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `value` [`LogValue`](https://dev.nominal.io/api/rest/job-service.md#logvalue)
                        :   ​

                    **arrowLog**

                    Set `type` to `"arrowLog"`.

                    `arrowLog` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **cartesian**

                    Set `type` to `"cartesian"`.

                    `cartesian` [`CartesianPlot`](https://dev.nominal.io/api/rest/job-service.md#cartesianplot)
                    :   ​

                        Fields of `CartesianPlot`

                        `timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                        :   ​

                        `xValues` array of number
                        :   ​

                        `yValues` array of number
                        :   ​

                    **bucketedCartesian**

                    Set `type` to `"bucketedCartesian"`.

                    `bucketedCartesian` [`BucketedCartesianPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedcartesianplot)
                    :   ​

                        Fields of `BucketedCartesianPlot`

                        `buckets` array of [`CartesianBucket`](https://dev.nominal.io/api/rest/job-service.md#cartesianbucket)
                        :   ​

                            Fields of `CartesianBucket`

                            `minX` number
                            :   ​

                            `maxX` number
                            :   ​

                            `minY` number
                            :   ​

                            `maxY` number
                            :   ​

                            `minTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `maxTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `count` integer (int64)
                            :   ​

                    **bucketedCartesian3d**

                    Set `type` to `"bucketedCartesian3d"`.

                    `bucketedCartesian3d` [`BucketedCartesian3dPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedcartesian3dplot)
                    :   ​

                        Fields of `BucketedCartesian3dPlot`

                        `buckets` array of [`Cartesian3dBucket`](https://dev.nominal.io/api/rest/job-service.md#cartesian3dbucket)
                        :   ​

                            Fields of `Cartesian3dBucket`

                            `minX` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `maxX` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `meanX` number
                            :   ​

                            `minY` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `maxY` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `meanY` number
                            :   ​

                            `minZ` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `maxZ` number deprecated
                            :   **Deprecated:** Switching to point-based min/maxes

                            `meanZ` number
                            :   ​

                            `minXPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                                Fields of `Point3d`

                                `x` number
                                :   ​

                                `y` number
                                :   ​

                                `z` number
                                :   ​

                                `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                                :   ​

                            `maxXPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `minYPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `maxYPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `minZPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `maxZPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d)
                            :   ​

                            `minTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `maxTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `count` integer (int64)
                            :   ​

                    **frequencyDomain**

                    Set `type` to `"frequencyDomain"`.

                    `frequencyDomain` [`FrequencyDomainPlot`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplot)
                    :   ​

                        Fields of `FrequencyDomainPlot`

                        `frequencies` array of number
                        :   ​

                        `amplitudes` array of number
                        :   ​

                    **frequencyDomainV2**

                    Set `type` to `"frequencyDomainV2"`.

                    `frequencyDomainV2` [`FrequencyDomainPlotV2`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplotv2)
                    :   ​

                        **real**

                        Set `type` to `"real"`.

                        `real` [`FrequencyDomainPlot`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplot)
                        :   ​

                        **complex**

                        Set `type` to `"complex"`.

                        `complex` [`FrequencyDomainPlotComplex`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplotcomplex)
                        :   ​

                            Fields of `FrequencyDomainPlotComplex`

                            `frequencies` array of number
                            :   ​

                            `real` array of number
                            :   ​

                            `imaginary` array of number
                            :   ​

                        **magnitudeAndPhase**

                        Set `type` to `"magnitudeAndPhase"`.

                        `magnitudeAndPhase` [`FrequencyDomainPlotMagnitudeAndPhase`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplotmagnitudeandphase)
                        :   ​

                            Fields of `FrequencyDomainPlotMagnitudeAndPhase`

                            `frequencies` array of number
                            :   ​

                            `magnitudes` array of number
                            :   ​

                            `phases` array of number
                            :   ​

                    **spectrogram**

                    Set `type` to `"spectrogram"`.

                    `spectrogram` [`SpectrogramPlot`](https://dev.nominal.io/api/rest/job-service.md#spectrogramplot)
                    :   ​

                        Fields of `SpectrogramPlot`

                        `frequencyCenters` array of number
                        :   Center frequency in Hz of each column.

                        `frequencyEdges` array of number
                        :   Column boundaries in Hz, one more than `frequencyCenters`: column `c` spans `frequencyEdges[c]` to `frequencyEdges[c + 1]`. Columns may differ in width.

                        `rows` array of [`SpectrogramRow`](https://dev.nominal.io/api/rest/job-service.md#spectrogramrow)
                        :   ​

                            Fields of `SpectrogramRow`

                            `start` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   Start of the time span this row covers.

                            `end` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   End of the time span this row covers.

                            `values` array of number
                            :   One value per column

                    **bucketedFrequencyDomain**

                    Set `type` to `"bucketedFrequencyDomain"`.

                    `bucketedFrequencyDomain` [`BucketedFrequencyDomainPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedfrequencydomainplot)
                    :   ​

                        Fields of `BucketedFrequencyDomainPlot`

                        `buckets` array of [`FrequencyBucket`](https://dev.nominal.io/api/rest/job-service.md#frequencybucket)
                        :   ​

                            Fields of `FrequencyBucket`

                            `frequencyStart` number
                            :   The start frequency of this bucket (inclusive).

                            `frequencyEnd` number
                            :   The end frequency of this bucket (exclusive).

                            `frequencyCenter` number
                            :   The center frequency of this bucket.

                            `minAmplitude` number
                            :   The minimum amplitude value in this bucket.

                            `maxAmplitude` number
                            :   The maximum amplitude value in this bucket.

                            `meanAmplitude` number
                            :   The mean amplitude value in this bucket.

                            `count` integer (int64)
                            :   The number of original frequency points that were aggregated into this bucket.

                            `firstPoint` [`FrequencyPoint`](https://dev.nominal.io/api/rest/job-service.md#frequencypoint)
                            :   The first point (lowest frequency) in this bucket.

                                Fields of `FrequencyPoint`

                                `frequency` number
                                :   ​

                                `amplitude` number
                                :   ​

                            `lastPoint` [`FrequencyPoint`](https://dev.nominal.io/api/rest/job-service.md#frequencypoint)
                            :   The last point (highest frequency) in this bucket. Will be empty if the bucket only has a single point.

                    **numericHistogram**

                    Set `type` to `"numericHistogram"`.

                    `numericHistogram` [`NumericHistogramPlot`](https://dev.nominal.io/api/rest/job-service.md#numerichistogramplot)
                    :   ​

                        Fields of `NumericHistogramPlot`

                        `buckets` array of [`NumericHistogramBucket`](https://dev.nominal.io/api/rest/job-service.md#numerichistogrambucket)
                        :   ​

                            Fields of `NumericHistogramBucket`

                            `lowerBound` number
                            :   The lower bound of the bucket, inclusive

                            `upperBound` number
                            :   The upper bound of the bucket, exclusive

                            `countsByChannel` map of `VariableName` to [`HistogramChannelCount`](https://dev.nominal.io/api/rest/job-service.md#histogramchannelcount)
                            :   ​

                                Fields of `HistogramChannelCount`

                                `count` integer (int64)
                                :   ​

                            `buckets` map of `VariableName` to [`HistogramChannelCount`](https://dev.nominal.io/api/rest/job-service.md#histogramchannelcount) deprecated
                            :   **Deprecated:** Use countsByChannel instead

                    **enumHistogram**

                    Set `type` to `"enumHistogram"`.

                    `enumHistogram` [`EnumHistogramPlot`](https://dev.nominal.io/api/rest/job-service.md#enumhistogramplot)
                    :   ​

                        Fields of `EnumHistogramPlot`

                        `buckets` array of [`EnumHistogramBucket`](https://dev.nominal.io/api/rest/job-service.md#enumhistogrambucket)
                        :   ​

                            Fields of `EnumHistogramBucket`

                            `value` string
                            :   The value of the enum as a string

                            `countsByChannel` map of `VariableName` to [`HistogramChannelCount`](https://dev.nominal.io/api/rest/job-service.md#histogramchannelcount)
                            :   ​

                    **curveFit**

                    Set `type` to `"curveFit"`.

                    `curveFit` [`CurveFitResult`](https://dev.nominal.io/api/rest/job-service.md#curvefitresult)
                    :   Deprecated: use `curveFitV2` (CurveFitResultV2) instead. Returned only for deprecated CurveFit requests.

                        Fields of `CurveFitResult`

                        `r2` number
                        :   R^2 (coefficient of determination) for the fit curve, a normalized measure of how well the curve fits the data. Usually ranges from 0 to 1, with higher indicating better fit (points closer to fit line).

                        `mae` number
                        :   Mean Absolute Error (MAE) - the average of the absolute differences between predicted and actual values. Measured in the same units as the y-values.

                        `mse` number
                        :   Mean Squared Error (MSE) - the average of the squared differences between predicted and actual values. Measured in the squared units of the y-values.

                        `rmse` number
                        :   Root Mean Squared Error (RMSE) - the square root of the mean squared error. Measured in the same units as the y-values.

                        `maxAbsoluteError` number
                        :   Maximum Absolute Error - the largest absolute difference between any predicted and actual value. Measured in the same units as the y-values.

                        `sampleCount` integer
                        :   The number of data points used in the curve fitting calculation.

                        `curveResultDetails` [`CurveResultDetails`](https://dev.nominal.io/api/rest/job-service.md#curveresultdetails)
                        :   Description of the fit curve.

                            **exponential**

                            Set `type` to `"exponential"`.

                            `exponential` [`ExponentialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#exponentialresultdetails)
                            :   ​

                                Fields of `ExponentialResultDetails`

                                `a` number
                                :   ​

                                `b` number
                                :   ​

                            **logarithmic**

                            Set `type` to `"logarithmic"`.

                            `logarithmic` [`LogarithmicResultDetails`](https://dev.nominal.io/api/rest/job-service.md#logarithmicresultdetails)
                            :   ​

                                Fields of `LogarithmicResultDetails`

                                `a` number
                                :   ​

                                `b` number
                                :   ​

                            **polynomial**

                            Set `type` to `"polynomial"`.

                            `polynomial` [`PolynomialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#polynomialresultdetails)
                            :   ​

                                Fields of `PolynomialResultDetails`

                                `a` array of number
                                :   ​

                            **power**

                            Set `type` to `"power"`.

                            `power` [`PowerResultDetails`](https://dev.nominal.io/api/rest/job-service.md#powerresultdetails)
                            :   ​

                                Fields of `PowerResultDetails`

                                `a` number
                                :   ​

                                `b` number
                                :   ​

                    **curveFitV2**

                    Set `type` to `"curveFitV2"`.

                    `curveFitV2` [`CurveFitResultV2`](https://dev.nominal.io/api/rest/job-service.md#curvefitresultv2)
                    :   ​

                        Fields of `CurveFitResultV2`

                        `r2` number
                        :   R^2 (coefficient of determination) for the fit curve, a normalized measure of how well the curve fits the data. Usually ranges from 0 to 1, with higher indicating better fit (points closer to fit line).

                        `mae` number
                        :   Mean Absolute Error (MAE) - the average of the absolute differences between predicted and actual values. Measured in the same units as the y-values.

                        `mse` number
                        :   Mean Squared Error (MSE) - the average of the squared differences between predicted and actual values. Measured in the squared units of the y-values.

                        `rmse` number
                        :   Root Mean Squared Error (RMSE) - the square root of the mean squared error. Measured in the same units as the y-values.

                        `maxAbsoluteError` number
                        :   Maximum Absolute Error - the largest absolute difference between any predicted and actual value. Measured in the same units as the y-values.

                        `sampleCount` integer
                        :   The number of data points used in the curve fitting calculation.

                        `curveResultDetails` [`CurveResultDetailsV2`](https://dev.nominal.io/api/rest/job-service.md#curveresultdetailsv2)
                        :   Description of the fit curve.

                            **exponential**

                            Set `type` to `"exponential"`.

                            `exponential` [`ExponentialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#exponentialresultdetails)
                            :   ​

                            **logarithmic**

                            Set `type` to `"logarithmic"`.

                            `logarithmic` [`LogarithmicResultDetails`](https://dev.nominal.io/api/rest/job-service.md#logarithmicresultdetails)
                            :   ​

                            **polynomial**

                            Set `type` to `"polynomial"`.

                            `polynomial` [`PolynomialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#polynomialresultdetails)
                            :   ​

                            **power**

                            Set `type` to `"power"`.

                            `power` [`PowerResultDetails`](https://dev.nominal.io/api/rest/job-service.md#powerresultdetails)
                            :   ​

                            **custom**

                            Set `type` to `"custom"`.

                            `custom` [`CustomCurveResultDetails`](https://dev.nominal.io/api/rest/job-service.md#customcurveresultdetails)
                            :   ​

                                Fields of `CustomCurveResultDetails`

                                `parameters` map of string to number
                                :   Optimized parameter values produced by the curve fit. Keys match the parameter names provided in the request.

                                `converged` boolean
                                :   Whether the optimizer converged to a solution within its iteration limit. When false, the returned parameters are the best estimate found before the iteration cap was reached and did not satisfy the solver’s convergence tolerances.

                                `iterations` integer
                                :   Number of iterations the solver completed.

                    **grouped**

                    Set `type` to `"grouped"`.

                    `grouped` [`GroupedComputeNodeResponses`](https://dev.nominal.io/api/rest/job-service.md#groupedcomputenoderesponses)
                    :   ​

                        Fields of `GroupedComputeNodeResponses`

                        `responses` array of [`GroupedComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#groupedcomputenoderesponse)
                        :   ​

                            Fields of `GroupedComputeNodeResponse`

                            `grouping` [`Grouping`](https://dev.nominal.io/api/rest/job-service.md#grouping)
                            :   ​

                                **tagsWithValues**

                                Set `type` to `"tagsWithValues"`.

                                `tagsWithValues` map of string to string
                                :   A grouping identified by a specific instantiation of tag keys and values.

                            `response` [`ComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#computenoderesponse)
                            :   ​

                    **array**

                    Set `type` to `"array"`.

                    `array` [`ArrowArrayPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowarrayplot)
                    :   ​

                        **bucketedNumeric**

                        Set `type` to `"bucketedNumeric"`.

                        `bucketedNumeric` [`BucketedNumericArrayPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketednumericarrayplot)
                        :   ​

                            Fields of `BucketedNumericArrayPlot`

                            `arrowBinary` string (base64)
                            :   The raw binary containing Arrow IPC stream for a bucketed N-dimensional numeric array plot.

                            `groupByKeys` array of string
                            :   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

                        **bucketedEnum**

                        Set `type` to `"bucketedEnum"`.

                        `bucketedEnum` [`BucketedEnumArrayPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedenumarrayplot)
                        :   ​

                            Fields of `BucketedEnumArrayPlot`

                            `arrowBinary` string (base64)
                            :   The raw binary containing Arrow IPC stream for a bucketed N-dimensional enum array plot.

                            `groupByKeys` array of string
                            :   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

                    **bucketedStruct**

                    Set `type` to `"bucketedStruct"`.

                    `bucketedStruct` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **arrowStruct**

                    Set `type` to `"arrowStruct"`.

                    `arrowStruct` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **fullResolution**

                    Set `type` to `"fullResolution"`.

                    `fullResolution` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **arrowBucketedMultivariate**

                    Set `type` to `"arrowBucketedMultivariate"`.

                    `arrowBucketedMultivariate` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
                    :   ​

                    **multivariate**

                    Set `type` to `"multivariate"`.

                    `multivariate` [`BucketedMultivariatePlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedmultivariateplot)
                    :   ​

                        Fields of `BucketedMultivariatePlot`

                        `buckets` array of [`MultivariateBucket`](https://dev.nominal.io/api/rest/job-service.md#multivariatebucket)
                        :   ​

                            Fields of `MultivariateBucket`

                            `timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
                            :   ​

                            `values` array of [`Value`](https://dev.nominal.io/api/rest/job-service.md#value)
                            :   Values for each input series in the bucket.

                        `groupByKeys` array of string
                        :   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

                `executionEndTime` string (date-time)
                :   ​

            **udfCompilationJobResult**

            Set `type` to `"udfCompilationJobResult"`.

            `udfCompilationJobResult` [`UdfCompilationJobResult`](https://dev.nominal.io/api/rest/job-service.md#udfcompilationjobresult)
            :   ​

                Fields of `UdfCompilationJobResult`

                `artifactHandle` [`S3Handle`](https://dev.nominal.io/api/rest/job-service.md#s3handle)
                :   ​

                    Fields of `S3Handle`

                    `bucket` string
                    :   ​

                    `key` string
                    :   ​

                `manifestHandle` [`S3Handle`](https://dev.nominal.io/api/rest/job-service.md#s3handle)
                :   ​

                `compileKey` string
                :   ​

        `executionStartTime` string (date-time)
        :   ​

        `executionEndTime` string (date-time)
        :   ​

    **failed**

    Set `type` to `"failed"`.

    `failed` [`Failed`](https://dev.nominal.io/api/rest/job-service.md#failed)
    :   ​

        Fields of `Failed`

        `failureMessage` string
        :   ​

        `executionStartTime` string (date-time)
        :   ​

        `executionEndTime` string (date-time)
        :   ​

    **cancelled**

    Set `type` to `"cancelled"`.

    `cancelled` [`Cancelled`](https://dev.nominal.io/api/rest/job-service.md#cancelled)
    :   ​

        Fields of `Cancelled`

        `executionStartTime` string (date-time)
        :   ​

        `executionEndTime` string (date-time)
        :   ​

`jobRid` string (RID)
:   ​

`submittedAt` string (date-time)
:   ​

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/jobs/v1/<job rid>/cancel" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/jobs/v1/<job rid>/cancel",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/jobs/v1/<job rid>/cancel",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
```

**aiohttp**

```python
import asyncio

import aiohttp

async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/jobs/v1/<job rid>/cancel",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "jobStatus": {
    "type": "inProgress",
    "inProgress": {}
  },
  "jobRid": "<job rid>",
  "submittedAt": "2026-01-01T00:00:00Z"
}
```

## Errors

[Errors](https://dev.nominal.io/api/legacy.md#errors) shows how these errors are sent.

Each error’s `errorName` is `JobService:` followed by its name below.

| Status | Name | Notes |
| --- | --- | --- |
| 404 | `JobNotFound` |  |

## Types

### ArrowArrayPlot

Set `type` to the name of one of the other fields, and set only that field.

`bucketedNumeric` [`BucketedNumericArrayPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketednumericarrayplot)
:   ​

`bucketedEnum` [`BucketedEnumArrayPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedenumarrayplot)
:   ​

### ArrowPlot

A generic Arrow IPC plot response. Used for all Arrow-serialized plot types (numeric, bucketed numeric, enum, bucketed enum, struct, bucketed struct, full resolution, and bucketed multivariate).

`arrowBinary` string (base64) required
:   The raw binary containing an Arrow IPC stream.

`groupByKeys` array of string
:   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

`nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
:   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

### BucketedCartesian3dPlot

`buckets` array of [`Cartesian3dBucket`](https://dev.nominal.io/api/rest/job-service.md#cartesian3dbucket)
:   ​

### BucketedCartesianPlot

`buckets` array of [`CartesianBucket`](https://dev.nominal.io/api/rest/job-service.md#cartesianbucket)
:   ​

### BucketedEnumArrayPlot

The array is flattened out into a an arrow stream of bucketed primitive results, with an extra column to indicate the index of the array that the bucket corresponds to.

`arrowBinary` string (base64) required
:   The raw binary containing Arrow IPC stream for a bucketed N-dimensional enum array plot.

`groupByKeys` array of string
:   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

### BucketedEnumPlot

`timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
:   The end of the bucket, exclusive.

`buckets` array of [`EnumBucket`](https://dev.nominal.io/api/rest/job-service.md#enumbucket)
:   ​

`categories` array of string
:   ​

### BucketedFrequencyDomainPlot

A bucketed/decimated frequency domain plot where multiple frequency bins have been aggregated.

`buckets` array of [`FrequencyBucket`](https://dev.nominal.io/api/rest/job-service.md#frequencybucket)
:   ​

### BucketedMultivariatePlot

`buckets` array of [`MultivariateBucket`](https://dev.nominal.io/api/rest/job-service.md#multivariatebucket)
:   ​

`groupByKeys` array of string
:   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

### BucketedNumericArrayPlot

The array is flattened out into a an arrow stream of bucketed primitive results, with an extra column to indicate the index of the array that the bucket corresponds to.

`arrowBinary` string (base64) required
:   The raw binary containing Arrow IPC stream for a bucketed N-dimensional numeric array plot.

`groupByKeys` array of string
:   This field specifies the tags that the final output is grouped by. When you combine multiple channels, this list represents the superset of all group by keys used across every individual channel.

### BucketedNumericPlot

`timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
:   The end of the bucket, exclusive.

`buckets` array of [`NumericBucket`](https://dev.nominal.io/api/rest/job-service.md#numericbucket)
:   ​

### Cancelled

The job was cancelled by an explicit `cancelJob` request. Distinct from `Failed`: cancellation is a user-initiated terminal state, not an error. `executionStartTime` is absent if the job was cancelled before it began executing.

`executionStartTime` string (date-time)
:   ​

`executionEndTime` string (date-time) required
:   ​

### Cartesian3dBucket

`minX` number deprecated
:   **Deprecated:** Switching to point-based min/maxes

`maxX` number deprecated
:   **Deprecated:** Switching to point-based min/maxes

`meanX` number required
:   ​

`minY` number deprecated
:   **Deprecated:** Switching to point-based min/maxes

`maxY` number deprecated
:   **Deprecated:** Switching to point-based min/maxes

`meanY` number required
:   ​

`minZ` number deprecated
:   **Deprecated:** Switching to point-based min/maxes

`maxZ` number deprecated
:   **Deprecated:** Switching to point-based min/maxes

`meanZ` number required
:   ​

`minXPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d) required
:   ​

`maxXPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d) required
:   ​

`minYPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d) required
:   ​

`maxYPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d) required
:   ​

`minZPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d) required
:   ​

`maxZPoint` [`Point3d`](https://dev.nominal.io/api/rest/job-service.md#point3d) required
:   ​

`minTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`maxTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`count` integer (int64) required
:   ​

### CartesianBucket

`minX` number required
:   ​

`maxX` number required
:   ​

`minY` number required
:   ​

`maxY` number required
:   ​

`minTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`maxTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`count` integer (int64) required
:   ​

### CartesianPlot

`timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
:   ​

`xValues` array of number
:   ​

`yValues` array of number
:   ​

### CheckJobResult

`status` [`Status`](https://dev.nominal.io/api/rest/job-service.md#status) required
:   ​

`failures` array of [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
:   ​

`areFailuresDecimated` boolean required
:   ​

### CompactEnumPoint

`timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`value` integer required
:   ​

### Completed

`result` [`JobResult`](https://dev.nominal.io/api/rest/job-service.md#jobresult)
:   Absent if the job’s result payload is no longer available. The job still completed successfully.

`executionStartTime` string (date-time) required
:   ​

`executionEndTime` string (date-time) required
:   ​

### ComputeJobResult

The result of a compute job.

`response` [`ComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#computenoderesponse) required
:   ​

`executionEndTime` string (date-time) required
:   ​

### ComputeNodeResponse

Set `type` to the name of one of the other fields, and set only that field.

`range` array of [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
:   ​

`rangesSummary` [`RangesSummary`](https://dev.nominal.io/api/rest/job-service.md#rangessummary)
:   ​

`rangeValue` [`Range`](https://dev.nominal.io/api/rest/job-service.md#range)
:   ​

`numeric` [`NumericPlot`](https://dev.nominal.io/api/rest/job-service.md#numericplot)
:   ​

`bucketedNumeric` [`BucketedNumericPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketednumericplot)
:   ​

`numericPoint` [`NumericPoint`](https://dev.nominal.io/api/rest/job-service.md#numericpoint)
:   ​

`singlePoint` [`SinglePoint`](https://dev.nominal.io/api/rest/job-service.md#singlepoint)
:   ​

`arrowNumeric` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
:   ​

`arrowBucketedNumeric` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
:   ​

`enum` [`EnumPlot`](https://dev.nominal.io/api/rest/job-service.md#enumplot)
:   ​

`enumPoint` [`EnumPoint`](https://dev.nominal.io/api/rest/job-service.md#enumpoint)
:   ​

`bucketedEnum` [`BucketedEnumPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedenumplot)
:   ​

`arrowEnum` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
:   ​

`arrowBucketedEnum` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
:   ​

`pagedLog` [`PagedLogPlot`](https://dev.nominal.io/api/rest/job-service.md#pagedlogplot)
:   ​

`logPoint` [`LogPoint`](https://dev.nominal.io/api/rest/job-service.md#logpoint)
:   ​

`arrowLog` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
:   ​

`cartesian` [`CartesianPlot`](https://dev.nominal.io/api/rest/job-service.md#cartesianplot)
:   ​

`bucketedCartesian` [`BucketedCartesianPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedcartesianplot)
:   ​

`bucketedCartesian3d` [`BucketedCartesian3dPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedcartesian3dplot)
:   ​

`frequencyDomain` [`FrequencyDomainPlot`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplot)
:   ​

`frequencyDomainV2` [`FrequencyDomainPlotV2`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplotv2)
:   ​

`spectrogram` [`SpectrogramPlot`](https://dev.nominal.io/api/rest/job-service.md#spectrogramplot)
:   ​

`bucketedFrequencyDomain` [`BucketedFrequencyDomainPlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedfrequencydomainplot)
:   ​

`numericHistogram` [`NumericHistogramPlot`](https://dev.nominal.io/api/rest/job-service.md#numerichistogramplot)
:   ​

`enumHistogram` [`EnumHistogramPlot`](https://dev.nominal.io/api/rest/job-service.md#enumhistogramplot)
:   ​

`curveFit` [`CurveFitResult`](https://dev.nominal.io/api/rest/job-service.md#curvefitresult)
:   Deprecated: use `curveFitV2` (CurveFitResultV2) instead. Returned only for deprecated CurveFit requests.

`curveFitV2` [`CurveFitResultV2`](https://dev.nominal.io/api/rest/job-service.md#curvefitresultv2)
:   ​

`grouped` [`GroupedComputeNodeResponses`](https://dev.nominal.io/api/rest/job-service.md#groupedcomputenoderesponses)
:   ​

`array` [`ArrowArrayPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowarrayplot)
:   ​

`bucketedStruct` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
:   ​

`arrowStruct` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
:   ​

`fullResolution` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
:   ​

`arrowBucketedMultivariate` [`ArrowPlot`](https://dev.nominal.io/api/rest/job-service.md#arrowplot)
:   ​

`multivariate` [`BucketedMultivariatePlot`](https://dev.nominal.io/api/rest/job-service.md#bucketedmultivariateplot)
:   ​

### CurveFitResult

`r2` number required
:   R^2 (coefficient of determination) for the fit curve, a normalized measure of how well the curve fits the data. Usually ranges from 0 to 1, with higher indicating better fit (points closer to fit line).

`mae` number required
:   Mean Absolute Error (MAE) - the average of the absolute differences between predicted and actual values. Measured in the same units as the y-values.

`mse` number required
:   Mean Squared Error (MSE) - the average of the squared differences between predicted and actual values. Measured in the squared units of the y-values.

`rmse` number required
:   Root Mean Squared Error (RMSE) - the square root of the mean squared error. Measured in the same units as the y-values.

`maxAbsoluteError` number required
:   Maximum Absolute Error - the largest absolute difference between any predicted and actual value. Measured in the same units as the y-values.

`sampleCount` integer required
:   The number of data points used in the curve fitting calculation.

`curveResultDetails` [`CurveResultDetails`](https://dev.nominal.io/api/rest/job-service.md#curveresultdetails) required
:   Description of the fit curve.

### CurveFitResultV2

`r2` number required
:   R^2 (coefficient of determination) for the fit curve, a normalized measure of how well the curve fits the data. Usually ranges from 0 to 1, with higher indicating better fit (points closer to fit line).

`mae` number required
:   Mean Absolute Error (MAE) - the average of the absolute differences between predicted and actual values. Measured in the same units as the y-values.

`mse` number required
:   Mean Squared Error (MSE) - the average of the squared differences between predicted and actual values. Measured in the squared units of the y-values.

`rmse` number required
:   Root Mean Squared Error (RMSE) - the square root of the mean squared error. Measured in the same units as the y-values.

`maxAbsoluteError` number required
:   Maximum Absolute Error - the largest absolute difference between any predicted and actual value. Measured in the same units as the y-values.

`sampleCount` integer required
:   The number of data points used in the curve fitting calculation.

`curveResultDetails` [`CurveResultDetailsV2`](https://dev.nominal.io/api/rest/job-service.md#curveresultdetailsv2) required
:   Description of the fit curve.

### CurveResultDetails

Set `type` to the name of one of the other fields, and set only that field.

`exponential` [`ExponentialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#exponentialresultdetails)
:   ​

`logarithmic` [`LogarithmicResultDetails`](https://dev.nominal.io/api/rest/job-service.md#logarithmicresultdetails)
:   ​

`polynomial` [`PolynomialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#polynomialresultdetails)
:   ​

`power` [`PowerResultDetails`](https://dev.nominal.io/api/rest/job-service.md#powerresultdetails)
:   ​

### CurveResultDetailsV2

Set `type` to the name of one of the other fields, and set only that field.

`exponential` [`ExponentialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#exponentialresultdetails)
:   ​

`logarithmic` [`LogarithmicResultDetails`](https://dev.nominal.io/api/rest/job-service.md#logarithmicresultdetails)
:   ​

`polynomial` [`PolynomialResultDetails`](https://dev.nominal.io/api/rest/job-service.md#polynomialresultdetails)
:   ​

`power` [`PowerResultDetails`](https://dev.nominal.io/api/rest/job-service.md#powerresultdetails)
:   ​

`custom` [`CustomCurveResultDetails`](https://dev.nominal.io/api/rest/job-service.md#customcurveresultdetails)
:   ​

### CustomCurveResultDetails

The result of fitting a custom curve, containing the optimized values for each named parameter.

`parameters` map of string to number
:   Optimized parameter values produced by the curve fit. Keys match the parameter names provided in the request.

`converged` boolean required
:   Whether the optimizer converged to a solution within its iteration limit. When false, the returned parameters are the best estimate found before the iteration cap was reached and did not satisfy the solver’s convergence tolerances.

`iterations` integer required
:   Number of iterations the solver completed.

### Empty

An empty JSON object, `{}`.

### EnumBucket

`histogram` map of string to integer (int64)
:   The map of values within the bucket to their frequency.

`firstPoint` [`CompactEnumPoint`](https://dev.nominal.io/api/rest/job-service.md#compactenumpoint) required
:   ​

`lastPoint` [`CompactEnumPoint`](https://dev.nominal.io/api/rest/job-service.md#compactenumpoint)
:   Will be empty if the bucket only has a single point.

### EnumHistogramBucket

A bucket in an enum histogram representing all the counts for a specific enumerated value, across all input series.

`value` string required
:   The value of the enum as a string

`countsByChannel` map of `VariableName` to [`HistogramChannelCount`](https://dev.nominal.io/api/rest/job-service.md#histogramchannelcount)
:   ​

### EnumHistogramPlot

`buckets` array of [`EnumHistogramBucket`](https://dev.nominal.io/api/rest/job-service.md#enumhistogrambucket)
:   ​

### EnumPlot

`timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
:   ​

`values` array of integer
:   ​

`categories` array of string
:   ​

`nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
:   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

### EnumPoint

`timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`value` string required
:   ​

### ExponentialResultDetails

y = a * e^(b * x)

`a` number required
:   ​

`b` number required
:   ​

### Failed

`failureMessage` string
:   ​

`executionStartTime` string (date-time)
:   ​

`executionEndTime` string (date-time) required
:   ​

### FrequencyBucket

A single bucket in a bucketed frequency domain plot.

`frequencyStart` number required
:   The start frequency of this bucket (inclusive).

`frequencyEnd` number required
:   The end frequency of this bucket (exclusive).

`frequencyCenter` number required
:   The center frequency of this bucket.

`minAmplitude` number required
:   The minimum amplitude value in this bucket.

`maxAmplitude` number required
:   The maximum amplitude value in this bucket.

`meanAmplitude` number required
:   The mean amplitude value in this bucket.

`count` integer (int64) required
:   The number of original frequency points that were aggregated into this bucket.

`firstPoint` [`FrequencyPoint`](https://dev.nominal.io/api/rest/job-service.md#frequencypoint) required
:   The first point (lowest frequency) in this bucket.

`lastPoint` [`FrequencyPoint`](https://dev.nominal.io/api/rest/job-service.md#frequencypoint)
:   The last point (highest frequency) in this bucket. Will be empty if the bucket only has a single point.

### FrequencyDomainPlot

`frequencies` array of number
:   ​

`amplitudes` array of number
:   ​

### FrequencyDomainPlotComplex

`frequencies` array of number
:   ​

`real` array of number
:   ​

`imaginary` array of number
:   ​

### FrequencyDomainPlotMagnitudeAndPhase

`frequencies` array of number
:   ​

`magnitudes` array of number
:   ​

`phases` array of number
:   ​

### FrequencyDomainPlotV2

Set `type` to the name of one of the other fields, and set only that field.

`real` [`FrequencyDomainPlot`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplot)
:   ​

`complex` [`FrequencyDomainPlotComplex`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplotcomplex)
:   ​

`magnitudeAndPhase` [`FrequencyDomainPlotMagnitudeAndPhase`](https://dev.nominal.io/api/rest/job-service.md#frequencydomainplotmagnitudeandphase)
:   ​

### FrequencyPoint

A single point in a frequency domain plot.

`frequency` number required
:   ​

`amplitude` number required
:   ​

### GroupedComputeNodeResponse

`grouping` [`Grouping`](https://dev.nominal.io/api/rest/job-service.md#grouping) required
:   ​

`response` [`ComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#computenoderesponse) required
:   ​

### GroupedComputeNodeResponses

Contains a `ComputeNodeResponse` for each applicable grouping along with metadata describing the grouping. All the contained `ComputeNodeResponse`s are guaranteed to be of the same type.

`responses` array of [`GroupedComputeNodeResponse`](https://dev.nominal.io/api/rest/job-service.md#groupedcomputenoderesponse)
:   ​

### Grouping

Set `type` to the name of one of the other fields, and set only that field.

`tagsWithValues` map of string to string
:   A grouping identified by a specific instantiation of tag keys and values.

### HistogramChannelCount

The count of the value in the bucket for the specific channel.

`count` integer (int64) required
:   ​

### InProgress

An empty JSON object, `{}`.

### JobReport

`jobStatus` [`JobStatus`](https://dev.nominal.io/api/rest/job-service.md#jobstatus) required
:   ​

`jobRid` string (RID) required
:   ​

`submittedAt` string (date-time) required
:   ​

### JobResult

Set `type` to the name of one of the other fields, and set only that field.

`checkJobResult` [`CheckJobResult`](https://dev.nominal.io/api/rest/job-service.md#checkjobresult)
:   ​

`computeJobResult` [`ComputeJobResult`](https://dev.nominal.io/api/rest/job-service.md#computejobresult)
:   ​

`udfCompilationJobResult` [`UdfCompilationJobResult`](https://dev.nominal.io/api/rest/job-service.md#udfcompilationjobresult)
:   ​

### JobStatus

Set `type` to the name of one of the other fields, and set only that field.

`inProgress` [`InProgress`](https://dev.nominal.io/api/rest/job-service.md#inprogress)
:   ​

`completed` [`Completed`](https://dev.nominal.io/api/rest/job-service.md#completed)
:   ​

`failed` [`Failed`](https://dev.nominal.io/api/rest/job-service.md#failed)
:   ​

`cancelled` [`Cancelled`](https://dev.nominal.io/api/rest/job-service.md#cancelled)
:   ​

### LogarithmicResultDetails

y = a * ln(x) + b

`a` number required
:   ​

`b` number required
:   ​

### LogPoint

`timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`value` [`LogValue`](https://dev.nominal.io/api/rest/job-service.md#logvalue) required
:   ​

### LogValue

`message` string required
:   ​

`args` map of string to string
:   ​

`id` string (UUID) required
:   ​

### MultivariateBucket

`timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`values` array of [`Value`](https://dev.nominal.io/api/rest/job-service.md#value)
:   Values for each input series in the bucket.

### NumericBucket

`min` number
:   ​

`max` number
:   ​

`mean` number
:   ​

`count` integer (int64)
:   ​

`variance` number
:   The population variance of the bucket. If the bucket has only one value, this will be 0.

`firstPoint` [`NumericPoint`](https://dev.nominal.io/api/rest/job-service.md#numericpoint)
:   ​

`lastPoint` [`NumericPoint`](https://dev.nominal.io/api/rest/job-service.md#numericpoint)
:   Will be empty if the bucket only has a single point.

`aggregations` map of string to number
:   Additional per-bucket aggregations that have no dedicated field above, keyed by the output column name requested via `numericAggregations` or `numericOutputFieldsV2` (e.g. `sum`, `standardDeviation`, `rootMeanSquare`, `p50`). Empty when no additional aggregations were requested.

### NumericHistogramBucket

A bucket in a numeric histogram representing a range of values, and the counts of values in that range across all input series.

`lowerBound` number required
:   The lower bound of the bucket, inclusive

`upperBound` number required
:   The upper bound of the bucket, exclusive

`countsByChannel` map of `VariableName` to [`HistogramChannelCount`](https://dev.nominal.io/api/rest/job-service.md#histogramchannelcount)
:   ​

`buckets` map of `VariableName` to [`HistogramChannelCount`](https://dev.nominal.io/api/rest/job-service.md#histogramchannelcount) deprecated
:   **Deprecated:** Use countsByChannel instead

### NumericHistogramPlot

`buckets` array of [`NumericHistogramBucket`](https://dev.nominal.io/api/rest/job-service.md#numerichistogrambucket)
:   ​

### NumericPlot

`timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
:   ​

`values` array of number
:   ​

`nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
:   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

### NumericPoint

`timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`value` number required
:   ​

### PagedLogPlot

`timestamps` array of [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
:   ​

`values` array of [`LogValue`](https://dev.nominal.io/api/rest/job-service.md#logvalue)
:   ​

`nextPageToken` [`PageToken`](https://dev.nominal.io/api/rest/job-service.md#pagetoken)
:   Continuation token for this paged result. Can only be returned if paging was requested. To retrieve the next page, repeat the same request with this value as `pageToken` and keep the pageSize sign unchanged. Returned only when this response contains exactly `abs(pageSize)` points; the next response may still be empty if this page ended exactly at the result-set boundary. Empty means this response was short and there are no further points in the requested direction.

### PageToken

Set `type` to the name of one of the other fields, and set only that field.

`timestampAndId` [`TimestampAndId`](https://dev.nominal.io/api/rest/job-service.md#timestampandid)
:   ​

### Point3d

`x` number required
:   ​

`y` number required
:   ​

`z` number required
:   ​

`timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

### PolynomialResultDetails

y = sum( a_i * x^i ) for i in 0…len(a)

`a` array of number
:   ​

### PowerResultDetails

y = a * x^b

`a` number required
:   ​

`b` number required
:   ​

### Range

The end represents the first timestamp that does not belong to the range. If absent, there is no known end to the range.

`start` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
:   ​

`end` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp)
:   ​

`value` [`RangeValue`](https://dev.nominal.io/api/rest/job-service.md#rangevalue)
:   ​

### RangeAggregation

An aggregation value representing combined aggregation metrics for data over a range.

`average` number required
:   ​

`min` number required
:   ​

`max` number required
:   ​

`standardDeviation` number required
:   ​

`count` number required
:   ​

`sum` number required
:   ​

`rootMeanSquare` number
:   ​

### RangesSummary

A summary of the ranges returned from a SummarizeRanges request. Returned when the number of ranges found is above a threshold.

`rangesSummary` array of [`RangeSummary`](https://dev.nominal.io/api/rest/job-service.md#rangesummary)
:   ​

### RangeSummary

Summary of a set of ranges

`range` [`Range`](https://dev.nominal.io/api/rest/job-service.md#range) required
:   The range representing the minimum start and maximum end times of the ranges.

`subRangeCount` integer required
:   The number of ranges found within this time range.

### RangeValue

A value attached to a range. If there are no relevant data points in the range, this will be noPointsInRange for the range; otherwise, an Aggregation will be returned if this is produced by getting multiple aggregation values over a range (i.e. aggregating for all metrics over a range), and will be a double otherwise for singular values (i.e. aggregating for just the sum of data values over a range).

Set `type` to the name of one of the other fields, and set only that field.

`double` number
:   ​

`aggregation` [`RangeAggregation`](https://dev.nominal.io/api/rest/job-service.md#rangeaggregation)
:   ​

`noPointsInRange` [`Empty`](https://dev.nominal.io/api/rest/job-service.md#empty)
:   ​

### S3Handle

`bucket` string required
:   ​

`key` string required
:   ​

### SinglePoint

Return type representing a single point value.

`timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`value` [`Value`](https://dev.nominal.io/api/rest/job-service.md#value) required
:   ​

`precisionLoss` boolean required
:   Returns true if the result required downcasting to a type with less precision, for example if the input series was Int64 and the result is a Float64.

### SpectrogramPlot

Values on a time-frequency grid. Columns are frequency buckets and rows are the time buckets that hold data, in ascending time.

`frequencyCenters` array of number
:   Center frequency in Hz of each column.

`frequencyEdges` array of number
:   Column boundaries in Hz, one more than `frequencyCenters`: column `c` spans `frequencyEdges[c]` to `frequencyEdges[c + 1]`. Columns may differ in width.

`rows` array of [`SpectrogramRow`](https://dev.nominal.io/api/rest/job-service.md#spectrogramrow)
:   ​

### SpectrogramRow

`start` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   Start of the time span this row covers.

`end` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   End of the time span this row covers.

`values` array of number
:   One value per column

### Status

`PASS`
:   ​

`FAIL`
:   ​

### Timestamp

Deprecated for new APIs. Use google.protobuf.Timestamp for absolute instants in proto APIs.

This legacy nanosecond precision timestamp type is represented by an epoch time in seconds and a nanosecond offset. The nanosecond offset is from the start of the epoch second, so must be less than 1 billion.

`seconds` integer (int64) required
:   ​

`nanos` integer (int64) required
:   ​

### TimestampAndId

`timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/job-service.md#timestamp) required
:   ​

`id` string (UUID)
:   ​

### UdfCompilationJobResult

`artifactHandle` [`S3Handle`](https://dev.nominal.io/api/rest/job-service.md#s3handle) required
:   ​

`manifestHandle` [`S3Handle`](https://dev.nominal.io/api/rest/job-service.md#s3handle) required
:   ​

`compileKey` string required
:   ​

### Value

A single value. The type is dictated by the returned variant

Set `type` to the name of one of the other fields, and set only that field.

`stringValue` string
:   ​

`float64Value` number
:   ​

`int64Value` string
:   ​

`arrayValue` array of [`Value`](https://dev.nominal.io/api/rest/job-service.md#value)
:   ​

`structValue` any JSON value
:   A JSON representation of the struct

Page design based on [Scalar](https://scalar.com), MIT License.
