Browse documentationWorkspace selection

Identity

Select the workspace once

A Duet integration should resolve its target workspace before it starts work. An ordinary credential belongs to one workspace: the slug in the key scope and the slug in a workspace-addressed operation must agree, and callers cannot use one workspace's grant to reach another. The one user-wide kind, the sync device, is documented with keys and scopes.

Keep human choice visible

When a user belongs to several workspaces, display the selected workspace and persist its stable identity with the integration configuration. Do not guess from the most recently visited browser page or fall back to the first membership.

Slugs are addresses

Slugs make workspace routes and scopes readable, but they are still protocol identifiers. Validate them with the shared contract grammar, encode dynamic path segments, and plan for a rename to break old public URLs rather than hiding the break behind an ambiguous redirect.

Do not mix scopes

A credential request may include several capabilities for one workspace. A request spanning two workspace slugs is rejected; authorize each workspace independently so revocation and auditing stay local.

Invite workspace members

Workspace owners may change member roles, but the durable workspace domain preserves two invariants: every workspace retains an owner, and the designated payer remains an owner until billing is reassigned. Consumers should surface the conflict rather than trying to sequence a client-side workaround.

Audit events are returned newest-first with opaque cursors. Treat a cursor as a continuation token, not as a timestamp or stable event identifier.

Set the agent tier fallback

Owners can set a workspace's default tier through the single-purpose default-model endpoint using { "tier": "frontier" | "balanced" | "economy" }. This is a fallback for sessions without a sticky choice, not a rewrite of queued prompts or existing session preferences. Paid tiers require an active subscription from the workspace billing owner.

Only owners can create, list, or revoke invitations. Invitations are bound to one canonical email, expire after seven days, and grant either editor or viewer access.

Lifecycle and path repair

Workspace creation returns while provisioning continues. Reprovisioning is an owner-only recovery operation, not a retry strategy for ordinary request failures. Renaming requires an explicit acknowledgement because workspace-scoped URLs change.

Apps, publishes, and share roots retain path anchors. List anchors to diagnose a moved path; repair only an anchor in the broken state, using the capability that owns its kind.

Read VM telemetry history

Workspace members can read the VM's recent CPU, memory, and disk history. The optional sinceAt query value is a Unix timestamp in milliseconds; without it, the service returns the retained 30-day window. Long windows are downsampled to a bounded chart response, so treat points as trend buckets rather than exact latest readings. Memory and disk expose used and total values separately, and an absent metric means that sample could not observe it.

Identity

17 operations
GET/v1/whoami

Inspect the authenticated user, workspace memberships, and granted scopes.

Scope
api_key
Request
No JSON request body
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "user": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "email": {
          "type": "string",
          "format": "email",
          "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "email"
      ],
      "additionalProperties": false
    },
    "workspaces": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "provisioning",
              "active",
              "unhealthy",
              "archived",
              "retired",
              "deleted"
            ]
          },
          "servicingStatus": {
            "type": "string",
            "enum": [
              "active",
              "paused",
              "banned"
            ]
          },
          "servicingStatusChangedAt": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "editor",
              "viewer"
            ]
          },
          "billingUserId": {
            "type": "string"
          },
          "funding": {
            "type": "object",
            "properties": {
              "plan": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "starter",
                      "pro",
                      "max"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "active": {
                "type": "boolean"
              },
              "trialEndsAt": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "plan",
              "active"
            ],
            "additionalProperties": false
          },
          "defaultTier": {
            "type": "object",
            "properties": {
              "configured": {
                "type": "string",
                "enum": [
                  "frontier",
                  "balanced",
                  "economy"
                ]
              },
              "effective": {
                "type": "string",
                "enum": [
                  "frontier",
                  "balanced",
                  "economy"
                ]
              },
              "access": {
                "type": "string",
                "enum": [
                  "all_tiers",
                  "economy_only"
                ]
              }
            },
            "required": [
              "effective",
              "access"
            ],
            "additionalProperties": false
          },
          "duetName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32,
            "pattern": "^[^[\\]<>`\\p{Cc}]*$"
          },
          "purpose": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "onboardedAt": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "onboarding": {
            "type": "object",
            "properties": {
              "starterAgents": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "starterAgents"
            ],
            "additionalProperties": false
          },
          "adminMessage": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "name",
          "status",
          "servicingStatus",
          "role",
          "billingUserId",
          "funding",
          "defaultTier"
        ],
        "additionalProperties": false
      }
    },
    "scopes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "versions": {
      "type": "object",
      "properties": {
        "api": {
          "type": "number",
          "const": 1
        }
      },
      "required": [
        "api"
      ],
      "additionalProperties": false
    },
    "internalAdmin": {
      "type": "boolean"
    },
    "credential": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "user",
            "system_vm",
            "app",
            "impersonation",
            "browser_session",
            "sync_device",
            "oauth"
          ]
        },
        "audience": {
          "type": "string",
          "format": "uri"
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "user",
    "workspaces",
    "scopes",
    "versions",
    "internalAdmin"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
POST/v1/workspaces

Create a workspace and begin asynchronous provisioning.

Scope
api_key
Request
Request JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "name": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "slug",
    "name"
  ]
}
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "const": "provisioning"
    }
  },
  "required": [
    "workspaceId",
    "slug",
    "status"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
POST/v1/ws/{workspaceSlug}/reprovision

Replace an owner-managed workspace runtime after an explicit recovery request.

Scope
ws:{workspaceSlug}:admin
Request
No request body
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "provisioning"
        },
        "workspaceId": {
          "type": "string"
        },
        "scheduled": {
          "type": "boolean"
        },
        "oldVmName": {
          "type": "string"
        },
        "imageRef": {
          "type": "string"
        },
        "archiveStorageId": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "workspaceId",
        "scheduled"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "deferred"
        },
        "reason": {
          "type": "string",
          "const": "active_workspace_work"
        },
        "activeAgentSessions": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "activeTrainJobs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "status",
        "reason",
        "activeAgentSessions",
        "activeTrainJobs"
      ],
      "additionalProperties": false
    }
  ]
}
Delivery
Standard response
Retry
Not declared idempotent
PATCH/v1/workspaces/{workspaceSlug}

Rename a workspace after acknowledging that its public addresses will break.

Scope
ws:{workspaceSlug}:admin
Request
Request JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "publicUrlBreakAcknowledged": {
      "type": "boolean",
      "const": true
    }
  },
  "required": [
    "slug",
    "publicUrlBreakAcknowledged"
  ]
}
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "const": true
    },
    "breaksPublicUrls": {
      "type": "boolean",
      "const": true
    }
  },
  "required": [
    "ok",
    "breaksPublicUrls"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
PUT/v1/ws/{workspaceSlug}/admin/suspension

Suspend or resume an owner-managed workspace.

Scope
ws:{workspaceSlug}:admin
Request
Request JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "suspended": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "suspended"
  ]
}
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "suspended": {
          "type": "boolean",
          "const": true
        },
        "suspendedAt": {
          "type": "number"
        },
        "suspensionReason": {
          "type": "string"
        }
      },
      "required": [
        "suspended",
        "suspendedAt"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "suspended": {
          "type": "boolean",
          "const": false
        }
      },
      "required": [
        "suspended"
      ],
      "additionalProperties": false
    }
  ]
}
Delivery
Standard response
Retry
Not declared idempotent
GET/v1/ws/{workspaceSlug}/admin/suspension

Read whether the workspace is suspended, since when, and why.

Scope
ws:{workspaceSlug}:admin
Request
No JSON request body
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "suspended": {
          "type": "boolean",
          "const": true
        },
        "suspendedAt": {
          "type": "number"
        },
        "suspensionReason": {
          "type": "string"
        }
      },
      "required": [
        "suspended",
        "suspendedAt"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "suspended": {
          "type": "boolean",
          "const": false
        }
      },
      "required": [
        "suspended"
      ],
      "additionalProperties": false
    }
  ]
}
Delivery
Standard response
Retry
Not declared idempotent
GET/v1/ws/{workspaceSlug}/anchors

List path anchors and their current health.

Scope
ws:{workspaceSlug}:files:read
Request
No JSON request body
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "anchors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "workspaceId": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "app",
              "agent",
              "publish",
              "share-root",
              "share-mount"
            ]
          },
          "settings": {},
          "state": {
            "type": "string",
            "enum": [
              "active",
              "broken",
              "orphaned"
            ]
          },
          "createdAt": {
            "type": "number"
          },
          "updatedAt": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "workspaceId",
          "path",
          "kind",
          "settings",
          "state",
          "createdAt",
          "updatedAt"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "anchors"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
POST/v1/ws/{workspaceSlug}/anchors/{anchorId}/reanchor

Repair a broken anchor after its workspace path moves.

Scope
ws:{workspaceSlug}:apps or ws:{workspaceSlug}:publish or ws:{workspaceSlug}:share
Request
Request JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "path": {
      "type": "string"
    }
  },
  "required": [
    "path"
  ]
}
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "anchor": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "workspaceId": {
          "type": "string"
        },
        "path": {
          "type": "string"
        },
        "kind": {
          "type": "string",
          "enum": [
            "app",
            "agent",
            "publish",
            "share-root",
            "share-mount"
          ]
        },
        "settings": {},
        "state": {
          "type": "string",
          "enum": [
            "active",
            "broken",
            "orphaned"
          ]
        },
        "createdAt": {
          "type": "number"
        },
        "updatedAt": {
          "type": "number"
        }
      },
      "required": [
        "id",
        "workspaceId",
        "path",
        "kind",
        "settings",
        "state",
        "createdAt",
        "updatedAt"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "anchor"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
GET/v1/ws/{workspaceSlug}/members

List current workspace members and the designated payer.

Scope
ws:{workspaceSlug}:files:read
Request
No JSON request body
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "name": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "editor",
              "viewer"
            ]
          },
          "isBillingUser": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "email",
          "role",
          "isBillingUser"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "members"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
PATCH/v1/ws/{workspaceSlug}/members/{userId}

Change a member role while preserving payer and final-owner invariants.

Scope
ws:{workspaceSlug}:admin
Request
Request JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "role": {
      "type": "string",
      "enum": [
        "owner",
        "editor",
        "viewer"
      ]
    }
  },
  "required": [
    "role"
  ]
}
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "member": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "email": {
          "type": "string",
          "format": "email",
          "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
        },
        "name": {
          "type": "string"
        },
        "role": {
          "type": "string",
          "enum": [
            "owner",
            "editor",
            "viewer"
          ]
        },
        "isBillingUser": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "email",
        "role",
        "isBillingUser"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "member"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
DELETE/v1/ws/{workspaceSlug}/members/{userId}

Remove a member after payer and final-owner checks pass.

Scope
ws:{workspaceSlug}:admin
Request
No JSON request body
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "removed": {
      "type": "boolean"
    }
  },
  "required": [
    "removed"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
PUT/v1/ws/{workspaceSlug}/default-model

Set the workspace model role used when a session has no sticky choice.

Scope
ws:{workspaceSlug}:admin
Request
Request JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "tier": {
      "type": "string",
      "enum": [
        "frontier",
        "balanced",
        "economy"
      ]
    }
  },
  "required": [
    "tier"
  ]
}
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "tier": {
      "type": "string",
      "enum": [
        "frontier",
        "balanced",
        "economy"
      ]
    }
  },
  "required": [
    "tier"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
GET/v1/ws/{workspaceSlug}/audit

Page through newest-first workspace audit events.

Scope
ws:{workspaceSlug}:files:read
Request
No JSON request body
Query
Query parameters JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string"
    },
    "limit": {
      "default": 25,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  }
}
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "event": {
            "type": "string"
          },
          "actorId": {
            "type": "string"
          },
          "at": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "provenance": {
            "type": "object",
            "properties": {
              "action": {
                "type": "string"
              },
              "activeAgentSessions": {
                "type": "number"
              },
              "activeTrainJobs": {
                "type": "number"
              },
              "actor": {
                "type": "string"
              },
              "acknowledged": {
                "type": "boolean"
              },
              "agentVersion": {
                "type": "string"
              },
              "anchorId": {
                "type": "string"
              },
              "appId": {
                "type": "string"
              },
              "appSlug": {
                "type": "string"
              },
              "agentId": {
                "type": "string"
              },
              "archiveStorageId": {
                "type": "string"
              },
              "breaksPublicUrls": {
                "type": "boolean"
              },
              "canonicalEmail": {
                "type": "string"
              },
              "candidates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "fromPath": {
                      "type": "string"
                    },
                    "toPath": {
                      "type": "string"
                    },
                    "confidence": {
                      "type": "number"
                    },
                    "inodeMatch": {
                      "type": "boolean"
                    },
                    "markerMatch": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "fromPath",
                    "toPath",
                    "confidence",
                    "inodeMatch",
                    "markerMatch"
                  ],
                  "additionalProperties": false
                }
              },
              "conflictingAnchorId": {
                "type": "string"
              },
              "conflictingPath": {
                "type": "string"
              },
              "confidence": {
                "type": "number"
              },
              "consecutiveMissingPolls": {
                "type": "number"
              },
              "deleted": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "deviceCode": {
                "type": "string"
              },
              "deviceId": {
                "type": "string"
              },
              "deviceName": {
                "type": "string"
              },
              "defaultModelId": {
                "type": "string"
              },
              "tier": {
                "type": "string",
                "enum": [
                  "frontier",
                  "balanced",
                  "economy"
                ]
              },
              "expiresAt": {
                "type": "number"
              },
              "fromPath": {
                "type": "string"
              },
              "fromWorkspaceId": {
                "type": "string"
              },
              "gatewayVersion": {
                "type": "string"
              },
              "generation": {
                "type": "string"
              },
              "imageRef": {
                "type": "string"
              },
              "imageVersion": {
                "type": "string"
              },
              "inodeMatch": {
                "type": "boolean"
              },
              "installMode": {
                "type": "string",
                "enum": [
                  "subscribe",
                  "clone_once"
                ]
              },
              "kind": {
                "type": "string",
                "enum": [
                  "app",
                  "agent",
                  "publish",
                  "share-root",
                  "share-mount",
                  "file",
                  "folder"
                ]
              },
              "lastHeartbeatAt": {
                "type": "number"
              },
              "listingId": {
                "type": "string"
              },
              "listingSlug": {
                "type": "string"
              },
              "markerMatch": {
                "type": "boolean"
              },
              "memberUserId": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "newBillingUserId": {
                "type": "string"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "read",
                  "write"
                ]
              },
              "mountPath": {
                "type": "string"
              },
              "newSlug": {
                "type": "string"
              },
              "oldPrefixes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "oldBillingUserId": {
                "type": "string"
              },
              "oldSlug": {
                "type": "string"
              },
              "parentShareId": {
                "type": "string"
              },
              "path": {
                "type": "string"
              },
              "prefix": {
                "type": "string"
              },
              "prefixes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "previousVmName": {
                "type": "string"
              },
              "publishId": {
                "type": "string"
              },
              "reason": {
                "type": "string"
              },
              "revokedShareIds": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "role": {
                "type": "string",
                "enum": [
                  "owner",
                  "editor",
                  "viewer"
                ]
              },
              "oldRole": {
                "type": "string",
                "enum": [
                  "owner",
                  "editor",
                  "viewer"
                ]
              },
              "scopes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "sessionId": {
                "type": "string"
              },
              "shareId": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "source": {
                "type": "string"
              },
              "subscriptionId": {
                "type": "string"
              },
              "targetEmail": {
                "type": "string"
              },
              "toPath": {
                "type": "string"
              },
              "toWorkspaceId": {
                "type": "string"
              },
              "userCode": {
                "type": "string"
              },
              "visibility": {
                "type": "string",
                "enum": [
                  "folder",
                  "public"
                ]
              },
              "vmName": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "id",
          "event",
          "actorId",
          "at"
        ],
        "additionalProperties": false
      }
    },
    "cursor": {
      "type": "string"
    },
    "done": {
      "type": "boolean"
    }
  },
  "required": [
    "events",
    "done"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
GET/v1/ws/{workspaceSlug}/telemetry

Read the workspace VM CPU, memory, and disk telemetry history.

Scope
workspace_member
Request
No JSON request body
Query
Query parameters JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "sinceAt": {
      "type": "number",
      "minimum": 0
    }
  }
}
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "samples": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "at": {
            "type": "number",
            "minimum": 0
          },
          "cpuPct": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "memUsedMb": {
            "type": "number",
            "minimum": 0
          },
          "memTotalMb": {
            "type": "number",
            "minimum": 0
          },
          "diskUsedMb": {
            "type": "number",
            "minimum": 0
          },
          "diskTotalMb": {
            "type": "number",
            "minimum": 0
          }
        },
        "required": [
          "at"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "samples"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
POST/v1/ws/{workspaceSlug}/invites

Invite an editor or viewer by canonical email address.

Scope
ws:{workspaceSlug}:members
Request
Request JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "role": {
      "description": "Defaults to editor.",
      "type": "string",
      "enum": [
        "editor",
        "viewer"
      ]
    }
  },
  "required": [
    "email"
  ]
}
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "role": {
      "type": "string",
      "enum": [
        "editor",
        "viewer"
      ]
    },
    "expiresAt": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "revokedAt": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "consumedAt": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "id",
    "email",
    "role",
    "expiresAt"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
GET/v1/ws/{workspaceSlug}/invites

List recent invitations for a workspace.

Scope
ws:{workspaceSlug}:members
Request
No JSON request body
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "invites": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "role": {
            "type": "string",
            "enum": [
              "editor",
              "viewer"
            ]
          },
          "expiresAt": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "revokedAt": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "consumedAt": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "id",
          "email",
          "role",
          "expiresAt"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "invites"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Not declared idempotent
DELETE/v1/ws/{workspaceSlug}/invites/{inviteId}

Revoke an invitation before it is consumed.

Scope
ws:{workspaceSlug}:members
Request
No JSON request body
Response
Response JSON schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "revokedAt": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "revokedAt"
  ],
  "additionalProperties": false
}
Delivery
Standard response
Retry
Declared idempotent