JFrog Connect REST API

API for managing IoT and edge devices, deploying over-the-air software updates, and monitoring device fleets at scale.

OpenAPI Specification

jfrog-connect-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: JFrog Connect REST API
  description: >-
    API for managing IoT and edge devices, deploying over-the-air software
    updates, and monitoring device fleets at scale. JFrog Connect (formerly
    Upswift) provides a comprehensive platform for managing Linux-based
    IoT and edge devices.
  version: 2.x
  contact:
    name: JFrog
    url: https://jfrog.com
  license:
    name: Proprietary
    url: https://jfrog.com/terms-of-service/
  termsOfService: https://jfrog.com/terms-of-service/
externalDocs:
  description: JFrog Connect API Documentation
  url: https://docs.connect.jfrog.io/rest-api-v2/connect-api-reference
servers:
  - url: https://api.connect.jfrog.io/v2
    description: JFrog Connect Cloud
security:
  - apiKeyAuth: []
tags:
  - name: Commands
    description: Remote command execution on devices
  - name: Device Groups
    description: Logical grouping of devices
  - name: Devices
    description: Device management and monitoring
  - name: Projects
    description: Project management
  - name: Updates
    description: OTA software update deployments
paths:
  /projects:
    get:
      operationId: listProjects
      summary: JFrog List Projects
      description: Returns a list of all projects in the account.
      tags:
        - Projects
      responses:
        '200':
          description: Projects list
          content:
            application/json:
              schema:
                type: object
                properties:
                  projects:
                    type: array
                    items:
                      $ref: '#/components/schemas/Project'
    post:
      operationId: createProject
      summary: JFrog Create Project
      description: Creates a new project for organizing devices.
      tags:
        - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectRequest'
      responses:
        '201':
          description: Project created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
  /projects/{projectId}:
    get:
      operationId: getProject
      summary: JFrog Get Project
      description: Returns details for a specific project.
      tags:
        - Projects
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
      responses:
        '200':
          description: Project details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
    delete:
      operationId: deleteProject
      summary: JFrog Delete Project
      description: Deletes a project.
      tags:
        - Projects
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
      responses:
        '204':
          description: Project deleted
  /projects/{projectId}/devices:
    get:
      operationId: listDevices
      summary: JFrog List Devices
      description: Returns a list of all devices in a project.
      tags:
        - Devices
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
        - name: status
          in: query
          schema:
            type: string
            enum: [online, offline, updating]
          description: Filter by device status
        - name: group_id
          in: query
          schema:
            type: string
          description: Filter by device group
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
          description: Maximum results
        - name: offset
          in: query
          schema:
            type: integer
          description: Pagination offset
      responses:
        '200':
          description: Devices list
          content:
            application/json:
              schema:
                type: object
                properties:
                  devices:
                    type: array
                    items:
                      $ref: '#/components/schemas/Device'
                  total_count:
                    type: integer
  /projects/{projectId}/devices/{deviceId}:
    get:
      operationId: getDevice
      summary: JFrog Get Device
      description: Returns details for a specific device.
      tags:
        - Devices
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
        - name: deviceId
          in: path
          required: true
          schema:
            type: string
          description: Device ID
      responses:
        '200':
          description: Device details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Device'
    delete:
      operationId: removeDevice
      summary: JFrog Remove Device
      description: Removes a device from the project.
      tags:
        - Devices
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
        - name: deviceId
          in: path
          required: true
          schema:
            type: string
          description: Device ID
      responses:
        '204':
          description: Device removed
  /projects/{projectId}/device-groups:
    get:
      operationId: listDeviceGroups
      summary: JFrog List Device Groups
      description: Returns all device groups in a project.
      tags:
        - Device Groups
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
      responses:
        '200':
          description: Device groups list
          content:
            application/json:
              schema:
                type: object
                properties:
                  groups:
                    type: array
                    items:
                      $ref: '#/components/schemas/DeviceGroup'
    post:
      operationId: createDeviceGroup
      summary: JFrog Create Device Group
      description: Creates a new device group.
      tags:
        - Device Groups
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceGroupRequest'
      responses:
        '201':
          description: Device group created
  /projects/{projectId}/device-groups/{groupId}:
    get:
      operationId: getDeviceGroup
      summary: JFrog Get Device Group
      description: Returns details for a specific device group.
      tags:
        - Device Groups
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
        - name: groupId
          in: path
          required: true
          schema:
            type: string
          description: Group ID
      responses:
        '200':
          description: Device group details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceGroup'
    delete:
      operationId: deleteDeviceGroup
      summary: JFrog Delete Device Group
      description: Deletes a device group.
      tags:
        - Device Groups
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
        - name: groupId
          in: path
          required: true
          schema:
            type: string
          description: Group ID
      responses:
        '204':
          description: Device group deleted
  /projects/{projectId}/updates:
    get:
      operationId: listUpdates
      summary: JFrog List Updates
      description: Returns a list of all OTA update deployments.
      tags:
        - Updates
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
        - name: status
          in: query
          schema:
            type: string
            enum: [pending, in_progress, completed, failed, cancelled]
          description: Filter by update status
      responses:
        '200':
          description: Updates list
          content:
            application/json:
              schema:
                type: object
                properties:
                  updates:
                    type: array
                    items:
                      $ref: '#/components/schemas/Update'
    post:
      operationId: createUpdate
      summary: JFrog Create Update
      description: Creates a new OTA software update deployment.
      tags:
        - Updates
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRequest'
      responses:
        '201':
          description: Update created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Update'
  /projects/{projectId}/updates/{updateId}:
    get:
      operationId: getUpdate
      summary: JFrog Get Update
      description: Returns details and status for a specific update.
      tags:
        - Updates
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
        - name: updateId
          in: path
          required: true
          schema:
            type: string
          description: Update ID
      responses:
        '200':
          description: Update details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Update'
  /projects/{projectId}/updates/{updateId}/cancel:
    post:
      operationId: cancelUpdate
      summary: JFrog Cancel Update
      description: Cancels a pending or in-progress update.
      tags:
        - Updates
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
        - name: updateId
          in: path
          required: true
          schema:
            type: string
          description: Update ID
      responses:
        '200':
          description: Update cancelled
  /projects/{projectId}/commands:
    post:
      operationId: executeCommand
      summary: JFrog Execute Remote Command
      description: Executes a command on specified devices.
      tags:
        - Commands
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommandRequest'
      responses:
        '200':
          description: Command execution initiated
          content:
            application/json:
              schema:
                type: object
                properties:
                  command_id:
                    type: string
                  status:
                    type: string
  /projects/{projectId}/commands/{commandId}:
    get:
      operationId: getCommandStatus
      summary: JFrog Get Command Status
      description: Returns the status and results of a remote command execution.
      tags:
        - Commands
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: Project ID
        - name: commandId
          in: path
          required: true
          schema:
            type: string
          description: Command ID
      responses:
        '200':
          description: Command status
          content:
            application/json:
              schema:
                type: object
                properties:
                  command_id:
                    type: string
                  status:
                    type: string
                    enum: [pending, running, completed, failed]
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        device_id:
                          type: string
                        status:
                          type: string
                        output:
                          type: string
                        exit_code:
                          type: integer
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: API key authentication using Bearer token format
  schemas:
    Project:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        devices_count:
          type: integer
        online_devices_count:
          type: integer
        created_at:
          type: string
          format: date-time
    ProjectRequest:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
      required:
        - name
    Device:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        status:
          type: string
          enum: [online, offline, updating]
        ip_address:
          type: string
        os:
          type: string
        os_version:
          type: string
        architecture:
          type: string
        agent_version:
          type: string
        group_id:
          type: string
        tags:
          type: array
          items:
            type: string
        last_seen:
          type: string
          format: date-time
        registered_at:
          type: string
          format: date-time
        system_info:
          type: object
          properties:
            cpu_usage:
              type: number
            memory_total:
              type: integer
            memory_used:
              type: integer
            disk_total:
              type: integer
            disk_used:
              type: integer
            uptime_seconds:
              type: integer
    DeviceGroup:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        devices_count:
          type: integer
        created_at:
          type: string
          format: date-time
    DeviceGroupRequest:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        device_ids:
          type: array
          items:
            type: string
      required:
        - name
    Update:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        status:
          type: string
          enum: [pending, in_progress, completed, failed, cancelled]
        update_type:
          type: string
          enum: [file, script, package, docker_compose]
        target_devices:
          type: array
          items:
            type: string
        target_groups:
          type: array
          items:
            type: string
        progress:
          type: object
          properties:
            total_devices:
              type: integer
            completed:
              type: integer
            failed:
              type: integer
            pending:
              type: integer
        created_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
    UpdateRequest:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        update_type:
          type: string
          enum: [file, script, package, docker_compose]
        target_devices:
          type: array
          items:
            type: string
        target_groups:
          type: array
          items:
            type: string
        file_path:
          type: string
          description: Path to update file
        destination_path:
          type: string
          description: Destination path on device
        script_content:
          type: string
          description: Script content for script-type updates
        pre_install_script:
          type: string
        post_install_script:
          type: string
        rollback_on_failure:
          type: boolean
          default: false
        schedule:
          type: object
          properties:
            start_at:
              type: string
              format: date-time
            batch_size:
              type: integer
              description: Number of devices to update concurrently
      required:
        - name
        - update_type
    CommandRequest:
      type: object
      properties:
        command:
          type: string
          description: The command to execute
        device_ids:
          type: array
          items:
            type: string
        group_ids:
          type: array
          items:
            type: string
        timeout_seconds:
          type: integer
          default: 30
      required:
        - command