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`. --- View with [code]smith Autofix with [code]smith 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