openapi: 3.0.3
info:
title: Miru Platform API
description: The API between Miru and any external client
version: 2026-08-17.everglades
license:
name: MIT
url: https://opensource.org/licenses/MIT
x-release-version: 2026-08-17.everglades
x-git-commit:
sha: b0d008b18d840e3f7ad65ae4beb60b19863b665e
url: https://github.com/mirurobotics/openapi/commit/b0d008b18d840e3f7ad65ae4beb60b19863b665e
message: |-
refactor(platform): remove bulk device move (#251)
## What
Removes device→group *movement* from the platform audience. Two things
go, together:
1. **`POST /devices/move/bulk` (`bulkMoveDevices`)** — the path item in
`apis/apps/backend-server/platform/paths/devices.yaml`, its entry in
`platform/openapi.yaml`, and the `devices.bulk_move` method in
`tools/stainless/platform.yml`.
2. **`group_id` on the platform `CreateDeviceRequest`** — the only place
`group_id` appeared in a platform request body.
Device→group membership is now **fully read-only** on the platform API.
## What deliberately stays
Nothing on the *read* side moved, and group structure stays writable:
| Kept | Why |
|---|---|
| `group_id` on the `Device` schema | read field, unaffected |
| `expand=group` on `Device`, and `group` in `DeviceExpansion` /
`DeviceListExpansion` | read surface |
| `group_id` filter on `GET /devices` (`device_search_group_id`) | read
surface |
| `GET /groups`, `GET /groups/{group_id}`, `POST /groups`, `PATCH
/groups/{group_id}` | group CRUD is orthogonal to device membership |
| **`POST /groups/{group_id}/move` (`moveGroup`)** | reparents a
**group** in the tree, not devices between groups — different resource,
different scope, and reversible by another reparent |
| `apis/configs/components/requests/device.yaml#/BulkMoveDevicesRequest`
| still referenced by `frontend` and `cli`, which keep their `bulk_move`
methods |
`moveGroup` surviving is the thing worth double-checking in review,
since "move" appears on both resources. Verification below gates on it
explicitly.
## Why create-time `group_id` goes with the endpoint
This is the load-bearing part, not an incidental tidy-up.
Without a move operation, a create-time `group_id` is a **one-way
door**. A device could be placed into a group at provision time and then
never moved out, reassigned, or relocated in the tree — through the API,
ever. Shipping a write that can be exercised exactly once per resource
lifetime is worse than shipping no write at all, because it hands
customers a state they cannot get out of without the dashboard.
So both go together, and the result is coherent: you can *see* which
group a device is in, expand the group object, and filter a device list
by group. You cannot set or change it.
## Not breaking
`platform/2026-05-06.rainier` — the last **stable** platform release —
has **no bulk-move endpoint and no groups resource at all**. `POST
/devices/move/bulk` and create-time `group_id` existed only in the
prereleases `platform/2026-08-17.everglades-beta.3` and
`everglades-beta.4`.
Withdrawing beta-only surface before everglades goes stable is free;
after it goes stable it would not be. Same reasoning as #244 (upload
collections) and #250 (the `devices:move` scope).
## Verification
`./scripts/regen.sh`, `./scripts/lint.sh`, and `./scripts/preflight.sh`
(`=== All checks passed ===`) all clean; `./scripts/is-stale.sh` reports
`All generated specs are up to date.`
- **Platform route count 25 → 24.**
- **Scope histogram: `devices:write` 3 → 2**, `groups:write` unchanged
at **3**, everything else unchanged.
- Zero hits for `move/bulk`, `bulkMoveDevices`, or `BulkMoveDevices`
anywhere in the platform tree or bundle; zero `bulk` in
`tools/stainless/platform.yml`.
- `CreateDeviceRequest` in the bundle is down to `name` alone — no
`group_id`.
- The generated `Device` block still carries `group_id` (required +
property) and the `group` expandable; `group` present in **both**
expansion enums; two `name: group_id` query params still in the bundle.
- All five group routes present, `moveGroup` included.
- Platform bundle diff is `0 55` — a pure deletion. No other audience's
bundle changed and `apis/configs/` is untouched.
A bare `grep group_id` is useless here — it matches the group path
param, the `Device` read field, the `DvcSearch` enum member, and the
list filter, all of which survive. Every check above is scoped to a
specific schema block or uses a precise pattern.
Plan: `plans/active/20260817-remove-platform-bulk-device-move.md`.
## Follow-ups
**Release.** A new `platform/2026-08-17.everglades-beta.5` must be cut
after merge — **tag the squash-merge commit on `main`**, not the branch
head. Tagging a branch head makes the release job skip silently and
publish nothing.
**Backend.** Three changes:
- Remove the `bulkMoveDevices` HTTP wiring.
- Re-stub `CreateDevice.GetGroupID()` back to `optnull.None[string]()`.
- Revert `Perms.Devices.Move` out of **both** `devices:write` and
`devices:manage` — it was added to `devices:write` in #624 solely for
this endpoint.
**Docs.** docs#158 must drop the endpoint from the everglades changelog
and from `authz.mdx`.
---
Need help on this PR? Tag @codesmith with what you
need. Autofix is disabled.
---------
Co-authored-by: Claude
author: ben-miru
branch: HEAD
dirty: false
x-build:
built_at: '2026-08-17T04:08:03.448835+00:00'
servers:
- url: https://api.mirurobotics.com/beta
description: Miru Platform API
security:
- ApiKeyAuth: []
paths:
/config_instances/{config_instance_id}:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Config Instances
summary: Get
operationId: getConfigInstance
description: Retrieve a config instance by ID.
parameters:
- $ref: '#/components/parameters/config_instance_id'
- $ref: '#/components/parameters/config_instance_expansions'
responses:
'200':
description: Successfully retrieved the config instance.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigInstance'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_instances:read` | Yes |
/config_instances:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Config Instances
summary: List
operationId: listConfigInstances
description: List config instances.
parameters:
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/config_instance_order_bys'
- $ref: '#/components/parameters/config_instance_list_expansions'
- $ref: '#/components/parameters/config_instance_search_id'
- $ref: '#/components/parameters/config_instance_search_config_schema_id'
- $ref: '#/components/parameters/config_instance_search_config_type_id'
- $ref: '#/components/parameters/config_instance_search_slot_key'
responses:
'200':
description: Successfully listed the config instances.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigInstanceList'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_instances:read` | Yes |
post:
tags:
- Config Instances
summary: Create
operationId: createConfigInstance
description: Create a new config instance.
parameters:
- $ref: '#/components/parameters/config_instance_expansions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateConfigInstanceRequest'
responses:
'200':
description: Successfully created the config instance.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigInstance'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_instances:write` | Yes |
/config_instances/{config_instance_id}/content:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Config Instances
summary: Download Content
operationId: getConfigInstanceContent
description: Download the content of a config instance.
parameters:
- $ref: '#/components/parameters/config_instance_id'
- $ref: '#/components/parameters/disposition'
responses:
'200':
description: Successfully retrieved the config instance content. The Content-Type
header is set according to the instance format.
headers:
Content-Disposition:
description: Header indicating whether the file is returned inline or
as an attachment.
schema:
type: string
example: inline
Content-Type:
description: The MIME type of the instance content.
schema:
type: string
example: application/json
content:
application/octet-stream:
schema:
type: string
format: binary
description: The raw config instance content.
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_instances:read` | Yes |
/config_schemas/{config_schema_id}:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Config Schemas
summary: Get
operationId: getConfigSchema
description: Retrieve a config schema by ID.
parameters:
- $ref: '#/components/parameters/config_schema_id'
- $ref: '#/components/parameters/config_schema_expansions'
responses:
'200':
description: Successfully retrieved the config schema.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigSchema'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_schemas:read` | Yes |
/config_schemas:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Config Schemas
summary: List
operationId: listConfigSchemas
description: List config schemas.
parameters:
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/config_schema_order_bys'
- $ref: '#/components/parameters/config_schema_list_expansions'
- $ref: '#/components/parameters/config_schema_search_id'
- $ref: '#/components/parameters/config_schema_search_config_type_id'
responses:
'200':
description: Successfully listed the config schemas.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigSchemaList'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_schemas:read` | Yes |
post:
tags:
- Config Schemas
summary: Create
description: Create a new config schema.
operationId: createConfigSchema
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_schemas:write` | Yes |
Consider using the Miru CLI in a CI/CD pipeline to create config schemas instead of calling this endpoint directly.
parameters:
- $ref: '#/components/parameters/config_schema_expansions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateConfigSchemaRequest'
responses:
'200':
description: Successfully created the config schema.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigSchema'
/config_types/{config_type_id}:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Config Types
summary: Get
operationId: getConfigType
description: Retrieve a config type by ID.
parameters:
- $ref: '#/components/parameters/config_type_id'
responses:
'200':
description: Successfully retrieved the config type.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigType'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_types:read` | Yes |
patch:
tags:
- Config Types
summary: Update
description: Update a config type by ID.
operationId: updateConfigType
parameters:
- $ref: '#/components/parameters/config_type_id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateConfigTypeRequest'
responses:
'200':
description: Successfully updated the config type.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigType'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_types:write` | Yes |
/config_types:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Config Types
summary: List
operationId: listConfigTypes
description: List config types.
parameters:
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/config_type_order_bys'
- $ref: '#/components/parameters/config_type_list_expansions'
- $ref: '#/components/parameters/config_type_search_id'
- $ref: '#/components/parameters/config_type_search_name'
- $ref: '#/components/parameters/config_type_search_slug'
responses:
'200':
description: Successfully listed the config types.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigTypeList'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_types:read` | Yes |
post:
tags:
- Config Types
summary: Create
description: Create a new config type.
operationId: createConfigType
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateConfigTypeRequest'
responses:
'200':
description: Successfully created the config type.
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigType'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `config_types:write` | Yes |
/deployments/{deployment_id}:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Deployments
summary: Get
operationId: getDeployment
description: Retrieve a deployment by its ID.
parameters:
- $ref: '#/components/parameters/deployment_id'
- $ref: '#/components/parameters/deployment_expansions'
responses:
'200':
description: Successfully retrieved the deployment.
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `deployments:read` | Yes |
/deployments:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Deployments
summary: List
operationId: listDeployments
description: List all deployments.
parameters:
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/deployment_order_bys'
- $ref: '#/components/parameters/deployment_list_expansions'
- $ref: '#/components/parameters/deployment_search_id'
- $ref: '#/components/parameters/deployment_search_target_status'
- $ref: '#/components/parameters/deployment_search_activity_status'
- $ref: '#/components/parameters/deployment_search_error_status'
- $ref: '#/components/parameters/deployment_search_device_id'
- $ref: '#/components/parameters/deployment_search_release_id'
responses:
'200':
description: Successfully listed the deployments.
content:
application/json:
schema:
$ref: '#/components/schemas/DeploymentList'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `deployments:read` | Yes |
post:
tags:
- Deployments
summary: Create
operationId: createDeployment
description: Stage or deploy a new deployment.
parameters:
- $ref: '#/components/parameters/deployment_expansions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDeploymentRequest'
responses:
'200':
description: Successfully created the deployment.
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `deployments:write` | Yes |
| `deployments:stage` | Required if staging a deployment. |
| `deployments:deploy` | Required if deploying a deployment. |
/deployments/{deployment_id}/deploy:
parameters:
- $ref: '#/components/parameters/MiruVersion'
post:
tags:
- Deployments
summary: Deploy
operationId: deployDeployment
description: Trigger a deployment to its target device.
parameters:
- $ref: '#/components/parameters/deployment_id'
- $ref: '#/components/parameters/deployment_expansions'
responses:
'200':
description: Successfully triggered the deployment.
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `deployments:deploy` | Yes |
/deployments/{deployment_id}/archive:
parameters:
- $ref: '#/components/parameters/MiruVersion'
post:
tags:
- Deployments
summary: Archive
operationId: archiveDeployment
description: Archive staged or drifted deployments.
parameters:
- $ref: '#/components/parameters/deployment_id'
- $ref: '#/components/parameters/deployment_expansions'
responses:
'200':
description: Successfully archived the deployment.
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `deployments:archive` | Yes |
/deployments/{deployment_id}/drifts:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Deployments
summary: Drifts
operationId: getDeploymentDrifts
description: List the deployments which have been deployed since this deployment
was staged.
parameters:
- $ref: '#/components/parameters/deployment_id'
- $ref: '#/components/parameters/deployment_expansions'
responses:
'200':
description: Successfully retrieved the deployment drifts.
content:
application/json:
schema:
$ref: '#/components/schemas/DeploymentList'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `deployments:read` | Yes |
/devices/{device_id}:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Devices
summary: Get
operationId: getDevice
description: Get a device by ID.
parameters:
- $ref: '#/components/parameters/device_id'
- $ref: '#/components/parameters/device_expansions'
responses:
'200':
description: Successfully retrieved the device.
content:
application/json:
schema:
$ref: '#/components/schemas/Device'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `devices:read` | Yes |
patch:
tags:
- Devices
summary: Update
operationId: updateDevice
description: Update a device by ID.
parameters:
- $ref: '#/components/parameters/device_id'
- $ref: '#/components/parameters/device_expansions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateDeviceRequest'
responses:
'200':
description: Successfully updated the device.
content:
application/json:
schema:
$ref: '#/components/schemas/Device'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `devices:write` | Yes |
/devices:
parameters:
- $ref: '#/components/parameters/MiruVersion'
post:
tags:
- Devices
summary: Create
operationId: createDevice
description: Create a new device.
parameters:
- $ref: '#/components/parameters/device_expansions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDeviceRequest'
responses:
'200':
description: Successfully created the device.
content:
application/json:
schema:
$ref: '#/components/schemas/Device'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `devices:write` | Yes |
get:
tags:
- Devices
summary: List
operationId: listDevices
description: List devices.
parameters:
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/device_order_bys'
- $ref: '#/components/parameters/device_list_expansions'
- $ref: '#/components/parameters/device_search_id'
- $ref: '#/components/parameters/device_search_name'
- $ref: '#/components/parameters/device_search_agent_version'
- $ref: '#/components/parameters/device_search_current_release_id'
- $ref: '#/components/parameters/device_search_group_id'
- $ref: '#/components/parameters/device_search_status'
responses:
'200':
description: Successfully listed the devices.
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceList'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `devices:read` | Yes |
/devices/{device_id}/ping:
parameters:
- $ref: '#/components/parameters/MiruVersion'
post:
tags:
- Devices
summary: Ping
operationId: pingDevice
description: Ping a device to check connectivity.
parameters:
- $ref: '#/components/parameters/device_id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PingDeviceRequest'
responses:
'200':
description: Successfully pinged the device.
content:
application/json:
schema:
$ref: '#/components/schemas/PingDeviceResponse'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `devices:read` | Yes |
/provisioning_tokens:
parameters:
- $ref: '#/components/parameters/MiruVersion'
post:
tags:
- Provisioning Tokens
summary: Create
operationId: createProvisioningToken
description: Create a new provisioning token.
responses:
'200':
description: Successfully created the provisioning token.
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningToken'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `devices:provision` | Yes |
| `provisioning_tokens:write` | Yes |
/git_commits/{git_commit_id}:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Git Commits
summary: Get
operationId: getGitCommit
description: Retrieve a git commit by ID.
parameters:
- $ref: '#/components/parameters/git_commit_id'
responses:
'200':
description: Successfully retrieved the git commit.
content:
application/json:
schema:
$ref: '#/components/schemas/GitCommit'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `git_commits:read` | Yes |
/git_commits:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Git Commits
summary: List
operationId: listGitCommits
description: List git commits.
parameters:
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/git_commit_order_bys'
- $ref: '#/components/parameters/git_commit_list_expansions'
- $ref: '#/components/parameters/git_commit_search_id'
- $ref: '#/components/parameters/git_commit_search_sha'
responses:
'200':
description: Successfully listed the git commits.
content:
application/json:
schema:
$ref: '#/components/schemas/GitCommitList'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `git_commits:read` | Yes |
post:
tags:
- Git Commits
summary: Create
operationId: createGitCommit
description: Register a git commit.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateGitCommitRequest'
responses:
'200':
description: Successfully created the git commit.
content:
application/json:
schema:
$ref: '#/components/schemas/GitCommit'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `git_commits:write` | Yes |
/groups/{group_id}:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Groups
summary: Get
operationId: getGroup
description: Retrieve a group by ID.
parameters:
- $ref: '#/components/parameters/group_id'
- $ref: '#/components/parameters/group_expansions'
responses:
'200':
description: Successfully retrieved the group.
content:
application/json:
schema:
$ref: '#/components/schemas/Group'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `groups:read` | Yes |
patch:
tags:
- Groups
summary: Update
operationId: updateGroup
description: Update a group.
parameters:
- $ref: '#/components/parameters/group_id'
- $ref: '#/components/parameters/group_expansions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateGroupRequest'
responses:
'200':
description: Successfully updated the group.
content:
application/json:
schema:
$ref: '#/components/schemas/Group'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `groups:write` | Yes |
/groups:
parameters:
- $ref: '#/components/parameters/MiruVersion'
post:
tags:
- Groups
summary: Create
operationId: createGroup
description: Create a new group.
parameters:
- $ref: '#/components/parameters/group_expansions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateGroupRequest'
responses:
'200':
description: Successfully created the group.
content:
application/json:
schema:
$ref: '#/components/schemas/Group'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `groups:write` | Yes |
get:
tags:
- Groups
summary: List
operationId: listGroups
description: List groups.
parameters:
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/group_order_bys'
- $ref: '#/components/parameters/group_list_expansions'
- $ref: '#/components/parameters/group_search_id'
- $ref: '#/components/parameters/group_search_name'
- $ref: '#/components/parameters/group_search_parent_id'
responses:
'200':
description: Successfully listed the groups.
content:
application/json:
schema:
$ref: '#/components/schemas/GroupList'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `groups:read` | Yes |
/groups/{group_id}/move:
parameters:
- $ref: '#/components/parameters/MiruVersion'
post:
tags:
- Groups
summary: Move
operationId: moveGroup
description: Move a group to a new parent, or to the top level by setting parent_id
to null.
parameters:
- $ref: '#/components/parameters/group_id'
- $ref: '#/components/parameters/group_expansions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MoveGroupRequest'
responses:
'200':
description: Successfully moved the group.
content:
application/json:
schema:
$ref: '#/components/schemas/Group'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `groups:write` | Yes |
/principal:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Principals
summary: Self
description: Retrieve the currently authenticated principal.
operationId: getSelf
responses:
'200':
description: Successfully retrieved the principal.
content:
application/json:
schema:
$ref: '#/components/schemas/Principal'
/releases/{release_id}:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Releases
summary: Get
operationId: getRelease
description: Retrieve a release by ID.
parameters:
- $ref: '#/components/parameters/release_id'
- $ref: '#/components/parameters/release_expansions'
responses:
'200':
description: Successfully retrieved the release.
content:
application/json:
schema:
$ref: '#/components/schemas/Release'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `releases:read` | Yes |
/releases:
parameters:
- $ref: '#/components/parameters/MiruVersion'
get:
tags:
- Releases
summary: List
operationId: listReleases
description: List releases.
parameters:
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/release_order_bys'
- $ref: '#/components/parameters/release_list_expansions'
- $ref: '#/components/parameters/release_search_id'
- $ref: '#/components/parameters/release_search_version'
responses:
'200':
description: Successfully listed the releases.
content:
application/json:
schema:
$ref: '#/components/schemas/ReleaseList'
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `releases:read` | Yes |
post:
tags:
- Releases
summary: Create
description: Create a new release.
operationId: createRelease
x-mint:
content: |
| Scope | Required |
|-------|----------|
| `releases:write` | Yes |
Consider using the Miru CLI in a CI/CD pipeline to create releases instead of calling this endpoint directly.
parameters:
- $ref: '#/components/parameters/release_expansions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateReleaseRequest'
responses:
'200':
description: Successfully created the release.
content:
application/json:
schema:
$ref: '#/components/schemas/Release'
x-webhooks:
deployment.validate:
post:
tags:
- Deployments
summary: Validate
description: Deployment requires custom validation to be performed
operationId: validateDeployment
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ValidateDeploymentEvent'
responses:
'200':
description: Successfully received the event.
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
description: The API key to use for authentication.
schemas:
APIVersion:
type: string
enum:
- 2026-08-17.everglades
x-enum-varnames:
- API_VERSION
x-stainless-const: true
ReleaseVersion:
type: string
enum:
- 2026-08-17.everglades
x-enum-varnames:
- RELEASE_VERSION
x-stainless-const: true
APIGitCommit:
type: string
enum:
- b0d008b18d840e3f7ad65ae4beb60b19863b665e
x-enum-varnames:
- API_GIT_COMMIT
x-stainless-const: true
CfgInstSearch:
type: string
description: |
**Internal server use only**: an enum of possible search fields.
enum:
- id
- config_schema_id
- config_type_id
- slot_key
x-enum-varnames:
- CFG_INST_SEARCH_ID
- CFG_INST_SEARCH_CONFIG_SCHEMA_ID
- CFG_INST_SEARCH_CONFIG_TYPE_ID
- CFG_INST_SEARCH_SLOT_KEY
CfgSchSearch:
type: string
description: |
**Internal server use only**: an enum of possible search fields.
enum:
- id
- config_type_id
x-enum-varnames:
- CFG_SCH_SEARCH_ID
- CFG_SCH_SEARCH_CONFIG_TYPE_ID
CfgTypeSearch:
type: string
description: |
**Internal server use only**: an enum of possible search fields.
enum:
- id
- name
- slug
x-enum-varnames:
- CFG_TYPE_SEARCH_ID
- CFG_TYPE_SEARCH_NAME
- CFG_TYPE_SEARCH_SLUG
DplSearch:
type: string
description: |
**Internal server use only**: an enum of possible search fields.
enum:
- id
- target_status
- activity_status
- error_status
- device_id
- release_id
x-enum-varnames:
- DPL_SEARCH_ID
- DPL_SEARCH_TARGET_STATUS
- DPL_SEARCH_ACTIVITY_STATUS
- DPL_SEARCH_ERROR_STATUS
- DPL_SEARCH_DEVICE_ID
- DPL_SEARCH_RELEASE_ID
DvcSearch:
type: string
description: |
**Internal server use only**: an enum of possible search fields.
enum:
- id
- name
- agent_version
- current_release_id
- group_id
- status
x-enum-varnames:
- DVC_SEARCH_ID
- DVC_SEARCH_NAME
- DVC_SEARCH_AGENT_VERSION
- DVC_SEARCH_CURRENT_RELEASE_ID
- DVC_SEARCH_GROUP_ID
- DVC_SEARCH_STATUS
GitCmtSearch:
type: string
description: |
**Internal server use only**: an enum of possible search fields.
enum:
- id
- sha
x-enum-varnames:
- GIT_CMT_SEARCH_ID
- GIT_CMT_SEARCH_SHA
GrpSearch:
type: string
description: |
**Internal server use only**: an enum of possible search fields.
enum:
- id
- name
- parent_id
x-enum-varnames:
- GRP_SEARCH_ID
- GRP_SEARCH_NAME
- GRP_SEARCH_PARENT_ID
RlsSearch:
type: string
description: |
**Internal server use only**: an enum of possible search fields.
enum:
- id
- version
x-enum-varnames:
- RLS_SEARCH_ID
- RLS_SEARCH_VERSION
ConfigInstanceExpansion:
type: string
enum:
- content
- config_schema
- config_type
x-enum-varnames:
- CONFIG_INSTANCE_EXPAND_CONTENT
- CONFIG_INSTANCE_EXPAND_CONFIG_SCHEMA
- CONFIG_INSTANCE_EXPAND_CONFIG_TYPE
BaseConfigInstance:
title: Base Config Instance
type: object
required:
- object
- id
- config_type_name
- filepath
- created_at
- config_schema_id
- config_type_id
- slot_key
properties:
object:
type: string
enum:
- config_instance
example: config_instance
x-stainless-const: true
description: The object type, which is always `config_instance`.
id:
type: string
example: cfg_inst_123
description: ID of the config instance.
config_type_name:
type: string
example: Motion Control
description: The name of the config type.
filepath:
type: string
example: /srv/miru/configs/v1/motion-control.json
description: The absolute file system path where this config instance is
written.
slot_key:
type: string
example: controller_2
description: The key of the config schema slot this instance is bound to.
Must match the `key` of one of the slots declared by this instance's config
schema.
created_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
description: The timestamp of when the config instance was created.
config_schema_id:
type: string
example: cfg_sch_123
description: ID of the config schema which the config instance must adhere
to.
config_type_id:
type: string
example: cfg_type_123
description: ID of the config type which the config instance (and its schema)
is a part of.
InstanceSlot:
title: Instance Slot
type: object
required:
- key
- name
- filepath
- required
properties:
key:
type: string
pattern: ^[a-z0-9][a-z0-9_-]*$
maxLength: 128
example: controller_2
description: An immutable, code-friendly identifier for this slot, unique
within the schema. Lowercase alphanumerics, underscores, and hyphens;
must start with an alphanumeric; at most 128 characters.
name:
type: string
example: Controller 2
description: The human-readable name of this slot.
filepath:
type: string
example: /var/local/forge/configuration/robot_drivers/controller_2/topic_list.yaml
description: The absolute file system path where instances bound to this
slot are written. Must be unique within the schema, and unique across
every config schema in a release.
required:
type: boolean
example: true
description: Whether every deployment of a release containing this schema
must include an instance for this slot. A deployment includes at most
one config instance per slot.
description:
type: string
example: Topic list for the second motor controller.
description: An optional human-readable description of this slot.
example:
key: controller_2
name: Controller 2
filepath: /var/local/forge/configuration/robot_drivers/controller_2/topic_list.yaml
required: true
description: Topic list for the second motor controller.
InstanceFormat:
title: Instance Format
type: string
description: |
The on-disk format used when a config instance is written to the device filesystem.
- `json`: standard JSON.
- `yaml`: YAML 1.2.
- `jsonc`: JSON with comments (JSON plus `//` and `/* */` comment syntax).
- `xml`: XML.
- `text`: plain, unstructured text with no specific format.
enum:
- json
- yaml
- jsonc
- xml
- text
x-enum-varnames:
- INSTANCE_FORMAT_JSON
- INSTANCE_FORMAT_YAML
- INSTANCE_FORMAT_JSONC
- INSTANCE_FORMAT_XML
- INSTANCE_FORMAT_TEXT
SchemaLanguage:
title: Schema Language
type: string
example: jsonschema
enum:
- jsonschema
- cue
- opaque
x-enum-varnames:
- JSONSCHEMA
- CUE
- OPAQUE
SchemaFormat:
title: Schema Format
type: string
enum:
- json
- yaml
- cue
x-enum-varnames:
- SCHEMA_FORMAT_JSON
- SCHEMA_FORMAT_YAML
- SCHEMA_FORMAT_CUE
SchemaDocument:
title: Schema Document
type: object
required:
- id
- name
- data
properties:
id:
type: string
description: The unique identifier for this document.
example: doc_123
name:
type: string
description: The document filename.
example: main.json
data:
type: string
description: The raw document content.
example:
id: doc_123
name: main.json
data: |
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object"
}
SchemaDocuments:
type: array
items:
$ref: '#/components/schemas/SchemaDocument'
example:
- id: doc_123
name: main.json
data: |
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object"
}
BaseConfigSchema:
title: Base Config Schema
type: object
required:
- object
- id
- digest
- config_type_name
- instance_format
- created_at
- updated_at
- config_type_id
- language
- format
- instance_slots
properties:
object:
type: string
enum:
- config_schema
example: config_schema
x-stainless-const: true
description: The object type, which is always `config_schema`.
id:
type: string
example: cfg_sch_123
description: ID of the config schema.
digest:
type: string
example: sha256:1234567890
description: The digest of the config schema.
config_type_name:
type: string
example: Motion Control
description: The name of the config type.
instance_slots:
type: array
minItems: 1
description: The file system destinations this config schema writes to.
Every config schema has at least one slot. Slots share the schema's validation
and differ only in where the file is written; a file needing different
validation is a different config type, not a slot. Slot keys and filepaths
must each be unique within the schema, and slot filepaths must be unique
across every config schema in a release.
items:
$ref: '#/components/schemas/InstanceSlot'
example:
- key: default
name: Default
filepath: /srv/miru/configs/v1/motion-control.json
required: true
instance_format:
$ref: '#/components/schemas/InstanceFormat'
created_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
description: Timestamp of when the config schema was created.
updated_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
description: Timestamp of when the config schema was last updated.
config_type_id:
type: string
example: cfg_typ_123
description: ID of the config type.
language:
$ref: '#/components/schemas/SchemaLanguage'
format:
$ref: '#/components/schemas/SchemaFormat'
documents:
allOf:
- $ref: '#/components/schemas/SchemaDocuments'
description: Expand the config schema documents using `expand=documents`
in the query string.
example:
- id: doc_123
name: main.json
data: |
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object"
}
BaseConfigType:
title: Config Type
type: object
required:
- object
- id
- name
- slug
- created_at
- updated_at
properties:
object:
type: string
enum:
- config_type
example: config_type
x-stainless-const: true
description: The object type, which is always `config_type`.
id:
type: string
example: cfg_123
description: ID of the config type.
name:
type: string
example: My Config Type
description: Name of the config type.
slug:
type: string
example: my-config-type
description: An immutable, code-friendly name for the config type.
created_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
description: Timestamp of when the config type was created.
updated_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
description: Timestamp of when the config type was last updated.
ConfigType:
allOf:
- $ref: '#/components/schemas/BaseConfigType'
example:
object: config_type
id: cfg_typ_123
name: Motion Control
slug: motion-control
created_at: '2021-01-01T00:00:00Z'
updated_at: '2021-01-01T00:00:00Z'
created_by_id: usr_123
updated_by_id: usr_123
ConfigSchema:
title: Config Schema
allOf:
- $ref: '#/components/schemas/BaseConfigSchema'
- type: object
properties:
config_type:
allOf:
- $ref: '#/components/schemas/ConfigType'
description: Expand the config type using 'expand=config_type' in the
query string.
example:
object: config_schema
id: cfg_sch_123
digest: sha256:1234567890
config_type_name: Motion Control
instance_slots:
- key: default
name: Default
filepath: /srv/miru/configs/v1/motion-control.json
required: true
instance_format: json
created_at: '2021-01-01T00:00:00Z'
updated_at: '2021-01-01T00:00:00Z'
config_type_id: cfg_typ_123
language: jsonschema
format: json
InstanceContent:
title: Instance Content
type: object
required:
- format
- data
properties:
format:
$ref: '#/components/schemas/InstanceFormat'
data:
type: string
description: The configuration values associated with the config instance.
example: |
{
"enable_autonomy": true,
"enable_remote_control": true,
"max_payload_kg": 10.0
}
example:
format: json
data: |
{
"enable_autonomy": true,
"enable_remote_control": true,
"max_payload_kg": 10.0
}
ConfigInstance:
title: Config Instance
allOf:
- $ref: '#/components/schemas/BaseConfigInstance'
- type: object
properties:
config_schema:
allOf:
- $ref: '#/components/schemas/ConfigSchema'
description: Expand the config schema using 'expand=config_schema' in
the query string.
config_type:
allOf:
- $ref: '#/components/schemas/ConfigType'
description: Expand the config type using 'expand=config_type' in the
query string.
content:
allOf:
- $ref: '#/components/schemas/InstanceContent'
description: The configuration values associated with the config instance.
Expand the content using 'expand=content' in the query string.
example:
object: config_instance
id: cfg_inst_123
config_type_name: Motion Control
filepath: /srv/miru/configs/v1/motion-control.json
slot_key: default
created_at: '2021-01-01T00:00:00Z'
config_schema_id: cfg_sch_123
config_type_id: cfg_typ_123
ConfigInstanceOrderBy:
type: string
enum:
- id:asc
- id:desc
- created_at:desc
- created_at:asc
x-enum-varnames:
- CONFIG_INSTANCE_ORDER_BY_ID_ASC
- CONFIG_INSTANCE_ORDER_BY_ID_DESC
- CONFIG_INSTANCE_ORDER_BY_CREATED_AT_DESC
- CONFIG_INSTANCE_ORDER_BY_CREATED_AT_ASC
default: created_at:desc
ConfigInstanceListExpansion:
type: string
enum:
- total_count
- content
- config_schema
- config_type
x-enum-varnames:
- CONFIG_INSTANCE_LIST_EXPAND_TOTAL_COUNT
- CONFIG_INSTANCE_LIST_EXPAND_CONTENT
- CONFIG_INSTANCE_LIST_EXPAND_CONFIG_SCHEMA
- CONFIG_INSTANCE_LIST_EXPAND_CONFIG_TYPE
PaginatedList:
title: Paginated List
type: object
required:
- object
- limit
- offset
- has_more
properties:
object:
type: string
enum:
- list
example: list
x-stainless-const: true
description: The object type, which is always `list`.
total_count:
type: integer
format: int64
description: The total number of items in the list. By default the total
count is not returned. The total count must be expanded (using expand=total_count)
to get the total number of items in the list.
limit:
type: integer
description: The maximum number of items to return. A limit of 15 with an
offset of 0 returns items 1-15.
default: 10
minimum: 1
maximum: 100
offset:
type: integer
description: The offset of the items to return. An offset of 10 with a limit
of 10 returns items 11-20.
default: 0
minimum: 0
has_more:
type: boolean
description: True if there are more items in the list to return. False if
there are no more items to return.
example: false
ConfigInstanceList:
title: Config Instance List
type: object
allOf:
- $ref: '#/components/schemas/PaginatedList'
- type: object
required:
- data
properties:
data:
description: The list of config instances.
type: array
items:
$ref: '#/components/schemas/ConfigInstance'
CreateConfigInstanceRequest:
title: Create Config Instance Request
type: object
required:
- config_schema_id
- content
properties:
config_schema_id:
type: string
description: The ID of the config schema which this config instance must
adhere to.
example: cfg_sch_123
slot_key:
type: string
description: The slot of the config schema this instance is bound to. Optional
when the schema has exactly one slot. Must match the `key` of one of the
slots declared by the config schema.
example: controller_2
content:
$ref: '#/components/schemas/InstanceContent'
ConfigSchemaExpansion:
type: string
enum:
- documents
- config_type
x-enum-varnames:
- CONFIG_SCHEMA_EXPAND_DOCUMENTS
- CONFIG_SCHEMA_EXPAND_CONFIG_TYPE
ConfigSchemaOrderBy:
type: string
enum:
- id:asc
- id:desc
- created_at:desc
- created_at:asc
x-enum-varnames:
- CONFIG_SCHEMA_ORDER_BY_ID_ASC
- CONFIG_SCHEMA_ORDER_BY_ID_DESC
- CONFIG_SCHEMA_ORDER_BY_CREATED_AT_DESC
- CONFIG_SCHEMA_ORDER_BY_CREATED_AT_ASC
default: created_at:desc
ConfigSchemaListExpansion:
type: string
enum:
- total_count
- documents
- config_type
x-enum-varnames:
- CONFIG_SCHEMA_LIST_EXPAND_TOTAL_COUNT
- CONFIG_SCHEMA_LIST_EXPAND_DOCUMENTS
- CONFIG_SCHEMA_LIST_EXPAND_CONFIG_TYPE
ConfigSchemaList:
title: Config Schema List
allOf:
- $ref: '#/components/schemas/PaginatedList'
- type: object
required:
- data
properties:
data:
description: The list of config schemas.
type: array
items:
$ref: '#/components/schemas/ConfigSchema'
ConfigTypeRef:
title: Config Type Reference
description: A reference to a config type. At least one of `id` or `slug` must
be provided. When both are provided, `id` takes precedence and `slug` is ignored.
type: object
properties:
id:
type: string
example: cfg_123
description: ID of the config type. Takes precedence over `slug` when both
are provided.
slug:
type: string
example: my-config-type
description: An immutable, code-friendly name for the config type. Used
only when `id` is not provided.
CreateSchemaDocument:
title: Schema Document
type: object
required:
- name
- data
properties:
name:
type: string
description: The name of this document.
example: motion-control.json
data:
type: string
description: The raw document content.
GitCommitRef:
title: Git Commit Reference
description: A reference to a git commit. At least one of `id` or `sha` must
be provided. When both are provided, `id` takes precedence and `sha` is ignored.
type: object
properties:
id:
type: string
description: ID of the git commit. Takes precedence over `sha` when both
are provided.
example: git_cmt_123
sha:
type: string
description: The SHA hash of the git commit. Used only when `id` is not
provided.
example: 1a2b3c4d...
CreateConfigSchemaGitCommitRequest:
title: Git Commit Request
type: object
required:
- commit_ref
- schema_filepaths
properties:
commit_ref:
$ref: '#/components/schemas/GitCommitRef'
schema_filepaths:
type: array
description: The file paths of the config schema files relative to the git
repository root. JSON Schema only supports a single file for a schema.
CUE support multiple files via [packages](https://cuelang.org/docs/references/spec/#packages).
items:
type: string
example:
- path/to/config/schema/robot1.cue
- path/to/config/schema/robot2.cue
CreateConfigSchemaRequest:
title: Create Config Schema Request
type: object
required:
- config_type_ref
- language
- format
- documents
properties:
config_type_ref:
$ref: '#/components/schemas/ConfigTypeRef'
instance_slots:
type: array
minItems: 1
description: 'The file system destinations this config schema writes to.
Slot keys and filepaths must each be unique within the schema, and slot
filepaths must be unique across every config schema in a release. Optional:
when omitted, the server creates a single required slot with key `default`,
name `Default`, and a filepath of `/srv/miru/configs/.`
derived from the config type slug and the schema format. When provided,
the array must contain at least one slot.'
items:
$ref: '#/components/schemas/InstanceSlot'
instance_format:
$ref: '#/components/schemas/InstanceFormat'
language:
$ref: '#/components/schemas/SchemaLanguage'
format:
$ref: '#/components/schemas/SchemaFormat'
documents:
type: array
description: The schema document files.
items:
$ref: '#/components/schemas/CreateSchemaDocument'
git_commit:
description: The git commit to link to this config schema.
allOf:
- $ref: '#/components/schemas/CreateConfigSchemaGitCommitRequest'
UpdateConfigTypeRequest:
title: UpdateConfigTypeRequest
type: object
properties:
name:
type: string
description: The updated name of the config type.
example: My Config Type
ConfigTypeOrderBy:
type: string
enum:
- id:asc
- id:desc
- created_at:desc
- created_at:asc
x-enum-varnames:
- CONFIG_TYPE_ORDER_BY_ID_ASC
- CONFIG_TYPE_ORDER_BY_ID_DESC
- CONFIG_TYPE_ORDER_BY_CREATED_AT_DESC
- CONFIG_TYPE_ORDER_BY_CREATED_AT_ASC
default: created_at:desc
ConfigTypeListExpansion:
type: string
enum:
- total_count
x-enum-varnames:
- CONFIG_TYPE_LIST_EXPAND_TOTAL_COUNT
ConfigTypeList:
title: Config Type List
allOf:
- $ref: '#/components/schemas/PaginatedList'
- type: object
required:
- data
properties:
data:
description: The list of config types.
type: array
items:
$ref: '#/components/schemas/ConfigType'
CreateConfigTypeRequest:
title: CreateConfigTypeRequest
type: object
required:
- name
- slug
properties:
name:
type: string
description: The name of the config type.
example: My Config Type
slug:
type: string
description: An immutable, code-friendly name for the config type.
example: my-config-type
DeploymentExpansion:
type: string
enum:
- device
- release
- parent
- config_instances
x-enum-varnames:
- DEPLOYMENT_EXPAND_DEVICE
- DEPLOYMENT_EXPAND_RELEASE
- DEPLOYMENT_EXPAND_PARENT
- DEPLOYMENT_EXPAND_CONFIG_INSTANCES
DeploymentStatus:
type: string
description: |
This status merges the 'activity_status' and 'error_status' fields, with error states taking precedence over activity states when errors are present. For example, if the activity status is 'deployed' but the error status is 'failed', the status is 'failed'. However, if the error status is 'none' and the activity status is 'deployed', the status is 'deployed'.
enum:
- drifted
- staged
- queued
- deployed
- removing
- archived
- failed
- retrying
x-enum-varnames:
- DEPLOYMENT_STATUS_DRIFTED
- DEPLOYMENT_STATUS_STAGED
- DEPLOYMENT_STATUS_QUEUED
- DEPLOYMENT_STATUS_DEPLOYED
- DEPLOYMENT_STATUS_REMOVING
- DEPLOYMENT_STATUS_ARCHIVED
- DEPLOYMENT_STATUS_FAILED
- DEPLOYMENT_STATUS_RETRYING
DeploymentActivityStatus:
type: string
description: |
Last known activity state of the deployment.
`drifted` means the device's configurations have drifted since this deployment was staged, and the deployment needs to be reviewed before it can be deployed.
`staged` means the deployment is ready to be deployed.
`queued` means the deployment's config instances are waiting to be received by the device and will be deployed as soon as the device is online.
`deployed` means the deployment's config instances are currently available for consumption on the device.
`removing` means the deployment's config instances are being removed from the device.
`archived` means the deployment is available for historical reference but cannot be deployed and is not active on the device.
enum:
- drifted
- staged
- queued
- deployed
- removing
- archived
x-enum-varnames:
- DEPLOYMENT_ACTIVITY_STATUS_DRIFTED
- DEPLOYMENT_ACTIVITY_STATUS_STAGED
- DEPLOYMENT_ACTIVITY_STATUS_QUEUED
- DEPLOYMENT_ACTIVITY_STATUS_DEPLOYED
- DEPLOYMENT_ACTIVITY_STATUS_REMOVING
- DEPLOYMENT_ACTIVITY_STATUS_ARCHIVED
DeploymentErrorStatus:
type: string
description: |
Last known error state of the deployment.
`none` means there are no errors.
`retrying` means an error has been encountered and the agent is retrying to reach the target status.
`failed` means a fatal error has been encountered; the deployment is archived and, if deployed, removed from the device.
enum:
- none
- failed
- retrying
x-enum-varnames:
- DEPLOYMENT_ERROR_STATUS_NONE
- DEPLOYMENT_ERROR_STATUS_FAILED
- DEPLOYMENT_ERROR_STATUS_RETRYING
DeploymentTargetStatus:
type: string
description: |
Desired state of the deployment.
`staged` means the deployment is ready to be deployed.
`deployed` means all config instances in the deployment are available for consumption on the device.
`archived` means the deployment is available for historical reference but cannot be deployed and is not active on the device.
enum:
- staged
- deployed
- archived
x-enum-varnames:
- DEPLOYMENT_TARGET_STATUS_STAGED
- DEPLOYMENT_TARGET_STATUS_DEPLOYED
- DEPLOYMENT_TARGET_STATUS_ARCHIVED
BaseDeployment:
title: Base Deployment
type: object
required:
- object
- id
- description
- status
- activity_status
- error_status
- target_status
- device_id
- release_id
- created_at
- updated_at
properties:
object:
type: string
enum:
- deployment
example: deployment
x-stainless-const: true
description: The object type, which is always `deployment`.
id:
type: string
example: dpl_123
description: ID of the deployment.
description:
type: string
example: Deployment for the motion control config instance
description: The description of the deployment.
status:
$ref: '#/components/schemas/DeploymentStatus'
activity_status:
$ref: '#/components/schemas/DeploymentActivityStatus'
error_status:
$ref: '#/components/schemas/DeploymentErrorStatus'
target_status:
$ref: '#/components/schemas/DeploymentTargetStatus'
device_id:
type: string
example: dvc_123
description: ID of the device.
release_id:
type: string
example: rls_123
description: ID of the release.
created_at:
type: string
format: date-time
example: '2024-01-01T00:00:00Z'
description: Timestamp of when the device release was created.
updated_at:
type: string
format: date-time
example: '2024-01-01T00:00:00Z'
description: Timestamp of when the device release was last updated.
DeviceStatus:
type: string
description: |
The status of the device.
- Inactive: The miru agent has not yet been installed / authenticated
- Activating: The miru agent is currently being installed / authenticated (should only last for a few seconds)
- Online: The miru agent has successfully pinged the server within the last 60 seconds.
- Offline: The miru agent has not successfully pinged the server within the last 60 seconds (e.g. network issues, device is powered off, etc.)
- Archived: The device has been archived. The agent's session has been revoked and the device no longer participates in workspace operations. See `archived_at` for when this occurred.
enum:
- inactive
- activating
- online
- offline
- archived
x-enum-varnames:
- DEVICE_STATUS_INACTIVE
- DEVICE_STATUS_ACTIVATING
- DEVICE_STATUS_ONLINE
- DEVICE_STATUS_OFFLINE
- DEVICE_STATUS_ARCHIVED
BaseDevice:
title: Base Device
type: object
required:
- object
- id
- name
- description
- status
- agent_version
- last_connected_at
- last_disconnected_at
- created_at
- updated_at
properties:
object:
type: string
enum:
- device
example: device
x-stainless-const: true
description: The object type, which is always `device`.
id:
type: string
example: dvc_123
description: ID of the device.
name:
type: string
example: My Device
description: Name of the device.
description:
type: string
nullable: true
example: Welder on line 3
description: A free-form description of the device.
status:
$ref: '#/components/schemas/DeviceStatus'
agent_version:
type: string
example: v1.0.0
description: The version of the agent the device is running.
nullable: true
last_connected_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
nullable: true
description: Timestamp of when the device was last made an initial connection
(this is not the same as the last time the device was seen).
last_disconnected_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
nullable: true
description: Timestamp of when the device was last disconnected (this is
not the same as the last time the device was seen).
created_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
description: Timestamp of when the device was created.
updated_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
description: Timestamp of when the device was last updated.
Deployment:
title: Deployment
allOf:
- $ref: '#/components/schemas/BaseDeployment'
- type: object
required:
- parent_id
- queued_at
- deployed_at
- archived_at
properties:
parent_id:
type: string
nullable: true
example: dpl_123
description: ID of the deployment that this deployment was patched from.
Null if this deployment has no parent.
queued_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
nullable: true
description: Timestamp of when the deployment was queued.
deployed_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
nullable: true
description: Timestamp of when the deployment was deployed.
archived_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
nullable: true
description: Timestamp of when the deployment was archived.
device:
allOf:
- $ref: '#/components/schemas/Device'
description: Expand the device using 'expand=device' in the query string.
release:
allOf:
- $ref: '#/components/schemas/Release'
description: Expand the release using 'expand=release' in the query string.
parent:
allOf:
- $ref: '#/components/schemas/Deployment'
nullable: true
description: The parent deployment that this deployment was patched from.
Null if this deployment has no parent. Expand the parent using 'expand=parent'
in the query string.
config_instances:
type: array
items:
$ref: '#/components/schemas/ConfigInstance'
description: Expand the config instances using 'expand=config_instances'
in the query string.
example:
- object: config_instance
id: cfg_inst_123
config_type_name: Motion Control
filepath: /srv/miru/configs/v1/motion-control.json
slot_key: default
created_at: '2021-01-01T00:00:00Z'
config_schema_id: cfg_sch_123
config_type_id: cfg_typ_123
- object: config_instance
id: cfg_inst_124
config_type_name: Localization
filepath: /srv/miru/configs/v1/localization/primary.json
slot_key: primary
created_at: '2021-01-01T00:00:00Z'
config_schema_id: cfg_sch_124
config_type_id: cfg_typ_124
example:
object: deployment
id: dpl_123
description: Deployment for the motion control config instance
status: staged
activity_status: staged
error_status: none
target_status: staged
device_id: dvc_123
release_id: rls_123
parent_id: null
created_at: '2024-01-01T00:00:00Z'
updated_at: '2024-01-01T00:00:00Z'
queued_at: null
deployed_at: null
archived_at: null
BaseRelease:
title: Base Release
type: object
required:
- object
- id
- version
- git_commit_id
- created_at
- updated_at
properties:
object:
type: string
enum:
- release
example: release
x-stainless-const: true
description: The object type, which is always `release`.
id:
type: string
example: rls_123
description: ID of the release.
version:
type: string
example: v1.0.0
description: The version of the release.
git_commit_id:
type: string
nullable: true
example: git_commit_123
description: The ID of the git commit associated with this release.
created_at:
type: string
format: date-time
example: '2024-01-01T00:00:00Z'
description: Timestamp of when the release was created.
updated_at:
type: string
format: date-time
example: '2024-01-01T00:00:00Z'
description: Timestamp of when the release was last updated.
Release:
title: Release
allOf:
- $ref: '#/components/schemas/BaseRelease'
- type: object
properties:
config_schemas:
type: array
items:
$ref: '#/components/schemas/ConfigSchema'
description: Expand the config schemas using 'expand=config_schemas' in
the query string.
example:
- object: config_schema
id: cfg_sch_123
digest: sha256:1234567890
config_type_name: Motion Control
instance_slots:
- key: default
name: Default
filepath: /srv/miru/configs/v1/motion-control.json
required: true
instance_format: json
created_at: '2021-01-01T00:00:00Z'
updated_at: '2021-01-01T00:00:00Z'
config_type_id: cfg_typ_123
language: jsonschema
format: json
- object: config_schema
id: cfg_sch_124
digest: sha256:1234567890
config_type_name: Localization
instance_slots:
- key: primary
name: Primary
filepath: /srv/miru/configs/v1/localization/primary.json
required: true
- key: secondary
name: Secondary
filepath: /srv/miru/configs/v1/localization/secondary.json
required: false
instance_format: json
created_at: '2021-01-01T00:00:00Z'
updated_at: '2021-01-01T00:00:00Z'
config_type_id: cfg_typ_124
language: jsonschema
format: json
example:
object: release
id: rls_123
version: v1.0.0
git_commit_id: git_commit_123
created_at: '2024-01-01T00:00:00Z'
updated_at: '2024-01-01T00:00:00Z'
BaseGroup:
title: Base Group
type: object
required:
- object
- id
- name
- parent_id
- created_at
- updated_at
properties:
object:
type: string
enum:
- group
example: group
x-stainless-const: true
description: The object type, which is always `group`.
id:
type: string
example: grp_123
description: ID of the group.
name:
type: string
example: production
description: Name of the group.
parent_id:
type: string
nullable: true
example: grp_456
description: ID of the parent group. Null for top-level groups.
created_at:
type: string
format: date-time
example: '2026-01-01T00:00:00Z'
description: Timestamp of when the group was created.
updated_at:
type: string
format: date-time
example: '2026-01-01T00:00:00Z'
description: Timestamp of when the group was last updated.
Group:
title: Group
allOf:
- $ref: '#/components/schemas/BaseGroup'
- type: object
properties:
parent:
allOf:
- $ref: '#/components/schemas/Group'
nullable: true
description: The parent group. Null for top-level groups. Expand using
`expand=parent` in the query string.
example:
object: group
id: grp_789
name: line-3
parent_id: grp_456
created_at: '2026-01-01T00:00:00Z'
updated_at: '2026-01-01T00:00:00Z'
Device:
allOf:
- $ref: '#/components/schemas/BaseDevice'
- type: object
required:
- group_id
properties:
group_id:
type: string
nullable: true
example: grp_123
description: ID of the group this device belongs to. Null if the device
is unassigned.
current_deployment:
allOf:
- $ref: '#/components/schemas/Deployment'
nullable: true
description: The current deployment for the device.
current_release:
allOf:
- $ref: '#/components/schemas/Release'
nullable: true
description: The current release for the device.
group:
allOf:
- $ref: '#/components/schemas/Group'
nullable: true
description: The group this device belongs to. Null if the device is unassigned.
example:
object: device
id: dvc_123
name: My Device
description: Welder on line 3
status: online
agent_version: v1.0.0
last_connected_at: '2021-01-01T00:00:00Z'
last_disconnected_at: null
created_at: '2021-01-01T00:00:00Z'
updated_at: '2021-01-01T00:00:00Z'
group_id: grp_123
DeploymentOrderBy:
type: string
enum:
- id:asc
- id:desc
- created_at:desc
- created_at:asc
x-enum-varnames:
- DEPLOYMENT_ORDER_BY_ID_ASC
- DEPLOYMENT_ORDER_BY_ID_DESC
- DEPLOYMENT_ORDER_BY_CREATED_AT_DESC
- DEPLOYMENT_ORDER_BY_CREATED_AT_ASC
default: created_at:desc
DeploymentListExpansion:
type: string
enum:
- total_count
- device
- release
- parent
- config_instances
x-enum-varnames:
- DEPLOYMENT_LIST_EXPAND_TOTAL_COUNT
- DEPLOYMENT_LIST_EXPAND_DEVICE
- DEPLOYMENT_LIST_EXPAND_RELEASE
- DEPLOYMENT_LIST_EXPAND_PARENT
- DEPLOYMENT_LIST_EXPAND_CONFIG_INSTANCES
DeploymentList:
title: Deployment List
allOf:
- $ref: '#/components/schemas/PaginatedList'
- type: object
required:
- data
properties:
data:
description: The list of deployments.
type: array
items:
$ref: '#/components/schemas/Deployment'
CreateDeploymentTargetStatus:
type: string
description: |
Desired state of the deployment.
`staged` means the deployment is ready for deployment. Deployments can only be staged if their release is not the device's current release.
`deployed` means the deployment should be deployed to the device. Deployments can only be deployed if their release is the device's current release.
enum:
- staged
- deployed
x-enum-varnames:
- CREATE_STAGED_DEPLOYMENT
- CREATE_DEPLOYED_DEPLOYMENT
CreateDeploymentRequest:
title: Create Deployment Request
type: object
required:
- target_status
- description
- release_id
- device_id
- config_instance_ids
properties:
target_status:
$ref: '#/components/schemas/CreateDeploymentTargetStatus'
description:
type: string
description: The description of the deployment.
example: Deployment for the motion control config instance
release_id:
type: string
description: The release ID which this deployment adheres to.
example: rls_123
parent_id:
type: string
nullable: true
description: |
Parent deployment ID used as an optimistic-concurrency token. Tristate:
- omitted: server fills with the device's current `target_deployment_id`; no concurrency check.
- null: caller asserts the device has no current target; 409 if it does.
- value: caller asserts the device's current target equals this ID; 409 if it does not match.
example: dpl_123
device_id:
type: string
description: The ID of the device that the deployment is being created for.
example: dvc_123
config_instance_ids:
type: array
description: The IDs of the config instances to deploy. A deployment must
include config instances according to the config schemas slots defined
in the release.
items:
type: string
example: cfg_inst_123
DeviceExpansion:
type: string
enum:
- current_deployment
- current_release
- group
x-enum-varnames:
- DEVICE_EXPAND_CURRENT_DEPLOYMENT
- DEVICE_EXPAND_CURRENT_RELEASE
- DEVICE_EXPAND_GROUP
UpdateDeviceRequest:
title: Update Device Request
type: object
properties:
name:
type: string
description: The new name of the device. If excluded from the request, the
device name is not updated.
example: Robot 1
DeviceOrderBy:
type: string
enum:
- id:asc
- id:desc
- created_at:desc
- created_at:asc
- status:asc
- status:desc
x-enum-varnames:
- DEVICE_ORDER_BY_ID_ASC
- DEVICE_ORDER_BY_ID_DESC
- DEVICE_ORDER_BY_CREATED_AT_DESC
- DEVICE_ORDER_BY_CREATED_AT_ASC
- DEVICE_ORDER_BY_STATUS_ASC
- DEVICE_ORDER_BY_STATUS_DESC
default: created_at:desc
DeviceListExpansion:
type: string
enum:
- total_count
- current_deployment
- current_release
- group
x-enum-varnames:
- DEVICE_LIST_EXPAND_TOTAL_COUNT
- DEVICE_LIST_EXPAND_CURRENT_DEPLOYMENT
- DEVICE_LIST_EXPAND_CURRENT_RELEASE
- DEVICE_LIST_EXPAND_GROUP
DeviceList:
allOf:
- $ref: '#/components/schemas/PaginatedList'
- type: object
required:
- data
properties:
data:
description: The list of devices.
type: array
items:
$ref: '#/components/schemas/Device'
CreateDeviceRequest:
title: Create Device Request
type: object
required:
- name
properties:
name:
type: string
description: The name of the device.
example: Robot 1
PingDeviceRequest:
title: Ping Device Request
type: object
required:
- timeout_nanos
properties:
timeout_nanos:
type: integer
format: int64
example: 1000000000
description: The timeout in nanoseconds to wait for the ping operation to
complete. The maximum timeout is 10 seconds.
PingResult:
type: string
enum:
- success
- timeout
x-enum-varnames:
- PING_RESULT_SUCCESS
- PING_RESULT_TIMEOUT
description: The result of the ping operation.
PingDeviceResponse:
title: Ping Device
type: object
required:
- code
properties:
code:
$ref: '#/components/schemas/PingResult'
round_trip_nanos:
type: integer
format: int64
example: 1000000000
description: The round trip time in nanoseconds to send the ping to the
device and receive the response. Only present when `code` is `success`.
example:
code: success
round_trip_nanos: 1000000000
ProvisioningToken:
title: Provisioning Token
type: object
required:
- token
- expires_at
properties:
token:
type: string
description: The provisioning token. This value is only returned when the
token is created.
example: mirupt_123
expires_at:
type: string
format: date-time
description: The expiration date and time of the token.
example: '2025-01-01T00:00:00Z'
example:
token: mirupt_123
expires_at: '2025-01-01T00:00:00Z'
GitRepositoryType:
type: string
enum:
- github
- gitlab
- bitbucket
x-enum-varnames:
- GIT_REPO_TYPE_GITHUB
- GIT_REPO_TYPE_GITLAB
- GIT_REPO_TYPE_BITBUCKET
BaseGitCommit:
title: Base Git Commit
type: object
required:
- object
- id
- sha
- message
- repository_owner
- repository_name
- repository_type
- repository_url
- commit_url
- created_at
properties:
object:
type: string
enum:
- git_commit
example: git_commit
x-stainless-const: true
description: The object type, which is always `git_commit`.
id:
type: string
example: git_commit_123
description: ID of the git commit.
sha:
type: string
example: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
description: The SHA hash of the git commit.
message:
type: string
example: Add basic motion configurations
description: The commit message.
repository_owner:
type: string
example: user
description: The owner of the git repository.
repository_name:
type: string
example: repo
description: The name of the git repository.
repository_type:
$ref: '#/components/schemas/GitRepositoryType'
repository_url:
type: string
example: https://github.com/user/repo
description: The URL of the git repository.
commit_url:
type: string
example: https://github.com/user/repo/commit/a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
description: The URL of the git commit.
created_at:
type: string
format: date-time
example: '2021-01-01T00:00:00Z'
description: Timestamp of when the git commit was created.
GitCommit:
title: Git Commit
allOf:
- $ref: '#/components/schemas/BaseGitCommit'
example:
object: git_commit
id: git_commit_123
sha: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
message: Add basic motion configurations
repository_owner: user
repository_name: repo
repository_type: github
repository_url: https://github.com/user/repo
commit_url: https://github.com/user/repo/commit/a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
created_at: '2021-01-01T00:00:00Z'
GitCommitOrderBy:
type: string
enum:
- id:asc
- id:desc
- created_at:desc
- created_at:asc
x-enum-varnames:
- GIT_COMMIT_ORDER_BY_ID_ASC
- GIT_COMMIT_ORDER_BY_ID_DESC
- GIT_COMMIT_ORDER_BY_CREATED_AT_DESC
- GIT_COMMIT_ORDER_BY_CREATED_AT_ASC
default: created_at:desc
GitCommitListExpansion:
type: string
enum:
- total_count
x-enum-varnames:
- GIT_COMMIT_LIST_EXPAND_TOTAL_COUNT
GitCommitList:
title: Git Commit List
allOf:
- $ref: '#/components/schemas/PaginatedList'
- type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/GitCommit'
description: The list of git commits.
CreateGitCommitRequest:
title: Git Commit Request
type: object
required:
- sha
- message
- origin
properties:
sha:
type: string
description: The SHA hash of the git commit.
example: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
message:
type: string
description: The commit message.
example: Update config schema for robot1
origin:
type: string
description: The URL of the git repository origin.
example: https://github.com/robot1/robot1.git
GroupExpansion:
type: string
enum:
- parent
x-enum-varnames:
- GROUP_EXPAND_PARENT
UpdateGroupRequest:
title: Update Group Request
type: object
properties:
name:
type: string
description: The updated name of the group.
example: Robots
GroupOrderBy:
type: string
enum:
- id:asc
- id:desc
- created_at:asc
- created_at:desc
- updated_at:asc
- updated_at:desc
- name:asc
- name:desc
x-enum-varnames:
- GROUP_ORDER_BY_ID_ASC
- GROUP_ORDER_BY_ID_DESC
- GROUP_ORDER_BY_CREATED_AT_ASC
- GROUP_ORDER_BY_CREATED_AT_DESC
- GROUP_ORDER_BY_UPDATED_AT_ASC
- GROUP_ORDER_BY_UPDATED_AT_DESC
- GROUP_ORDER_BY_NAME_ASC
- GROUP_ORDER_BY_NAME_DESC
default: created_at:desc
GroupListExpansion:
type: string
enum:
- total_count
- parent
x-enum-varnames:
- GROUP_LIST_EXPAND_TOTAL_COUNT
- GROUP_LIST_EXPAND_PARENT
GroupList:
title: Group List
allOf:
- $ref: '#/components/schemas/PaginatedList'
- type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/Group'
description: The list of groups.
CreateGroupRequest:
title: Create Group Request
type: object
required:
- name
properties:
name:
type: string
description: The name of the group.
example: Robots
parent_id:
type: string
nullable: true
description: ID of the parent group. Omit or set to null to create a top-level
group.
example: grp_456
MoveGroupRequest:
title: Move Group Request
type: object
required:
- parent_id
properties:
parent_id:
type: string
nullable: true
example: grp_456
description: ID of the new parent group. Set to null to make this a top-level
group.
Principal:
title: Principal
type: object
required:
- object
- id
- name
properties:
object:
type: string
enum:
- principal
example: principal
x-stainless-const: true
description: The object type, which is always `principal`.
id:
type: string
example: api_key_123
description: ID of the principal.
name:
type: string
example: My CI/CD Key
description: The display name of the principal.
example:
object: principal
id: api_key_123
name: My CI/CD Key
ReleaseExpansion:
type: string
enum:
- config_schemas
x-enum-varnames:
- RELEASE_EXPAND_CONFIG_SCHEMAS
ReleaseOrderBy:
type: string
enum:
- id:asc
- id:desc
- created_at:desc
- created_at:asc
x-enum-varnames:
- RELEASE_ORDER_BY_ID_ASC
- RELEASE_ORDER_BY_ID_DESC
- RELEASE_ORDER_BY_CREATED_AT_DESC
- RELEASE_ORDER_BY_CREATED_AT_ASC
default: created_at:desc
ReleaseListExpansion:
type: string
enum:
- total_count
- config_schemas
x-enum-varnames:
- RELEASE_LIST_EXPAND_TOTAL_COUNT
- RELEASE_LIST_EXPAND_CONFIG_SCHEMAS
ReleaseList:
title: Release List
allOf:
- $ref: '#/components/schemas/PaginatedList'
- type: object
required:
- data
properties:
data:
description: The list of releases.
type: array
items:
$ref: '#/components/schemas/Release'
CreateReleaseRequest:
title: Create Release Request
type: object
required:
- version
- config_schema_ids
properties:
version:
type: string
description: The version of the release.
example: v1.0.0
config_schema_ids:
type: array
description: The IDs of the config schemas included in the release.
items:
type: string
example: cfg_sch_123
git_commit_ref:
$ref: '#/components/schemas/GitCommitRef'
Event:
type: object
required:
- object
- timestamp
properties:
object:
type: string
enum:
- event
description: The object type, which is always `event`.
example: event
timestamp:
type: string
format: date-time
description: The timestamp of the event.
example: '2021-01-01T00:00:00Z'
example:
object: event
timestamp: '2021-01-01T00:00:00Z'
WebhookDeployment:
title: Webhook Deployment
type: object
required:
- object
- id
- device_id
- release_id
- created_at
properties:
object:
type: string
enum:
- deployment
example: deployment
x-stainless-const: true
description: The object type, which is always `deployment`.
id:
type: string
example: dpl_123
description: ID of the deployment.
device_id:
type: string
example: dvc_123
description: ID of the device.
release_id:
type: string
example: rls_123
description: ID of the release.
created_at:
type: string
format: date-time
example: '2024-01-01T00:00:00Z'
description: Timestamp of when the deployment was created.
example:
object: deployment
id: dpl_123
device_id: dvc_123
release_id: rls_123
created_at: '2024-01-01T00:00:00Z'
ValidateDeploymentEvent:
x-summary: A deployment requires custom validation before it can be applied.
allOf:
- $ref: '#/components/schemas/Event'
- type: object
required:
- type
- data
properties:
type:
type: string
description: The type of event.
enum:
- deployment.validate
example: deployment.validate
data:
type: object
description: The deployment data associated with the event.
required:
- deployment
properties:
deployment:
$ref: '#/components/schemas/WebhookDeployment'
parameters:
MiruVersion:
name: Miru-Version
in: header
required: true
schema:
type: string
example: 2026-08-17.everglades
description: The API version the client was built against.
config_instance_id:
name: config_instance_id
in: path
required: true
description: The unique identifier of the config instance.
schema:
type: string
example: cfg_inst_123
config_instance_expansions:
name: expand
in: query
required: false
description: Fields to expand on the config instance resource.
schema:
type: array
items:
$ref: '#/components/schemas/ConfigInstanceExpansion'
example:
- content
offset:
name: offset
in: query
required: false
description: The offset of the items to return. An offset of 10 with a limit
of 10 returns items 11-20.
schema:
type: integer
default: 0
minimum: 0
example: 0
limit:
name: limit
in: query
required: false
description: The maximum number of items to return. A limit of 15 with an offset
of 0 returns items 1-15.
schema:
type: integer
default: 10
minimum: 1
maximum: 100
example: 10
config_instance_order_bys:
name: order_by
in: query
required: false
style: form
explode: false
description: Sort order for the config instance results.
schema:
type: array
items:
$ref: '#/components/schemas/ConfigInstanceOrderBy'
example:
- created_at:desc
config_instance_list_expansions:
name: expand
in: query
required: false
description: Fields to expand on each config instance in the list.
schema:
type: array
items:
$ref: '#/components/schemas/ConfigInstanceListExpansion'
example:
- content
config_instance_search_id:
name: id
in: query
required: false
style: form
explode: false
description: The config instance IDs to filter by.
schema:
type: array
items:
type: string
example:
- cfg_inst_123
config_instance_search_config_schema_id:
name: config_schema_id
in: query
required: false
style: form
explode: false
description: The config schema IDs to filter by.
schema:
type: array
items:
type: string
example:
- cfg_sch_123
config_instance_search_config_type_id:
name: config_type_id
in: query
required: false
style: form
explode: false
description: The config type IDs to filter by.
schema:
type: array
items:
type: string
example:
- cfg_typ_123
config_instance_search_slot_key:
name: slot_key
in: query
required: false
style: form
explode: false
description: The config schema slot keys to filter by.
schema:
type: array
items:
type: string
example:
- controller_2
disposition:
name: disposition
in: query
required: false
description: Controls the Content-Disposition behavior. Use `inline` to display
in browser or `attachment` to trigger a file download.
schema:
type: string
enum:
- inline
- attachment
default: inline
example: inline
config_schema_id:
name: config_schema_id
in: path
required: true
description: The unique identifier of the config schema.
schema:
type: string
example: cfg_sch_123
config_schema_expansions:
name: expand
in: query
required: false
description: Fields to expand on the config schema resource.
schema:
type: array
items:
$ref: '#/components/schemas/ConfigSchemaExpansion'
example:
- documents
config_schema_order_bys:
name: order_by
in: query
required: false
style: form
explode: false
description: Sort order for the config schema results.
schema:
type: array
items:
$ref: '#/components/schemas/ConfigSchemaOrderBy'
example:
- created_at:desc
config_schema_list_expansions:
name: expand
in: query
required: false
description: Fields to expand on each config schema in the list.
schema:
type: array
items:
$ref: '#/components/schemas/ConfigSchemaListExpansion'
example:
- documents
config_schema_search_id:
name: id
in: query
required: false
style: form
explode: false
description: The config schema IDs to filter by.
schema:
type: array
items:
type: string
example:
- cfg_sch_123
config_schema_search_config_type_id:
name: config_type_id
in: query
required: false
style: form
explode: false
description: The config type IDs to filter by.
schema:
type: array
items:
type: string
example:
- cfg_typ_123
config_type_id:
name: config_type_id
in: path
required: true
description: The unique identifier of the config type.
schema:
type: string
example: cfg_typ_123
config_type_order_bys:
name: order_by
in: query
required: false
style: form
explode: false
description: Sort order for the config type results.
schema:
type: array
items:
$ref: '#/components/schemas/ConfigTypeOrderBy'
example:
- created_at:desc
config_type_list_expansions:
name: expand
in: query
required: false
description: Fields to expand on each config type in the list.
x-miru-example-exempt: true
schema:
type: array
items:
$ref: '#/components/schemas/ConfigTypeListExpansion'
config_type_search_id:
name: id
in: query
required: false
style: form
explode: false
description: The config type IDs to filter by.
schema:
type: array
items:
type: string
example:
- cfg_typ_123
config_type_search_name:
name: name
in: query
required: false
style: form
explode: false
description: The config type names to filter by.
schema:
type: array
items:
type: string
example:
- Motion Control
config_type_search_slug:
name: slug
in: query
required: false
style: form
explode: false
description: The config type slugs to filter by.
schema:
type: array
items:
type: string
example:
- motion-control
deployment_id:
name: deployment_id
in: path
required: true
description: The unique identifier of the deployment.
schema:
type: string
example: dpl_123
deployment_expansions:
name: expand
in: query
required: false
description: Fields to expand on the deployment resource.
schema:
type: array
items:
$ref: '#/components/schemas/DeploymentExpansion'
example:
- device
deployment_order_bys:
name: order_by
in: query
required: false
style: form
explode: false
description: Sort order for the deployment results.
schema:
type: array
items:
$ref: '#/components/schemas/DeploymentOrderBy'
example:
- created_at:desc
deployment_list_expansions:
name: expand
in: query
required: false
description: Fields to expand on each deployment in the list.
schema:
type: array
items:
$ref: '#/components/schemas/DeploymentListExpansion'
example:
- device
deployment_search_id:
name: id
in: query
required: false
style: form
explode: false
description: The deployment IDs to filter by.
schema:
type: array
items:
type: string
example:
- dpl_123
deployment_search_target_status:
name: target_status
in: query
required: false
style: form
explode: false
description: The deployment target statuses to filter by.
schema:
type: array
items:
$ref: '#/components/schemas/DeploymentTargetStatus'
example:
- staged
deployment_search_activity_status:
name: activity_status
in: query
required: false
style: form
explode: false
description: The deployment activity statuses to filter by.
schema:
type: array
items:
$ref: '#/components/schemas/DeploymentActivityStatus'
example:
- drifted
deployment_search_error_status:
name: error_status
in: query
required: false
style: form
explode: false
description: The deployment error statuses to filter by.
schema:
type: array
items:
$ref: '#/components/schemas/DeploymentErrorStatus'
example:
- none
deployment_search_device_id:
name: device_id
in: query
required: false
style: form
explode: false
description: The deployment device IDs to filter by.
schema:
type: array
items:
type: string
example:
- dvc_123
deployment_search_release_id:
name: release_id
in: query
required: false
style: form
explode: false
description: The deployment release IDs to filter by.
schema:
type: array
items:
type: string
example:
- rls_123
device_id:
name: device_id
in: path
required: true
description: The unique identifier of the device.
schema:
type: string
example: dvc_123
device_expansions:
name: expand
in: query
required: false
description: Fields to expand on the device resource.
schema:
type: array
items:
$ref: '#/components/schemas/DeviceExpansion'
example:
- current_release
device_order_bys:
name: order_by
in: query
required: false
style: form
explode: false
description: Sort order for the device results.
schema:
type: array
items:
$ref: '#/components/schemas/DeviceOrderBy'
example:
- created_at:desc
device_list_expansions:
name: expand
in: query
required: false
description: Fields to expand on each device in the list.
schema:
type: array
items:
$ref: '#/components/schemas/DeviceListExpansion'
example:
- current_release
device_search_id:
name: id
in: query
required: false
style: form
explode: false
description: The device IDs to filter by.
schema:
type: array
items:
type: string
example:
- dev_123
device_search_name:
name: name
in: query
required: false
style: form
explode: false
description: The device names to filter by.
schema:
type: array
items:
type: string
example:
- My Device
device_search_agent_version:
name: agent_version
in: query
required: false
style: form
explode: false
description: The agent versions to filter by.
schema:
type: array
items:
type: string
example:
- v1.0.0
device_search_current_release_id:
name: current_release_id
in: query
required: false
style: form
explode: false
description: The release IDs to filter devices by their current release.
schema:
type: array
items:
type: string
example:
- rls_123
device_search_group_id:
name: group_id
in: query
required: false
style: form
explode: false
description: The group IDs to filter devices by.
schema:
type: array
items:
type: string
example:
- grp_123
device_search_status:
name: status
in: query
required: false
style: form
explode: false
description: The device statuses to filter by.
schema:
type: array
items:
$ref: '#/components/schemas/DeviceStatus'
example:
- online
git_commit_id:
name: git_commit_id
in: path
required: true
description: The unique identifier of the git commit.
schema:
type: string
example: git_commit_123
git_commit_order_bys:
name: order_by
in: query
required: false
style: form
explode: false
description: Sort order for the git commit results.
schema:
type: array
items:
$ref: '#/components/schemas/GitCommitOrderBy'
example:
- created_at:desc
git_commit_list_expansions:
name: expand
in: query
required: false
description: Fields to expand on each git commit in the list.
x-miru-example-exempt: true
schema:
type: array
items:
$ref: '#/components/schemas/GitCommitListExpansion'
git_commit_search_id:
name: id
in: query
required: false
style: form
explode: false
description: The git commit IDs to filter by.
schema:
type: array
items:
type: string
example:
- git_cmt_123
git_commit_search_sha:
name: sha
in: query
required: false
style: form
explode: false
description: The git commit SHAs to filter by.
schema:
type: array
items:
type: string
example:
- a1b2c3d4e5f6
group_id:
name: group_id
in: path
required: true
description: The unique identifier of the group.
schema:
type: string
example: grp_123
group_expansions:
name: expand
in: query
required: false
description: Fields to expand on the group resource.
schema:
type: array
items:
$ref: '#/components/schemas/GroupExpansion'
example:
- parent
group_order_bys:
name: order_by
in: query
required: false
style: form
explode: false
description: Sort order for the group results.
schema:
type: array
items:
$ref: '#/components/schemas/GroupOrderBy'
example:
- created_at:desc
group_list_expansions:
name: expand
in: query
required: false
description: Fields to expand on each group in the list.
schema:
type: array
items:
$ref: '#/components/schemas/GroupListExpansion'
example:
- parent
group_search_id:
name: id
in: query
required: false
style: form
explode: false
description: The group IDs to filter by.
schema:
type: array
items:
type: string
example:
- grp_123
group_search_name:
name: name
in: query
required: false
style: form
explode: false
description: The group names to filter by.
schema:
type: array
items:
type: string
example:
- production
group_search_parent_id:
name: parent_id
in: query
required: false
style: form
explode: false
description: The parent group IDs to filter by.
schema:
type: array
items:
type: string
example:
- grp_456
release_id:
name: release_id
in: path
required: true
description: The unique identifier of the release.
schema:
type: string
example: rls_123
release_expansions:
name: expand
in: query
required: false
description: Fields to expand on the release resource.
schema:
type: array
items:
$ref: '#/components/schemas/ReleaseExpansion'
example:
- config_schemas
release_order_bys:
name: order_by
in: query
required: false
style: form
explode: false
description: Sort order for the release results.
schema:
type: array
items:
$ref: '#/components/schemas/ReleaseOrderBy'
example:
- created_at:desc
release_list_expansions:
name: expand
in: query
required: false
description: Fields to expand on each release in the list.
schema:
type: array
items:
$ref: '#/components/schemas/ReleaseListExpansion'
example:
- config_schemas
release_search_id:
name: id
in: query
required: false
style: form
explode: false
description: The release IDs to filter by.
schema:
type: array
items:
type: string
example:
- rls_123
release_search_version:
name: version
in: query
required: false
style: form
explode: false
description: The release versions to filter by.
schema:
type: array
items:
type: string
example:
- v1.0.0