Skip to main content

Deployments API

Deploy software to your fleet programmatically.

Capsules

Capsules are versioned software artifacts (binaries, configs, containers).

List Capsules

GET /organizations/{org}/projects/{project}/capsules
Query Parameters:
ParameterTypeDescription
namestringFilter by capsule name
typestringFilter: sw, hw, config
pageintegerPage number
Response:
{
  "items": [
    {
      "id": 100,
      "name": "perception-module",
      "version": "2.1.0",
      "type": "sw",
      "size_bytes": 52428800,
      "checksum": "sha256:abc123...",
      "created_at": "2025-01-10T08:00:00Z",
      "created_by": "user@example.com"
    }
  ],
  "total": 25
}

Upload Capsule

POST /organizations/{org}/projects/{project}/capsules
Content-Type: multipart/form-data
Form Fields:
FieldTypeRequiredDescription
filefileYesArchive file (.tar.gz, .zip)
namestringYesCapsule name
versionstringYesVersion string
typestringNosw, hw, config (default: sw)
Response:
{
  "id": 101,
  "name": "perception-module",
  "version": "2.2.0",
  "upload_url": null,
  "status": "ready"
}

Get Capsule

GET /organizations/{org}/projects/{project}/capsules/{capsule_id}

Delete Capsule

DELETE /organizations/{org}/projects/{project}/capsules/{capsule_id}

Packages

Packages bundle capsules and configurations for deployment.

List Packages

GET /organizations/{org}/projects/{project}/packages
Response:
{
  "items": [
    {
      "id": 50,
      "name": "production-v2.1.0",
      "description": "Production release",
      "capsules": [
        {"id": 100, "name": "perception-module", "version": "2.1.0"},
        {"id": 101, "name": "control-module", "version": "1.5.0"}
      ],
      "configuration_id": 10,
      "created_at": "2025-01-10T09:00:00Z"
    }
  ]
}

Create Package

POST /organizations/{org}/projects/{project}/packages
Request Body:
{
  "name": "production-v2.2.0",
  "description": "Production release with perception updates",
  "capsule_ids": [101, 102],
  "configuration_id": 10
}

Get Package

GET /organizations/{org}/projects/{project}/packages/{package_id}

Delete Package

DELETE /organizations/{org}/projects/{project}/packages/{package_id}

Rollouts

Rollouts deploy packages to device groups.

List Rollouts

GET /organizations/{org}/projects/{project}/rollouts
Query Parameters:
ParameterTypeDescription
statusstringFilter: pending, in_progress, completed, failed
group_idintegerFilter by device group
Response:
{
  "items": [
    {
      "id": 200,
      "package_id": 50,
      "package_name": "production-v2.1.0",
      "group_id": 5,
      "group_name": "staging",
      "status": "completed",
      "progress": {
        "total": 10,
        "succeeded": 10,
        "failed": 0,
        "pending": 0
      },
      "started_at": "2025-01-10T10:00:00Z",
      "completed_at": "2025-01-10T10:15:00Z"
    }
  ]
}

Create Rollout

POST /organizations/{org}/projects/{project}/rollouts
Request Body:
{
  "package_id": 51,
  "group_id": 5,
  "strategy": "rolling",
  "batch_size": 2,
  "batch_delay_seconds": 60,
  "auto_start": true
}
Rollout Strategies:
StrategyDescription
rollingDeploy in batches with delays
canaryDeploy to subset first, then remainder
all_at_onceDeploy to all devices simultaneously

Get Rollout

GET /organizations/{org}/projects/{project}/rollouts/{rollout_id}

Start Rollout

POST /organizations/{org}/projects/{project}/rollouts/{rollout_id}/start

Pause Rollout

POST /organizations/{org}/projects/{project}/rollouts/{rollout_id}/pause

Cancel Rollout

POST /organizations/{org}/projects/{project}/rollouts/{rollout_id}/cancel

Rollback Rollout

POST /organizations/{org}/projects/{project}/rollouts/{rollout_id}/rollback
Reverts devices to their previous package version.

Configurations

List Configurations

GET /organizations/{org}/projects/{project}/configurations

Create Configuration

POST /organizations/{org}/projects/{project}/configurations
Request Body:
{
  "name": "production-config",
  "content": {
    "perception": {
      "enabled": true,
      "max_range": 50.0
    },
    "control": {
      "max_speed": 2.0
    }
  }
}

Get Configuration

GET /organizations/{org}/projects/{project}/configurations/{config_id}

Code Examples

import requests

API_KEY = "rbtk_xxx"
BASE = "https://api.roboticks.io/api/v1"
ORG = "acme"
PROJECT = "warehouse"

headers = {"Authorization": f"Bearer {API_KEY}"}

# Upload capsule
with open("build.tar.gz", "rb") as f:
    response = requests.post(
        f"{BASE}/organizations/{ORG}/projects/{PROJECT}/capsules",
        headers=headers,
        files={"file": f},
        data={"name": "my-module", "version": "1.0.0"}
    )
capsule = response.json()

# Create package
package = requests.post(
    f"{BASE}/organizations/{ORG}/projects/{PROJECT}/packages",
    headers=headers,
    json={
        "name": f"release-{capsule['version']}",
        "capsule_ids": [capsule["id"]]
    }
).json()

# Create and start rollout
rollout = requests.post(
    f"{BASE}/organizations/{ORG}/projects/{PROJECT}/rollouts",
    headers=headers,
    json={
        "package_id": package["id"],
        "group_id": 5,
        "strategy": "rolling",
        "auto_start": True
    }
).json()

print(f"Rollout {rollout['id']} started")