---
title: "Get all impulses (incl. metrics)"
method: GET
path: "/api/{projectId}/impulses-detailed"
tags: ["Impulse"]
---

# Get all impulses (incl. metrics)

`GET /api/{projectId}/impulses-detailed`

## Request

- Base URL: `https://studio.edgeimpulse.com/v1`
- URL: `https://studio.edgeimpulse.com/v1/api/{projectId}/impulses-detailed`
- Auth: one of:
  - API key in header `x-api-key`
  - API key in cookie `jwt`
  - API key in header `x-jwt-token`
  - OAuth 2
    - Authorization code: `/v1/oauth/authorize`
    - Client credentials
    - Implicit: `/v1/oauth/authorize`
    - Password
    - Token URL: `/v1/oauth/token`
- TypeScript: <https://skmtc.dev/edgeimpulse/apis/edge-impulse-api/docs/api/:projectId/impulses-detailed/get.ts> (a function with typed inputs; its response is checked against the schema)

Retrieve all impulse for a project, including accuracy and performance metrics.

## Path parameters

- `projectId` integer, required

## Response `200`

OK

- GetAllDetailedImpulsesResponse
  - `success` boolean, required: Whether the operation succeeded
  - `error` string: Optional error description (set if 'success' was false)
  - `impulses` DetailedImpulse[], required
    - `impulse` Impulse, required
      - `id` integer, required: ID for this impulse.
      - `name` string, required: Name for this impulse.
      - `inputBlocks` ImpulseInputBlock[], required: Input Blocks that are part of this impulse
        - `id` integer, required: Identifier for this block. Make sure to up this number when creating a new block via `getNewBlockId`, and don't re-use identifiers. If the block hasn't changed, keep the ID as-is. ID must be unique across the project and greather than zero (>0).
        - `type` 'time-series' | 'image' | 'features', required
        - `name` string, required: Block name, will be used in menus
        - `title` string, required: Block title, used in the impulse UI
        - `axes` string[]: Input axes, identified by the name in the name of the axis. If not set, then all axes are selected.
        - `windowSizeMs` integer: Size of the sliding window in milliseconds
        - `windowIncreaseMs` integer: We use a sliding window to go over the raw data. How many milliseconds to increase the sliding window with for each step.
        - `frequencyHz` number: (Input only) Frequency of the input data in Hz
        - `classificationWindowIncreaseMs` integer: We use a sliding window to go over the raw data. How many milliseconds to increase the sliding window with for each step in classification mode.
        - `padZeros` boolean: Whether to zero pad data when a data item is too short
        - `labelingMethodMultiLabel` object: Determines how a single label is assigned to each generated window when source samples contain multiple labels. Available options - end-of-window: use the label active at the end timestamp of the window. - anywhere-in-window: assign one of the configured `labels` when it appears anywhere in the window. - anywhere-in-window-min-percentage: assign one of the configured `labels` only when it covers at least `minPercentage` of the full window. - majority-in-window: assign the label with the highest prevalence across the full window. Tie-breaking: - For count-based modes (anywhere-in-window, anywhere-in-window-min-percentage, and majority-in-window), if two or more candidate labels have equal prevalence, the first encountered label in the window is used.
          - `type` 'end-of-window' | 'anywhere-in-window' | 'anywhere-in-window-min-percentage' | 'majority-in-window', required
          - `labels` string[]: Required when choosing "anywhere-in-window" or "anywhere-in-window-min-percentage". The list of classes that should trigger detection (e.g. "interference").
          - `minPercentage` number: Required when choosing "anywhere-in-window-min-percentage". A label is assigned only if it is present in at least this percentage of the full window.
        - `imageWidth` integer: Width all images are resized to before training
        - `imageHeight` integer: Width all images are resized to before training
        - `resizeMode` 'squash' | 'fit-short' | 'fit-long' | 'crop': Input images are resized automatically before training and testing, to match the impulse input shape. This determines the resize mode used when the aspect ratio of the input data is different to the aspect ratio of the impulse.
        - `resizeMethod` 'lanczos3' | 'nearest': Resize method to use when resizing images
        - `cropAnchor` 'top-left' | 'top-center' | 'top-right' | 'middle-left' | 'middle-center' | 'middle-right' | 'bottom-left' | 'bottom-center' | 'bottom-right': If images are resized using a crop, choose where to anchor the crop
        - `createdBy` string: The system component that created the block version (createImpulse | clone | tuner). Cannot be set via API.
        - `createdAt` string, date-time: The datetime that the block version was created. Cannot be set via API.
        - `datasetSubset` ImpulseInputBlockDatasetSubset: Only generate features for samples where (sample_id + datasetSubsetSeed) % datasetSubset) == 0
          - `includePercentage` number, required: Number between 0 and 100, with the % of data that should be _included_
          - `seed` integer: Seed number (optional). If not specified, the seed is set to 0.
      - `dspBlocks` ImpulseDspBlock[], required: DSP Blocks that are part of this impulse
        - `id` integer, required: Identifier for this block. Make sure to up this number when creating a new block via `getNewBlockId`, and don't re-use identifiers. If the block hasn't changed, keep the ID as-is. ID must be unique across the project and greather than zero (>0).
        - `type` string, required: Block type
        - `name` string, required: Block name, will be used in menus
        - `axes` string[], required: Input axes, identified by the name in the name of the axis
        - `title` string, required: Block title, used in the impulse UI
        - `valuesPerAxis` integer: Number of features this DSP block outputs per axis. This is only set when the DSP block is configured.
        - `input` integer: The ID of the Input block a DSP block is connected to
        - `createdBy` string: The system component that created the block version (createImpulse | clone | tuner). Cannot be set via API.
        - `createdAt` string, date-time: The datetime that the block version was created. Cannot be set via API.
        - `implementationVersion` integer, required: Implementation version of the block
        - `organization` object
          - `id` integer, required
          - `dspId` integer, required
        - `customUrl` string: Required for type 'custom'
        - `namedAxes` object[]: Named axes for the block
          - `name` string, required: Name of the axis
          - `description` string: Description of the axis
          - `required` boolean: Whether the axis is required
          - `selectedAxis` string: The selected axis for the block
      - `learnBlocks` ImpulseLearnBlock[], required: Learning Blocks that are part of this impulse
        - `id` integer, required: Identifier for this block. Make sure to up this number when creating a new block via `getNewBlockId`, and don't re-use identifiers. If the block hasn't changed, keep the ID as-is. ID must be unique across the project and greather than zero (>0).
        - `type` 'anomaly' | 'anomaly-gmm' | 'keras' | 'keras-transfer-image' | 'keras-transfer-kws' | 'keras-object-detection' | 'keras-regression' | 'keras-akida' | 'keras-akida-transfer-image' | 'keras-akida-object-detection' | 'keras-visual-anomaly' | 'keras-freeform' | 'keras-self-contained-freeform' | 'keras-anomaly' | 'vlm', required: The type of learning block (anomaly, keras, keras-transfer-image, ...). Each behaves differently.
        - `name` string, required: Block name, will be used in menus. If a block has a baseBlockId, this field is ignored and the base block's name is used instead.
        - `dsp` integer[], required: DSP dependencies, identified by DSP block ID
        - `title` string, required: Block title, used in the impulse UI
        - `createdBy` string: The system component that created the block version (createImpulse | clone | tuner). Cannot be set via API.
        - `createdAt` string, date-time: The datetime that the block version was created. Cannot be set via API.
        - `trainingProcessor` 'cpu' | 'gpu': Training processor selection for an impulse.
      - `postProcessingBlocks` ImpulsePostProcessingBlock[], required: Post-processing blocks that are part of this impulse
        - `id` integer, required: Identifier for this block. Make sure to up this number when creating a new block via `getNewBlockId`, and don't re-use identifiers. If the block hasn't changed, keep the ID as-is. ID must be unique across the project and greather than zero (>0).
        - `type` 'object-tracking' | 'sort-object-tracking', required
        - `name` string, required: Block name, will be used in menus
        - `title` string, required: Block title, used in the impulse UI
        - `createdBy` string: The system component that created the block version (createImpulse | clone | tuner). Cannot be set via API.
        - `createdAt` string, date-time: The datetime that the block version was created. Cannot be set via API.
        - `implementationVersion` integer, required: Implementation version of the block
      - `type` 'default' | 'BYOM' | 'VLM' | 'no_training_data', required: Specifies the type of impulse. Options include: - default: Standard Edge Impulse pipeline. - BYOM: Impulse that includes a pretrained model. - VLM: Impulse created as part of a Vision Learning Model (VLM) workflow. - no_training_data: Model that trains without providing training data (e.g. model trained in simulation without external inputs)
      - `datasetVersionId` integer: EXPERIMENTAL. The dataset snapshot used in the impulse. Feature generation, model training, and deployment from this impulse will always use that snapshot, ensuring reproducible results. This property is experimental, is only supported when the dataset versioning experiment is enabled, and may change in the future.
    - `metrics` DetailedImpulseMetric[], required
      - `name` string, required
      - `type` 'core' | 'additional', required
      - `filteringType` DetailedImpulseMetricFilteringType
        - `type` 'numeric' | 'string' | 'select' | 'boolean' | 'list', required
        - `options` string[], required
      - `category` 'impulseMetrics' | 'inputBlockConfig' | 'dspBlockConfig' | 'learnBlockConfig' | 'learnBlockMetrics' | 'postProcessingBlockConfig', required
      - `description` string, required
      - `value` union, required
        - string
        - boolean
      - `title` string
      - `valueForSorting` integer
      - `valueHint` string: Additional help explaining the value for this metric
    - `dspBlockConfigs` object[], required
      - `blockId` integer, required
      - `config` DSPConfig, required
        - `dsp` DSPInfo, required
          - `id` integer, required
          - `name` string, required
          - `windowLength` integer, required
          - `type` string, required
          - `classes` string[], required
          - `classesPerKey` object: Per-key class info for DSP blocks operating on label map datasets
          - `features` object, required
            - `generated` boolean, required: Whether this block has generated features
            - `count` integer: Number of generated features
            - `labels` string[]: Names of the features
            - `classes` string[]: Classes that the features were generated on
          - `expectedWindowCount` integer, required: Expected number of windows that would be generated
          - `inputAxes` string[], required: Axes that this block depends on.
          - `performance` DspPerformance
            - `latency` integer, required
            - `ram` integer, required
            - `customDspString` string: If the project latencyDevice has custom DSP hardware, this value contains a device specific latency metric (eg. cycles)
          - `canCalculateFeatureImportance` boolean, required
          - `calculateFeatureImportance` boolean, required
          - `canNormalizeData` boolean, required: Whether this DSP block supports data normalization after features were generated. This is true unless "dontAllowDataNormalization" is set to true in the DSP block's parameters.json.
          - `normalizeData` 'none' | 'normalize-channel-standard-scaler', required
          - `hasAutoTune` boolean: Whether this type of DSP block supports autotuning.
          - `minimumVersionForAutotune` number: For DSP blocks that support autotuning, this value specifies the minimum block implementation version for which autotuning is supported.
          - `hasAutotunerResults` boolean: Whether autotune results exist for this DSP block.
          - `usesState` boolean: Whether this DSP block uses state.
        - `config` DSPGroup[]
          - `group` string, required
          - `items` DSPGroupItem[], required
            - `name` string, required
            - `value` string
            - `defaultValue` string, required
            - `type` string, required
            - `help` string
            - `param` string, required
            - `selectOptions` object[]
              - …
            - `readonly` boolean, required
            - `shouldShow` boolean, required
            - `showIf` object
              - …
            - `invalidText` string
            - `section` 'advanced' | 'augmentation' | 'modelProfiling': Interface section to render parameter in.
            - `multiline` boolean: Only valid for type "string". Will render a multiline text area.
            - `required` boolean, required
            - `hint` string: If set, shows a hint below the input.
            - `placeholder` string: Sets the placeholder text on the input element (for types "string", "int", "float" and "secret")
            - `showClickToSet` boolean, required: If enabled, render a disabled input element with 'Click to set'
            - `valid` object[]: Valid values for parameter.
              - …
            - `items` object: Recursive definition for items of a parameter with type 'array'.
            - `properties` object: Recursive definition for a parameter with type 'object'.
            - `minVal` number: Minimum value for parameters of type 'int' or 'float'.
            - `maxVal` number: Maximum value for parameters of type 'int' or 'float'.
        - `configError` string
      - `metadata` DSPMetadata
        - `created` string, date-time, required: Date when the features were created
        - `generated` boolean, required: Whether features were generated
        - `dspConfig` object, required
        - `labels` string[], required: Labels in the dataset when generator ran
        - `featureLabels` string[]: Names of the generated features. Only set if axes have explicit labels.
        - `windowCount` integer, required
        - `featureCount` integer, required: Number of features for this DSP block
        - `includedSamples` object[], required: The included samples in this DSP block. Note that these are sorted in the same way as the `npy` files are laid out. So with the `windowCount` parameter you can exactly search back to see which file contributed to which windows there.
          - `id` integer, required
          - `windowCount` integer, required
        - `windowSizeMs` integer, required: Length of the sliding window when generating features.
        - `windowIncreaseMs` integer, required: Increase of the sliding window when generating features.
        - `padZeros` boolean, required: Whether data was zero-padded when generating features.
        - `frequency` number, required: Frequency of the original data in Hz.
        - `outputConfig` object, required: Information about the output of the DSP block
          - `type` 'image' | 'spectrogram' | 'flat', required: Output type of the DSP block
          - `shape` object, required: The shape of the block output
            - `width` integer, required: Available on all types. Denotes the width of an 'image' or 'spectrogram', or the number of features in a 'flat' block.
            - `height` integer: Only available for type 'image' and 'spectrogram'
            - `channels` integer: Only available for type 'image'
            - `frames` integer: Number of frames, only available for type 'image'
        - `fftUsed` integer[]
        - `resamplingAlgorithmVersion` number: The version number of the resampling algorithm used (for resampled time series data only)
        - `featureExplorerJobId` integer: When specified, a job is running (asynchronously) to generate the feature explorer.
        - `featureExplorerJobFailed` boolean: If this is set, then the feature explorer job failed (get the status by getting the job logs for 'featureExplorerJobId').
        - `featureImportanceJobId` integer: When specified, a job is running (asynchronously) to generate feature importance.
        - `featureImportanceJobFailed` boolean: If this is set, then the feature importance job failed (get the status by getting the job logs for 'featureImportanceJobId').
    - `learnBlockKerasConfigs` object[], required
      - `blockId` integer, required
      - `config` KerasConfig, required
        - `dependencies` DependencyData, required
          - `classes` string[], required: Set of all labels present in data feeding into this model
          - `classesPerKey` object: Per-key class info for DSP blocks operating on label map datasets
          - `blockNames` string[], required
          - `featureCount` integer, required
          - `sampleCount` integer, required
          - `outputClasses` string[], required: Set of output classes for this model
        - `trained` boolean, required: Whether the block is trained
        - `name` string, required
        - `type` 'anomaly' | 'anomaly-gmm' | 'keras' | 'keras-transfer-image' | 'keras-transfer-kws' | 'keras-object-detection' | 'keras-regression' | 'keras-akida' | 'keras-akida-transfer-image' | 'keras-akida-object-detection' | 'keras-visual-anomaly' | 'keras-freeform' | 'keras-self-contained-freeform' | 'keras-anomaly' | 'vlm': The type of learning block (anomaly, keras, keras-transfer-image, ...). Each behaves differently.
        - `script` string, required: The Keras script. This script might be empty if the mode is visual.
        - `minimumConfidenceRating` number, required: DEPRECATED, see "thresholds" instead. Minimum confidence rating required for the neural network. Scores below this confidence are tagged as uncertain.
        - `selectedModelType` 'int8' | 'float32' | 'akida' | 'requiresRetrain', required
        - `mode` 'visual' | 'expert', required: The mode (visual or expert) to use for editing this network.
        - `visualLayers` KerasVisualLayer[], required: The visual layers (if in visual mode) for the neural network. This will be an empty array when in expert mode.
          - `type` 'dense' | 'conv1d' | 'conv2d' | 'reshape' | 'flatten' | 'dropout' | 'batchNormalization' | 'transfer_mobilenetv2_a35' | 'transfer_mobilenetv2_a1' | 'transfer_mobilenetv2_a05' | 'transfer_mobilenetv2_160_a1' | 'transfer_mobilenetv2_160_a75' | 'transfer_mobilenetv2_160_a5' | 'transfer_mobilenetv2_160_a35' | 'transfer_mobilenetv1_a25_d100' | 'transfer_mobilenetv1_a2_d100' | 'transfer_mobilenetv1_a1_d100' | 'transfer_kws_mobilenetv1_a1_d100' | 'transfer_kws_mobilenetv2_a35_d100' | 'transfer_kws_syntiant_ndp10x' | 'transfer_kws_conv2d_tiny' | 'object_ssd_mobilenet_v2_fpnlite_320x320' | 'fomo_mobilenet_v2_a01' | 'fomo_mobilenet_v2_a35' | 'transfer_organization' | 'transfer_akidanet_imagenet_160_a100' | 'transfer_akidanet_imagenet_160_a50' | 'transfer_akidanet_imagenet_160_a25' | 'transfer_akidanet_imagenet_224_a100' | 'transfer_akidanet_imagenet_224_a50' | 'transfer_akidanet_imagenet_224_a25' | 'fomo_akidanet_a50' | 'fomo_ad_gmm' | 'fomo_ad_patchcore', required
          - `neurons` integer: Number of neurons or filters in this layer (only for dense, conv1d, conv2d) or in the final conv2d layer (only for transfer layers)
          - `kernelSize` integer: Kernel size for the convolutional layers (only for conv1d, conv2d)
          - `dropoutRate` number: Fraction of input units to drop (only for dropout) or in the final layer dropout (only for transfer layers)
          - `columns` integer: Number of columns for the reshape operation (only for reshape)
          - `stack` integer: Number of convolutional layers before the pooling layer (only for conv1d, conv2d)
          - `enabled` boolean
          - `organizationModelId` integer: Custom transfer learning model ID (when type is set to transfer_organization)
        - `trainingCycles` integer, required: Number of training cycles. If in expert mode this will be 0.
        - `learningRate` number, required: Learning rate (between 0 and 1). If in expert mode this will be 0.
        - `batchSize` integer: The batch size used during training.
        - `defaultBatchSize` integer, required: The default batch size if a value is not configured.
        - `shape` string, required: Python-formatted tuple of input axes
        - `trainTestSplit` number: Train/test split (between 0 and 1)
        - `autoClassWeights` boolean: Whether to automatically balance class weights, use this for skewed datasets.
        - `useLearnedOptimizer` boolean: Use learned optimizer and ignore learning rate.
        - `augmentationPolicyImage` 'none' | 'all', required: The data augmentation policy to use with image input
        - `augmentationPolicySpectrogram` AugmentationPolicySpectrogram
          - `enabled` boolean, required: True if spectrogram augmentation is enabled. Other properties will be ignored if this is false.
          - `warping` boolean: True if warping along the time axis is enabled.
          - `freqMasking` 'none' | 'low' | 'high': The amount of frequency masking to apply.
          - `timeMasking` 'none' | 'low' | 'high': The amount of time masking to apply.
          - `gaussianNoise` 'none' | 'low' | 'high': The amount of Gaussian noise to add.
        - `transferLearningModels` TransferLearningModel[], required
          - `name` string, required
          - `shortName` string, required
          - `abbreviatedName` string
          - `description` string, required
          - `hasNeurons` boolean, required
          - `hasDropout` boolean, required
          - `defaultNeurons` integer
          - `defaultDropout` number
          - `defaultLearningRate` number
          - `defaultTrainingCycles` number
          - `hasImageAugmentation` boolean
          - `type` 'dense' | 'conv1d' | 'conv2d' | 'reshape' | 'flatten' | 'dropout' | 'batchNormalization' | 'transfer_mobilenetv2_a35' | 'transfer_mobilenetv2_a1' | 'transfer_mobilenetv2_a05' | 'transfer_mobilenetv2_160_a1' | 'transfer_mobilenetv2_160_a75' | 'transfer_mobilenetv2_160_a5' | 'transfer_mobilenetv2_160_a35' | 'transfer_mobilenetv1_a25_d100' | 'transfer_mobilenetv1_a2_d100' | 'transfer_mobilenetv1_a1_d100' | 'transfer_kws_mobilenetv1_a1_d100' | 'transfer_kws_mobilenetv2_a35_d100' | 'transfer_kws_syntiant_ndp10x' | 'transfer_kws_conv2d_tiny' | 'object_ssd_mobilenet_v2_fpnlite_320x320' | 'fomo_mobilenet_v2_a01' | 'fomo_mobilenet_v2_a35' | 'transfer_organization' | 'transfer_akidanet_imagenet_160_a100' | 'transfer_akidanet_imagenet_160_a50' | 'transfer_akidanet_imagenet_160_a25' | 'transfer_akidanet_imagenet_224_a100' | 'transfer_akidanet_imagenet_224_a50' | 'transfer_akidanet_imagenet_224_a25' | 'fomo_akidanet_a50' | 'fomo_ad_gmm' | 'fomo_ad_patchcore', required
          - `learnBlockType` 'anomaly' | 'anomaly-gmm' | 'keras' | 'keras-transfer-image' | 'keras-transfer-kws' | 'keras-object-detection' | 'keras-regression' | 'keras-akida' | 'keras-akida-transfer-image' | 'keras-akida-object-detection' | 'keras-visual-anomaly' | 'keras-freeform' | 'keras-self-contained-freeform' | 'keras-anomaly' | 'vlm', required: The type of learning block (anomaly, keras, keras-transfer-image, ...). Each behaves differently.
          - `organizationModelId` integer
          - `implementationVersion` integer
          - `repositoryUrl` string: URL to the source code of this custom learn block.
          - `customBlockRef` string: Unique stable string key used to create and find this custom block.
          - `author` string, required
          - `blockType` 'official' | 'personal' | 'enterprise' | 'community', required
          - `customParameters` DSPGroupItem[]
            - `name` string, required
            - `value` string
            - `defaultValue` string, required
            - `type` string, required
            - `help` string
            - `param` string, required
            - `selectOptions` object[]
              - …
            - `readonly` boolean, required
            - `shouldShow` boolean, required
            - `showIf` object
              - …
            - `invalidText` string
            - `section` 'advanced' | 'augmentation' | 'modelProfiling': Interface section to render parameter in.
            - `multiline` boolean: Only valid for type "string". Will render a multiline text area.
            - `required` boolean, required
            - `hint` string: If set, shows a hint below the input.
            - `placeholder` string: Sets the placeholder text on the input element (for types "string", "int", "float" and "secret")
            - `showClickToSet` boolean, required: If enabled, render a disabled input element with 'Click to set'
            - `valid` object[]: Valid values for parameter.
              - …
            - `items` object: Recursive definition for items of a parameter with type 'array'.
            - `properties` object: Recursive definition for a parameter with type 'object'.
            - `minVal` number: Minimum value for parameters of type 'int' or 'float'.
            - `maxVal` number: Maximum value for parameters of type 'int' or 'float'.
          - `displayCategory` 'classical' | 'tao' | 'developer-preview': Category to display this block in the UI.
          - `blockNoLongerAvailable` object: If this object is set, then you can no longer train this block. The reason (or a migration path) is in the `reasonMarkdown` and `reasonHtml` properties.
            - `reasonMarkdown` string, required: Reason or migration path for current users of this block, in Markdown format.
            - `reasonHtml` string, required: Reason or migration path for current users of this block, in HTML format.
          - `hasExpertMode` boolean, required: Whether this block can be switched to expert mode.
        - `profileInt8` boolean, required: Whether to profile the i8 model (might take a very long time)
        - `skipEmbeddingsAndMemory` boolean, required: If set, skips creating embeddings and measuring memory (used in tests)
        - `akidaEdgeLearningConfig` AkidaEdgeLearningConfig
          - `enabled` boolean, required: True if Akida Edge Learning model creation is enabled. Other properties will be ignored if this is false.
          - `additionalClasses` number: Number of additional classes that will be added to the Edge Learning model.
          - `neuronsPerClass` number: Number of neurons in each class on the last layer in the Edge Learning model.
        - `customValidationMetadataKey` string: This metadata key is used to prevent group data leakage between train and validation datasets.
        - `showAdvancedTrainingSettings` boolean, required: Whether the 'Advanced training settings' UI element should be expanded.
        - `showAugmentationTrainingSettings` boolean, required: Whether the 'Augmentation training settings' UI element should be expanded.
        - `customParameters` object: Training parameters, this list depends on the list of parameters that the model exposes.
        - `anomalyCapacity` 'low' | 'medium' | 'high': Capacity level for visual anomaly detection. Determines which set of default configurations to use. The higher capacity, the higher number of (Gaussian) components, and the more adapted the model becomes to the original distribution
        - `lastShownModelVariant` 'int8' | 'float32' | 'akida'
        - `blockParameters` union: Training parameters specific to the type of the learn block. Parameters may be adjusted depending on the model defined in the visual layers. Used for our built-in blocks.
          - BlockParamsVisualAnomalyPatchcore
            - `backbone` string: The backbone to use for feature extraction
            - `numLayers` integer: The number of layers in the feature extractor (1-3)
            - `poolSize` integer: The pool size for the feature extractor
            - `samplingRatio` number: The sampling ratio for the coreset, used for anomaly scoring
            - `numNearestNeighbors` integer: The number of nearest neighbors to consider, used for anomaly scoring
          - BlockParamsVisualAnomalyGmm
            - `backbone` string: The backbone to use for feature extraction
        - `thresholds` BlockThreshold[], required: List of configurable thresholds for this block.
          - `key` string, required: Identifier to reference the threshold. You'll need to refer to the threshold by this key when you set the threshold).
          - `description` string, required: User-friendly description of the threshold.
          - `helpText` string, required: Additional help text (shown in the UI under a "?" icon)
          - `suggestedValue` number: If the threshold has a suggested value, e.g. a max. absolute error for regression projects; or the min. anomaly score for visual anomaly detection, then this is the numeric value of that threshold.
          - `suggestedValueText` string: If the threshold has a suggested value, e.g. a max. absolute error for regression projects; or the min. anomaly score for visual anomaly detection, then this is the stringified value of that threshold.
          - `value` union, required: Current value of the threshold
            - number
            - string
          - `dropdownOptions` object[]: Optional list of options, will be shown in a dropdown.
            - `description` string, required: Full description of the value
            - `value` string, required: Value, maps back to "BlockThreshold#value"
        - `kFoldsValidationConfig` KFoldsValidationConfig: K-fold cross-validation configuration. Leave undefined to disable k-fold cross validation (default behavior). If configured, a pre-training k-fold cross-validation step will occur. Training data will be partitioned into k subsets (stratified by existing project config), and k models will be trained (one for each subset). Once finished, a final model will be retrained with no validation set. The number of training epochs will be calculated by taking the median average of the best epochs from the prior k runs.
          - `numFolds` number, required: Number of "k" folds
          - `includeFinalTrainingRun` boolean: Optional flag for activating the final training run, performed on the entire training dataset after the k fold runs complete (defaults to off).
          - `extraEpochs` number: Number of additional training epochs. The final model will be trained on the median epoch count from the previous k runs + extraEpochs.
        - `isMultiHead` boolean: Whether this model is configured for multi-head outputs.
      - `metadata` KerasModelMetadata
        - `created` string, date-time, required: Date when the model was trained
        - `layers` KerasModelLayer[], required: Layers of the neural network
          - `input` object, required
            - `shape` integer, required: Input size
            - `name` string, required: TensorFlow name
            - `type` string, required: TensorFlow type
          - `output` object, required
            - `shape` integer, required: Output size
            - `name` string, required: TensorFlow name
            - `type` string, required: TensorFlow type
        - `classNames` string[], required: Labels for the output layer
        - `labels` string[], required: Original labels in the dataset when features were generated, e.g. used to render the feature explorer.
        - `availableModelTypes` KerasModelTypeEnum[], required: The types of model that are available
        - `recommendedModelType` 'int8' | 'float32' | 'akida' | 'requiresRetrain', required
        - `modelValidationMetrics` KerasModelMetadataMetrics[], required: Metrics for each of the available model types
          - `type` 'int8' | 'float32' | 'akida' | 'requiresRetrain', required
          - `loss` number, required: The model's loss on the validation set after training
          - `accuracy` number: The model's accuracy on the validation set after training
          - `confusionMatrix` array[], required
            - number[]
          - `report` object, required: Precision, recall, F1 and support scores
          - `onDevicePerformance` object[], required
            - `mcu` string, required
            - `name` string, required
            - `isDefault` boolean, required
            - `latency` number, required
            - `tflite` object, required
              - …
            - `eon` object, required
              - …
            - `eon_ram_optimized` object
              - …
            - `customMetrics` KerasCustomMetric[]: Custom, device-specific performance metrics
              - …
            - `hasPerformance` boolean, required: If false, then no metrics are available for this target
            - `profilingError` string: Specific error during profiling (e.g. model not supported)
          - `predictions` ModelPrediction[]
            - `sampleId` integer, required
            - `startMs` number, required
            - `endMs` number, required
            - `label` string
            - `prediction` string, required
            - `predictionCorrect` boolean
            - `expectedAnomalyOutcome` string: Only set for anomaly detection projects. The expected anomaly outcome for this window — either “anomaly” or “no anomaly”. The outcome is determined by which labels are marked as anomalous in the project setup, or by the sample label if no such configuration is defined.
            - `f1Score` number: Only set for object detection projects
            - `anomalyScores` array[]: Only set for visual anomaly projects. 2D array of shape (n, n) with raw anomaly scores, where n varies based on the image input size and the specific visual anomaly algorithm used. The scores corresponds to each grid cell in the image's spatial matrix.
              - …
            - `boundingBoxes` BoundingBoxWithScore[]: Only set for object detection projects. Coordinates are scaled 0..1, not absolute values.
              - …
            - `labelMapPredictions` object: For samples with structured labels (in the form of a key/value label map), this object will contain per-key prediction info for the sample.
          - `visualization` 'featureExplorer' | 'dataExplorer' | 'none', required
          - `isSupportedOnMcu` boolean, required
          - `mcuSupportError` string
          - `profilingJobId` integer: If this is set, then we're still profiling this model. Subscribe to job updates to see when it's done (afterward the metadata will be updated).
          - `profilingJobFailed` boolean: If this is set, then the profiling job failed (get the status by getting the job logs for 'profilingJobId').
          - `additionalMetrics` AdditionalMetric[], required
            - `name` string, required
            - `value` string, required
            - `fullPrecisionValue` number, required
            - `tooltipText` string
            - `link` string
        - `hasTrainedModel` boolean, required
        - `mode` 'classification' | 'regression' | 'object-detection' | 'visual-anomaly' | 'anomaly-gmm' | 'freeform' | 'anomaly', required
        - `objectDetectionLastLayer` 'mobilenet-ssd' | 'fomo' | 'yolov2-akida' | 'yolov5' | 'yolov5v5-drpai' | 'yolox' | 'yolov7' | 'yolo-pro' | 'tao-retinanet' | 'tao-ssd' | 'tao-yolov3' | 'tao-yolov4' | 'yolov11' | 'yolov11-abs' | 'paddleocr-detector' | 'qc-face-det-lite' | 'qc-yolox'
        - `imageInputScaling` '0..1' | '-1..1' | '-128..127' | '0..255' | 'torch' | 'bgr-subtract-imagenet-mean', required: Normalization that is applied to images. If this is not set then 0..1 is used. "0..1" gives you non-normalized pixels between 0 and 1. "-1..1" gives you non-normalized pixels between -1 and 1. "0..255" gives you non-normalized pixels between 0 and 255. "-128..127" gives you non-normalized pixels between -128 and 127. "torch" first scales pixels between 0 and 1, then applies normalization using the ImageNet dataset (same as `torchvision.transforms.Normalize()`). "bgr-subtract-imagenet-mean" scales to 0..255, reorders pixels to BGR, and subtracts the ImageNet mean from each channel.
        - `thresholds` BlockThreshold[], required: List of configurable thresholds for this block.
          - `key` string, required: Identifier to reference the threshold. You'll need to refer to the threshold by this key when you set the threshold).
          - `description` string, required: User-friendly description of the threshold.
          - `helpText` string, required: Additional help text (shown in the UI under a "?" icon)
          - `suggestedValue` number: If the threshold has a suggested value, e.g. a max. absolute error for regression projects; or the min. anomaly score for visual anomaly detection, then this is the numeric value of that threshold.
          - `suggestedValueText` string: If the threshold has a suggested value, e.g. a max. absolute error for regression projects; or the min. anomaly score for visual anomaly detection, then this is the stringified value of that threshold.
          - `value` union, required: Current value of the threshold
            - number
            - string
          - `dropdownOptions` object[]: Optional list of options, will be shown in a dropdown.
            - `description` string, required: Full description of the value
            - `value` string, required: Value, maps back to "BlockThreshold#value"
        - `tensorboardGraphs` KerasModelMetadataGraph[]
          - `title` string, required: Graph title
          - `xLabel` string: X-axis title
          - `yLabel` string: Y-axis title
          - `description` string: A description for the graph
          - `hideInUI` boolean: Whether this graph should be hidden by default in the Studio UI
          - `data` KerasModelMetadataGraphSeries[], required
            - `title` string, required
            - `values` number[], required
        - `kFoldsMetadata` KFoldsMetadata
          - `folds` FoldModelMetadata[], required
            - `created` string, date-time, required: Date when the model was trained
            - `layers` KerasModelLayer[], required: Layers of the neural network
              - …
            - `classNames` string[], required: Labels for the output layer
            - `labels` string[], required: Original labels in the dataset when features were generated, e.g. used to render the feature explorer.
            - `availableModelTypes` KerasModelTypeEnum[], required: The types of model that are available
            - `recommendedModelType` 'int8' | 'float32' | 'akida' | 'requiresRetrain', required
            - `modelValidationMetrics` KerasModelMetadataMetrics[], required: Metrics for each of the available model types
              - …
            - `hasTrainedModel` boolean, required
            - `mode` 'classification' | 'regression' | 'object-detection' | 'visual-anomaly' | 'anomaly-gmm' | 'freeform' | 'anomaly', required
            - `objectDetectionLastLayer` 'mobilenet-ssd' | 'fomo' | 'yolov2-akida' | 'yolov5' | 'yolov5v5-drpai' | 'yolox' | 'yolov7' | 'yolo-pro' | 'tao-retinanet' | 'tao-ssd' | 'tao-yolov3' | 'tao-yolov4' | 'yolov11' | 'yolov11-abs' | 'paddleocr-detector' | 'qc-face-det-lite' | 'qc-yolox'
            - `imageInputScaling` '0..1' | '-1..1' | '-128..127' | '0..255' | 'torch' | 'bgr-subtract-imagenet-mean', required: Normalization that is applied to images. If this is not set then 0..1 is used. "0..1" gives you non-normalized pixels between 0 and 1. "-1..1" gives you non-normalized pixels between -1 and 1. "0..255" gives you non-normalized pixels between 0 and 255. "-128..127" gives you non-normalized pixels between -128 and 127. "torch" first scales pixels between 0 and 1, then applies normalization using the ImageNet dataset (same as `torchvision.transforms.Normalize()`). "bgr-subtract-imagenet-mean" scales to 0..255, reorders pixels to BGR, and subtracts the ImageNet mean from each channel.
            - `thresholds` BlockThreshold[], required: List of configurable thresholds for this block.
              - …
            - `tensorboardGraphs` KerasModelMetadataGraph[]
              - …
            - `foldId` integer, required: A zero-indexed fold identifier
            - `foldName` string, required: A one-indexed human-frendly fold name
          - `hasFinalRun` boolean: Set to true when the k-fold run includes a final-pass on all training data.
          - `persistedFoldId` integer, required: A zero-indexed identifier for the selected downstream fold (set to -1 if final run)
          - `persistedFoldName` string, required: A one-indexed human-friendly fold name of the selected downstream fold
          - `persistedFoldMetricType` 'int8' | 'float32' | 'akida' | 'requiresRetrain'
    - `learnBlockAnomalyConfigs` object[], required
      - `blockId` integer, required
      - `config` AnomalyConfig, required
        - `dependencies` DependencyData, required
          - `classes` string[], required: Set of all labels present in data feeding into this model
          - `classesPerKey` object: Per-key class info for DSP blocks operating on label map datasets
          - `blockNames` string[], required
          - `featureCount` integer, required
          - `sampleCount` integer, required
          - `outputClasses` string[], required: Set of output classes for this model
        - `name` string, required
        - `axes` object[], required: Selectable axes for the anomaly detection block
          - `ix` integer, required
          - `label` string, required
          - `selected` boolean, required
          - `favourite` boolean, required
        - `trained` boolean, required: Whether the block is trained
        - `clusterCount` integer: Number of clusters for K-means, or number of components for GMM (in config)
        - `selectedAxes` integer[], required: Selected clusters (in config)
        - `minimumConfidenceRating` number, required: DEPRECATED, see "thresholds" instead. Minimum confidence rating for this block, scores above this number will be flagged as anomaly.
        - `thresholds` BlockThreshold[], required: List of configurable thresholds for this block.
          - `key` string, required: Identifier to reference the threshold. You'll need to refer to the threshold by this key when you set the threshold).
          - `description` string, required: User-friendly description of the threshold.
          - `helpText` string, required: Additional help text (shown in the UI under a "?" icon)
          - `suggestedValue` number: If the threshold has a suggested value, e.g. a max. absolute error for regression projects; or the min. anomaly score for visual anomaly detection, then this is the numeric value of that threshold.
          - `suggestedValueText` string: If the threshold has a suggested value, e.g. a max. absolute error for regression projects; or the min. anomaly score for visual anomaly detection, then this is the stringified value of that threshold.
          - `value` union, required: Current value of the threshold
            - number
            - string
          - `dropdownOptions` object[]: Optional list of options, will be shown in a dropdown.
            - `description` string, required: Full description of the value
            - `value` string, required: Value, maps back to "BlockThreshold#value"
      - `metadata` AnomalyModelMetadata
        - `created` string, date-time, required: Date when the model was trained
        - `scale` number[], required: Scale input for StandardScaler. Values are scaled like this (where `ix` is axis index): `input[ix] = (input[ix] - mean[ix]) / scale[ix];`
        - `mean` number[], required: Mean input for StandardScaler. Values are scaled like this (where `ix` is axis index): `input[ix] = (input[ix] - mean[ix]) / scale[ix];`
        - `clusters` object[], required: Trained K-means clusters
          - `center` number[], required: Center of each cluster (one value per axis)
          - `maxError` number, required: Size of the cluster
        - `axes` integer[], required: Which axes were included during training (by index)
        - `defaultMinimumConfidenceRating` number, required: DEPRECATED, see "thresholds" instead. Default minimum confidence rating required before tagging as anomaly, based on scores of training data (GMM only).
        - `availableModelTypes` KerasModelTypeEnum[]: The types of model that are available
        - `recommendedModelType` 'int8' | 'float32' | 'akida' | 'requiresRetrain'
        - `modelValidationMetrics` KerasModelMetadataMetrics[]: Metrics for each of the available model types
          - `type` 'int8' | 'float32' | 'akida' | 'requiresRetrain', required
          - `loss` number, required: The model's loss on the validation set after training
          - `accuracy` number: The model's accuracy on the validation set after training
          - `confusionMatrix` array[], required
            - number[]
          - `report` object, required: Precision, recall, F1 and support scores
          - `onDevicePerformance` object[], required
            - `mcu` string, required
            - `name` string, required
            - `isDefault` boolean, required
            - `latency` number, required
            - `tflite` object, required
              - …
            - `eon` object, required
              - …
            - `eon_ram_optimized` object
              - …
            - `customMetrics` KerasCustomMetric[]: Custom, device-specific performance metrics
              - …
            - `hasPerformance` boolean, required: If false, then no metrics are available for this target
            - `profilingError` string: Specific error during profiling (e.g. model not supported)
          - `predictions` ModelPrediction[]
            - `sampleId` integer, required
            - `startMs` number, required
            - `endMs` number, required
            - `label` string
            - `prediction` string, required
            - `predictionCorrect` boolean
            - `expectedAnomalyOutcome` string: Only set for anomaly detection projects. The expected anomaly outcome for this window — either “anomaly” or “no anomaly”. The outcome is determined by which labels are marked as anomalous in the project setup, or by the sample label if no such configuration is defined.
            - `f1Score` number: Only set for object detection projects
            - `anomalyScores` array[]: Only set for visual anomaly projects. 2D array of shape (n, n) with raw anomaly scores, where n varies based on the image input size and the specific visual anomaly algorithm used. The scores corresponds to each grid cell in the image's spatial matrix.
              - …
            - `boundingBoxes` BoundingBoxWithScore[]: Only set for object detection projects. Coordinates are scaled 0..1, not absolute values.
              - …
            - `labelMapPredictions` object: For samples with structured labels (in the form of a key/value label map), this object will contain per-key prediction info for the sample.
          - `visualization` 'featureExplorer' | 'dataExplorer' | 'none', required
          - `isSupportedOnMcu` boolean, required
          - `mcuSupportError` string
          - `profilingJobId` integer: If this is set, then we're still profiling this model. Subscribe to job updates to see when it's done (afterward the metadata will be updated).
          - `profilingJobFailed` boolean: If this is set, then the profiling job failed (get the status by getting the job logs for 'profilingJobId').
          - `additionalMetrics` AdditionalMetric[], required
            - `name` string, required
            - `value` string, required
            - `fullPrecisionValue` number, required
            - `tooltipText` string
            - `link` string
        - `hasTrainedModel` boolean
        - `thresholds` BlockThreshold[], required: List of configurable thresholds for this block.
          - `key` string, required: Identifier to reference the threshold. You'll need to refer to the threshold by this key when you set the threshold).
          - `description` string, required: User-friendly description of the threshold.
          - `helpText` string, required: Additional help text (shown in the UI under a "?" icon)
          - `suggestedValue` number: If the threshold has a suggested value, e.g. a max. absolute error for regression projects; or the min. anomaly score for visual anomaly detection, then this is the numeric value of that threshold.
          - `suggestedValueText` string: If the threshold has a suggested value, e.g. a max. absolute error for regression projects; or the min. anomaly score for visual anomaly detection, then this is the stringified value of that threshold.
          - `value` union, required: Current value of the threshold
            - number
            - string
          - `dropdownOptions` object[]: Optional list of options, will be shown in a dropdown.
            - `description` string, required: Full description of the value
            - `value` string, required: Value, maps back to "BlockThreshold#value"
      - `gmmMetadata` AnomalyGmmMetadata
        - `means` array[], required: 2D array of shape (n, m)
          - number[]
        - `covariances` array[], required: 3D array of shape (n, m, m)
          - array[]
            - number[]
        - `weights` number[], required: 1D array of shape (n,)
    - `postProcessingBlockConfigs` object[], required
      - `blockId` integer, required
      - `config` PostProcessingConfig, required
        - `enabled` boolean, required
        - `parameters` DSPGroupItem[], required
          - `name` string, required
          - `value` string
          - `defaultValue` string, required
          - `type` string, required
          - `help` string
          - `param` string, required
          - `selectOptions` object[]
            - `value` string: What is the string that will be set if this option is selected?
            - `selected` boolean
            - `optionLabel` string: What is the label that will be shown to the user for this option?
            - `priority` number: The following options are optional. See Learn Block Auto Config in Notion. Higher priority will get chosen based on limits below.
            - `romEstimate` number: Estimated ROM footprint for this choice. Will be tested against ROM budget in Studio.
            - `needsOps` string[]
            - `needsFeatures` string[]
          - `readonly` boolean, required
          - `shouldShow` boolean, required
          - `showIf` object
            - `parameter` string, required
            - `operator` 'eq' | 'neq', required
            - `value` string, required
          - `invalidText` string
          - `section` 'advanced' | 'augmentation' | 'modelProfiling': Interface section to render parameter in.
          - `multiline` boolean: Only valid for type "string". Will render a multiline text area.
          - `required` boolean, required
          - `hint` string: If set, shows a hint below the input.
          - `placeholder` string: Sets the placeholder text on the input element (for types "string", "int", "float" and "secret")
          - `showClickToSet` boolean, required: If enabled, render a disabled input element with 'Click to set'
          - `valid` object[]: Valid values for parameter.
          - `items` object: Recursive definition for items of a parameter with type 'array'.
          - `properties` object: Recursive definition for a parameter with type 'object'.
          - `minVal` number: Minimum value for parameters of type 'int' or 'float'.
          - `maxVal` number: Maximum value for parameters of type 'int' or 'float'.
        - `type` 'object-tracking' | 'sort-object-tracking', required
    - `pretrainedModelInfo` object
      - `fileName` string, required
    - `isStale` boolean, required: Whether this impulse contains blocks with "stale" features (i.e. the dataset has changed since features were generated)
    - `configured` boolean, required: Whether this impulse is configured
    - `complete` boolean, required: Whether this impulse is fully trained and configured
    - `tags` string[], required: Tags associated with this impulse
    - `createdFromTunerTrialId` number: The source EON Tuner trial ID for impulses created from the EON Tuner
    - `createdByUser` CreatedUpdatedByUser
      - `id` integer, required
      - `name` string, required
      - `username` string, required
      - `photo` string
    - `datasetVersion` DatasetVersion
      - `id` integer, required: Unique identifier of this dataset version.
      - `created` string, date-time, required: Date and time when this dataset version was created.
      - `versionIndex` integer, required: A sequential index of this dataset version, starting at 0 for the first version.
      - `description` string, nullable, required: User-editable description of this dataset version.
      - `parentVersionId` integer, nullable, required: ID of the parent dataset version this version is derived from. Null for the first dataset version.
      - `restoredFromDatasetVersionId` integer, nullable: ID of the dataset version this version was restored from. Null if not restored.
      - `type` 'auto_save' | 'restore' | 'manual', required
      - `summary` DatasetVersionSummary, required
        - `rawEventCountInWindow` number, required: Total number of raw mutation events in this dataset version window. A single sample can contribute multiple events, for example, an insert followed by an update.
        - `sampleChangesCount` number, required: Total number of distinct samples that changed in this dataset version window. Each sample is counted once, even if it has multiple mutation events.
        - `actionCounts` object, required: Number of samples with mutation events in this window, grouped by action type. Each action-type count is at most the number of changed samples, but sums across action types can be higher because one sample can contribute to multiple action types.
          - `insert` number: Number of samples in this window with at least one insert mutation.
          - `update` number: Number of samples in this window with at least one update mutation.
          - `delete` number: Number of samples in this window with at least one delete mutation.
      - `windowStart` string, date-time, required: Date and time when this dataset version window opened.
      - `windowEnd` string, date-time, required: Date and time when this dataset version window closed.
      - `actors` union[], required: Actors who contributed at least one change in this dataset version window.
        - union
          - ActorUser
            - `id` integer, required
            - `name` string, required
            - `username` string, required
            - `photo` string
            - `type` 'user', required
          - ActorOAuthClient
            - `type` 'oauthClient', required
            - `id` integer, required
            - `clientId` string, required
            - `name` string, required
            - `logoUrl` string
            - `user` CreatedUpdatedByUser
              - …
          - ActorProjectApiKey
            - `type` 'projectApiKey', required
            - `name` string, required
            - `created` string, date-time, required
            - `createdByUser` CreatedUpdatedByUser
              - …
  - `metricKeysByCategory` object[], required
    - `category` 'impulseMetrics' | 'inputBlockConfig' | 'dspBlockConfig' | 'learnBlockConfig' | 'learnBlockMetrics' | 'postProcessingBlockConfig', required
    - `metricKeys` object[], required
      - `name` string, required
      - `description` string, required
      - `type` 'core' | 'additional', required
      - `filteringType` DetailedImpulseMetricFilteringType
        - `type` 'numeric' | 'string' | 'select' | 'boolean' | 'list', required
        - `options` string[], required
      - `showInTable` boolean, required
  - `extraTableColumns` string[], required: Which extra impulse information should be shown in the impulses table.

---

[API](https://skmtc.dev/edgeimpulse/apis/edge-impulse-api.md) - [All operations](https://skmtc.dev/edgeimpulse/apis/edge-impulse-api/llms.txt) - [OpenAPI document](https://skmtc.dev/edgeimpulse/apis/edge-impulse-api/revisions/e2a976d38427?raw)
