Edge Impulse Jobs API

The Jobs API from Edge Impulse — 42 operation(s) for jobs.

Operations 43

POST /api/{projectId}/jobs/post-processing Post-processing #
POST /api/{projectId}/jobs/data-explorer-features Generate data explorer features #
POST /api/{projectId}/jobs/data-quality-metrics Calculate data quality metrics. Only available for EI staff. #
POST /api/{projectId}/jobs/retry-migrate-impulse Retry impulse migration #
POST /api/{projectId}/jobs/synthetic-data Create synthetic data #
POST /api/{projectId}/jobs/ai-actions/{actionId}/preview Create preview AI Actions job #
POST /api/{projectId}/jobs/ai-actions/{actionId} Create AI Actions job #
POST /api/{projectId}/jobs/optimize Optimize model #
POST /api/{projectId}/jobs/set-tuner-primary-job Sets EON tuner primary model #
GET /api/{projectId}/jobs List active jobs #
GET /api/{projectId}/jobs/history List finished jobs #
GET /api/{projectId}/jobs/all List all jobs #
GET /api/{projectId}/jobs/summary Job summary #
GET /api/{projectId}/jobs/impulse-migration/status Get impulse migration status #
GET /api/{projectId}/jobs/impulse-migration/stdout Get impulse migration logs #
POST /api/{projectId}/jobs/{jobId}/update Update job #
GET /api/{projectId}/jobs/{jobId}/status Get job status #
GET /api/{projectId}/jobs/{jobId}/stdout Get logs #
GET /api/{projectId}/jobs/{jobId}/stdout/download Download logs #
POST /api/{projectId}/jobs/{jobId}/cancel Cancel job #
POST /api/{projectId}/jobs/generate-features Generate features #
POST /api/{projectId}/jobs/autotune-dsp Autotune DSP parameters #
POST /api/{projectId}/jobs/train/keras/{learnId} Train model (Keras) #
POST /api/{projectId}/jobs/train/anomaly/{learnId} Train model (Anomaly) #
POST /api/{projectId}/jobs/train/keras/{learnId}/export Export Keras block #
POST /api/{projectId}/jobs/train/keras/{learnId}/data Export Keras block data #
POST /api/{projectId}/jobs/build-ondevice-model Build on-device model #
POST /api/{projectId}/jobs/build-ondevice-model/organization Build organizational on-device model #
POST /api/{projectId}/jobs/export/original Export original data #
POST /api/{projectId}/jobs/export/wav Export data as WAV #
POST /api/{projectId}/jobs/retrain Retrain #
POST /api/{projectId}/jobs/classify Classify #
POST /api/{projectId}/jobs/performance-calibration Performance Calibration #
POST /api/{projectId}/jobs/evaluate Evaluate #
POST /api/{projectId}/jobs/version Version project #
POST /api/{projectId}/jobs/restore Restore project to version #
POST /api/{projectId}/jobs/restore/from-public Restore project to public version #
POST /api/{projectId}/jobs/versions/{versionId}/make-public Make a version public #
POST /api/{projectId}/jobs/keywords-noise Add keywords and noise #
POST /api/{projectId}/jobs/profile-tflite Profile TFLite model #
POST /api/{projectId}/jobs/deploy-pretrained-model Deploy pretrained model #
GET /api/{projectId}/jobs/profile-tflite/{jobId}/result Get TFLite profile result (GET) #
POST /api/{projectId}/jobs/profile-tflite/{jobId}/result Get TFLite profile result (POST) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/edge-impulse-jobs-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

edge-impulse-jobs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Edge Impulse Jobs API
  version: 1.0.0
servers:
- url: https://studio.edgeimpulse.com/v1
security:
- ApiKeyAuthentication: []
- JWTAuthentication: []
- JWTHttpHeaderAuthentication: []
tags:
- name: Jobs
paths:
  /api/{projectId}/jobs/post-processing:
    post:
      summary: Post-processing
      description: Begins post processing job
      operationId: startPostProcessingJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptionalImpulseIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartPostProcessingRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/data-explorer-features:
    post:
      summary: Generate data explorer features
      description: Generate features for the data explorer
      operationId: generateDataExplorerFeatures
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/data-quality-metrics:
    post:
      summary: Calculate data quality metrics. Only available for EI staff.
      description: Calculate data quality metrics for the dataset
      operationId: calculateDataQualityMetrics
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CalculateDataQualityMetricsRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/retry-migrate-impulse:
    post:
      summary: Retry impulse migration
      description: If an impulse migration previously failed, use this function to retry the job.
      operationId: retryImpulseMigration
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/synthetic-data:
    post:
      summary: Create synthetic data
      description: Generate new synthetic data
      operationId: createSyntheticDataJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSyntheticDataRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/ai-actions/{actionId}/preview:
    post:
      summary: Create preview AI Actions job
      description: Do a dry-run of an AI Actions job over a subset of data. This will instruct the block to propose changes to data items (via "setSampleProposedChanges") rather than apply the changes directly.
      operationId: createPreviewAIActionsJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/ActionIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePreviewAIActionsJobRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/ai-actions/{actionId}:
    post:
      summary: Create AI Actions job
      description: Run an AI Actions job over a subset of data. This will instruct the block to apply the changes directly to your dataset. To preview, use "createPreviewAIActionsJob". To set the config use `updateAIAction`.
      operationId: createAIActionsJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/ActionIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/optimize:
    post:
      summary: Optimize model
      description: Evaluates optimal model architecture
      operationId: optimizeJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/TunerContinuationJobIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/set-tuner-primary-job:
    post:
      summary: Sets EON tuner primary model
      description: Sets EON tuner primary model
      operationId: setTunerPrimaryJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/TrialIdQueryParameter'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetTunerPrimaryJobRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs:
    get:
      summary: List active jobs
      description: Get all active jobs for this project
      operationId: listActiveJobs
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OnlyRootJobsParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListJobsResponse'
  /api/{projectId}/jobs/history:
    get:
      summary: List finished jobs
      description: Get all finished jobs for this project
      operationId: listFinishedJobs
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptionalStartDateParameter'
      - $ref: '#/components/parameters/OptionalEndDateParameter'
      - $ref: '#/components/parameters/LimitResultsParameter'
      - $ref: '#/components/parameters/OffsetResultsParameter'
      - $ref: '#/components/parameters/OnlyRootJobsParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListJobsResponse'
  /api/{projectId}/jobs/all:
    get:
      summary: List all jobs
      description: Get all jobs for this project
      operationId: listAllJobs
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptionalStartDateParameter'
      - $ref: '#/components/parameters/OptionalEndDateParameter'
      - $ref: '#/components/parameters/LimitResultsParameter'
      - $ref: '#/components/parameters/OffsetResultsParameter'
      - $ref: '#/components/parameters/OnlyRootJobsParameter'
      - $ref: '#/components/parameters/OptionalJobsKeyParameter'
      - $ref: '#/components/parameters/OptionalJobsCategoryParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListJobsResponse'
  /api/{projectId}/jobs/summary:
    get:
      summary: Job summary
      description: Get a summary of jobs, grouped by key. Used to report to users how much compute they've used.
      operationId: getJobsSummary
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/RequiredStartDateParameter'
      - $ref: '#/components/parameters/RequiredEndDateParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSummaryResponse'
  /api/{projectId}/jobs/impulse-migration/status:
    get:
      summary: Get impulse migration status
      description: Get the status for the multi-impulse migration job in this project. This is a separate route so public projects can access it. If no multi-impulse migration jobs are present, an error will be thrown.
      operationId: getImpulseMigrationJobStatus
      tags:
      - Jobs
      x-middleware:
      - AllowsReadOnly
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetJobResponse'
  /api/{projectId}/jobs/impulse-migration/stdout:
    get:
      summary: Get impulse migration logs
      description: Get the logs for the multi-impulse migration job in this project. This is a separate route so public projects can access it. If no multi-impulse migration jobs are present, an error will be thrown.
      operationId: getImpulseMigrationJobsLogs
      tags:
      - Jobs
      x-middleware:
      - AllowsReadOnly
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/LimitResultsParameter'
      - $ref: '#/components/parameters/LogLevelParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogStdoutResponse'
  /api/{projectId}/jobs/{jobId}/update:
    post:
      summary: Update job
      description: Update a job.
      operationId: updateJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateJobRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
  /api/{projectId}/jobs/{jobId}/status:
    get:
      summary: Get job status
      description: Get the status for a job.
      operationId: getJobStatus
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetJobResponse'
  /api/{projectId}/jobs/{jobId}/stdout:
    get:
      summary: Get logs
      description: Get the logs for a job.
      operationId: getJobsLogs
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      - $ref: '#/components/parameters/LimitResultsParameter'
      - $ref: '#/components/parameters/LogLevelParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogStdoutResponse'
  /api/{projectId}/jobs/{jobId}/stdout/download:
    get:
      summary: Download logs
      description: Download the logs for a job (as a text file).
      operationId: downloadJobsLogs
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      - $ref: '#/components/parameters/LimitResultsParameter'
      - $ref: '#/components/parameters/LogLevelParameter'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                type: string
  /api/{projectId}/jobs/{jobId}/cancel:
    post:
      summary: Cancel job
      description: Cancel a running job.
      operationId: cancelJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      - $ref: '#/components/parameters/ForceCancelParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
  /api/{projectId}/jobs/generate-features:
    post:
      summary: Generate features
      description: Take the raw training set and generate features from them. Updates are streamed over the websocket API.
      operationId: generateFeaturesJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateFeaturesRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/autotune-dsp:
    post:
      summary: Autotune DSP parameters
      description: Autotune DSP block parameters. Updates are streamed over the websocket API.
      operationId: autotuneDspJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AutotuneDspRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/train/keras/{learnId}:
    post:
      summary: Train model (Keras)
      description: Take the output from a DSP block and train a neural network using Keras. Updates are streamed over the websocket API.
      operationId: trainKerasJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/LearnIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetKerasParameterRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/train/anomaly/{learnId}:
    post:
      summary: Train model (Anomaly)
      description: Take the output from a DSP block and train an anomaly detection model using K-means or GMM. Updates are streamed over the websocket API.
      operationId: trainAnomalyJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/LearnIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartTrainingRequestAnomaly'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/train/keras/{learnId}/export:
    post:
      summary: Export Keras block
      description: Export the training pipeline of a Keras block. Updates are streamed over the websocket API.
      operationId: exportKerasBlock
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/LearnIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/train/keras/{learnId}/data:
    post:
      summary: Export Keras block data
      description: Export the data of a Keras block (already split in train/validate data). Updates are streamed over the websocket API.
      operationId: exportKerasBlockData
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/LearnIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExportKerasBlockDataRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/build-ondevice-model:
    post:
      summary: Build on-device model
      description: Generate code to run the impulse on an embedded device. When this step is complete use `downloadBuild` to download the artefacts.  Updates are streamed over the websocket API.
      operationId: buildOnDeviceModelJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/DeploymentTypeParameter'
      - $ref: '#/components/parameters/OptionalImpulseIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BuildOnDeviceModelRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/build-ondevice-model/organization:
    post:
      summary: Build organizational on-device model
      description: Generate code to run the impulse on an embedded device using an organizational deployment block. When this step is complete use `downloadBuild` to download the artefacts.  Updates are streamed over the websocket API.
      operationId: buildOrganizationOnDeviceModelJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptionalImpulseIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BuildOrganizationOnDeviceModelRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/export/original:
    post:
      summary: Export original data
      description: Export all the data in the project as it was uploaded to Edge Impulse.  Updates are streamed over the websocket API.
      operationId: startOriginalExportJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExportOriginalDataRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/export/wav:
    post:
      summary: Export data as WAV
      description: Export all the data in the project in WAV format.  Updates are streamed over the websocket API.
      operationId: startWavExportJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExportWavDataRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/retrain:
    post:
      summary: Retrain
      description: Retrains the current impulse with the last known parameters. Updates are streamed over the websocket API.
      operationId: startRetrainJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptionalImpulseIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/classify:
    post:
      summary: Classify
      description: Classifies all items in the testing dataset against the current impulse. Updates are streamed over the websocket API.
      operationId: startClassifyJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptionalImpulseIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartClassifyJobRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/performance-calibration:
    post:
      summary: Performance Calibration
      description: Simulates real world usage and returns performance metrics.
      operationId: startPerformanceCalibrationJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptionalImpulseIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartPerformanceCalibrationRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/evaluate:
    post:
      summary: Evaluate
      description: Evaluates every variant of the current impulse. Updates are streamed over the websocket API.
      operationId: startEvaluateJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptionalImpulseIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/version:
    post:
      summary: Version project
      description: Create a new version of the project. This stores all data and configuration offsite. If you have access to the enterprise version of Edge Impulse you can store your data in your own storage buckets (only through JWT token authentication).
      operationId: startVersionJob
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectVersionRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/restore:
    post:
      summary: Restore project to version
      description: Restore a project to a certain version. This can only applied to a project without data, and will overwrite your impulse and all settings.
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      operationId: startRestoreJob
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RestoreProjectRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
  /api/{projectId}/jobs/restore/from-public:
    post:
      summary: Restore project to public version
      description: Restore a project to a certain public version. This can only applied to a project without data, and will overwrite your impulse and all settings.
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      operationId: startRestoreJobFromPublic
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RestoreProjectFromPublicRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
  /api/{projectId}/jobs/versions/{versionId}/make-public:
    post:
      summary: Make a version public
      description: Make a version of a project public. This makes all data and state available (read-only) on a public URL, and allows users to clone this project.
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/VersionIdParameter'
      operationId: startMakeVersionPublicJob
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/keywords-noise:
    post:
      summary: Add keywords and noise
      description: Add keywords and noise data to a project (for getting started guide)
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      operationId: startKeywordsNoiseJob
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/profile-tflite:
    post:
      summary: Profile TFLite model
      description: Takes in a TFLite model and returns the latency, RAM and ROM used for this model. Updates are streamed over the websocket API (or can be retrieved through the /stdout endpoint). Use getProfileTfliteJobResult to get the results when the job is completed.
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      operationId: startProfileTfliteJob
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProfileTfLiteRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/deploy-pretrained-model:
    post:
      summary: Deploy pretrained model
      description: Takes in a TFLite file and builds the model and SDK. Updates are streamed over the websocket API (or can be retrieved through the /stdout endpoint). Use getProfileTfliteJobResult to get the results when the job is completed.
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptionalImpulseIdParameter'
      operationId: startDeployPretrainedModelJob
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeployPretrainedModelRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartJobResponse'
  /api/{projectId}/jobs/profile-tflite/{jobId}/result:
    get:
      summary: Get TFLite profile result (GET)
      description: Get the results from a job started from startProfileTfliteJob (via a GET request).
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      operationId: getProfileTfliteJobResult
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProfileTfLiteResponse'
    post:
      summary: Get TFLite profile result (POST)
      description: Get the results from a job started from startProfileTfliteJob (via a POST request).
      tags:
      - Jobs
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      operationId: getProfileTfliteJobResultViaPostRequest
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProfileTfLiteResponse'
components:
  schemas:
    BuildOrganizationOnDeviceModelRequest:
      type: object
      required:
      - engine
      - deployBlockId
      properties:
        engine:
          $ref: '#/components/schemas/DeploymentTargetEngine'
        deployBlockId:
          type: integer
        modelType:
          $ref: '#/components/schemas/KerasModelTypeEnum'
    BuildOnDeviceModelRequest:
      type: object
      required:
      - engine
      properties:
        engine:
          $ref: '#/components/schemas/DeploymentTargetEngine'
        modelType:
          $ref: '#/components/schemas/KerasModelTypeEnum'
    JobSummaryResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - type: object
        required:
        - summary
        properties:
          summary:
            type: array
            items:
              type: object
              required:
              - category
              - lengthMs
              properties:
                category:
                  type: string
                lengthMs:
                  type: integer
                  description: Length per category in milliseconds
    CreateSyntheticDataRequest:
      type: object
      required:
      - transformationBlockId
      - parameters
      properties:
        transformationBlockId:
          type: integer
          description: The ID of a Synthetic Data transform block ID (public or private)
        parameters:
          type: object
          description: Properties for this synthetic data block
          additionalProperties:
            type: string
    ObjectDetectionLastLayer:
      type: string
      enum:
      - mobilenet-ssd
      - fomo
      - yolov2-akida
      - yolov5
      - yolov5v5-drpai
      - yolox
      - yolov7
      - tao-retinanet
      - tao-ssd
      - tao-yolov3
      - tao-yolov4
    BlockParamsVisualAnomalyPatchcore:
      type: object
      properties:
        backbone:
          type: string
          description: The backbone to use for feature extraction
        numLayers:
          type: integer
          description: The number of layers in the feature extractor (1-3)
        poolSize:
          type: integer
          description: The pool size for the feature extractor
        samplingRatio:
          type: number
          description: The sampling 

# --- truncated at 32 KB (64 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/edge-impulse/refs/heads/main/openapi/edge-impulse-jobs-api-openapi.yml