Skip to content

API reference

Schemas

Every request and response body, with field types and constraints.

On this page

Every request and response body in the API, generated from the OpenAPI document. Fields marked required are always present in responses and must be sent in requests.

AbuseFlagDto

FieldTypeRequiredDescription
actionstringYesstopped (a trial machine) or flagged (a paid machine, still running).
created_atstringYes
idstring (uuid)Yes
kindstringYessustained_cpu: every vCPU at full load for the whole window.
machine_idstring (uuid)Yes
min_cpu_permilleintegerYesLowest per-minute CPU use in the window, in thousandths of the machine's vCPU limit (1000 = every vCPU fully used).
organization_idstring (uuid)Yes
window_secondsintegerYes
window_startstringYes
resolutionstring | nullNo
resolution_notestring | nullNo
resolved_atstring | nullNo
stop_operation_idstring (uuid) | nullNo
Example
{
  "action": "string",
  "created_at": "string",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "kind": "string",
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "min_cpu_permille": 0,
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "resolution": "string",
  "resolution_note": "string",
  "resolved_at": "string",
  "stop_operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "window_seconds": 0,
  "window_start": "string"
}

AbuseFlagPage

FieldTypeRequiredDescription
itemsAbuseFlagDto[]Yes
Example
{
  "items": [
    {
      "action": "string",
      "created_at": "string",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "kind": "string",
      "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "min_cpu_permille": 0,
      "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "resolution": "string",
      "resolution_note": "string",
      "resolved_at": "string",
      "stop_operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "window_seconds": 0,
      "window_start": "string"
    }
  ]
}

AbuseFlagStatusDto

One of: open, all.

AcceptInvitationRequest

FieldTypeRequiredDescription
tokenstringYes
Example
{
  "token": "string"
}

AccessDto

Whether an account (or an organization) may spend money while the service is invite-only. With open access everything is approved.

One of: approved, waitlisted.

AccessGrantCreatedDto

FieldTypeRequiredDescription
createdbooleanYesFalse when an active grant already named this person (returned as it is).
grantAccessGrantDtoYes
Example
{
  "created": false,
  "grant": {
    "created_at": "string",
    "credited_at": "string",
    "credited_organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "email": "ada@example.com",
    "granted_by": "string",
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "initial_credit_micros": 0,
    "provider": "github",
    "reason": "string",
    "revoke_reason": "string",
    "revoked_at": "string",
    "revoked_by": "string",
    "subject": "string"
  }
}

AccessGrantDto

FieldTypeRequiredDescription
created_atstringYes
granted_bystringYes
idstring (uuid)Yes
credited_atstring | nullNo
credited_organization_idstring (uuid) | nullNoWhere the initial credit went, once credited.
emailstring | nullNoSet for a grant by verified email.
initial_credit_microsinteger | nullNo
providerstring | nullNoSet (with subject) for a grant of one sign-in identity.
reasonstring | nullNo
revoke_reasonstring | nullNo
revoked_atstring | nullNo
revoked_bystring | nullNo
subjectstring | nullNo
Example
{
  "created_at": "string",
  "credited_at": "string",
  "credited_organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "email": "ada@example.com",
  "granted_by": "string",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "initial_credit_micros": 0,
  "provider": "github",
  "reason": "string",
  "revoke_reason": "string",
  "revoked_at": "string",
  "revoked_by": "string",
  "subject": "string"
}

AccessGrantPage

FieldTypeRequiredDescription
itemsAccessGrantDto[]Yes
Example
{
  "items": [
    {
      "created_at": "string",
      "credited_at": "string",
      "credited_organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "email": "ada@example.com",
      "granted_by": "string",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "initial_credit_micros": 0,
      "provider": "github",
      "reason": "string",
      "revoke_reason": "string",
      "revoked_at": "string",
      "revoked_by": "string",
      "subject": "string"
    }
  ]
}

AccessModeDto

One of: open, invite_only.

ActiveOrganizationDto

FieldTypeRequiredDescription
active_organization_idstring (uuid) | nullNo
Example
{
  "active_organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

ActiveOrganizationRequest

FieldTypeRequiredDescription
organization_idstring (uuid) | nullNoAn organization the caller belongs to, or null to clear it.
Example
{
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

AgentAttachmentRequest

FieldTypeRequiredDescription
content_base64stringYesThe file's bytes (standard base64), at most 8 MiB decoded.
namestringYesThe file name the agent sees: 1-128 bytes, one path component.
media_typestring | nullNotype/subtype; image/* attachments are also passed to the agent as images where it accepts them.
Example
{
  "content_base64": "string",
  "media_type": "string",
  "name": "dev"
}

AgentConversationDto

FieldTypeRequiredDescription
created_atstring (date-time)Yes
events_urlstringYes
idstring (uuid)Yes
machine_idstring (uuid)Yes
providerAgentProviderDtoYes
statusAgentConversationStatusDtoYes
turn_countintegerYes
updated_atstring (date-time)Yes
latest_turnnull | AgentTurnDtoNo
Example
{
  "created_at": "2026-10-12T05:51:01Z",
  "events_url": "string",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "latest_turn": {
    "conversation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "created_at": "2026-10-12T05:51:01Z",
    "error_code": "string",
    "events_url": "string",
    "exit_code": 0,
    "finished_at": "2026-10-12T05:51:01Z",
    "interrupt_requested": false,
    "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "model": "string",
    "provider": "claude",
    "reasoning_effort": "minimal",
    "resume": false,
    "started_at": "2026-10-12T05:51:01Z",
    "status": "starting",
    "turn_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
  },
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "provider": "claude",
  "status": "idle",
  "turn_count": 0,
  "updated_at": "2026-10-12T05:51:01Z"
}

AgentConversationListDto

FieldTypeRequiredDescription
conversationsAgentConversationDto[]YesNewest first.
next_cursorstring (uuid) | nullNoPass as cursor for the next page; absent on the last page.
Example
{
  "conversations": [
    {
      "created_at": "2026-10-12T05:51:01Z",
      "events_url": "string",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "latest_turn": {
        "conversation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "created_at": "2026-10-12T05:51:01Z",
        "error_code": "string",
        "events_url": "string",
        "exit_code": 0,
        "finished_at": "2026-10-12T05:51:01Z",
        "interrupt_requested": false,
        "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "model": "string",
        "provider": "claude",
        "reasoning_effort": "minimal",
        "resume": false,
        "started_at": "2026-10-12T05:51:01Z",
        "status": "starting",
        "turn_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
      },
      "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "provider": "claude",
      "status": "idle",
      "turn_count": 0,
      "updated_at": "2026-10-12T05:51:01Z"
    }
  ],
  "next_cursor": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

AgentConversationStatusDto

One of: idle, running.

AgentEventDto

One event, as the runner normalised it from the agent. Guest data: fields hold what code in the machine wrote, bounded (text fields at most 16 KiB, events at most 64 KiB) and with credential values redacted by the runner.

FieldTypeRequiredDescription
seqintegerYes1, 2, ... across the conversation's turns.
time_msintegerYesWhen the runner wrote it (milliseconds since the Unix epoch).
turn_idstringYes
typeAgentEventTypeDtoYes
codestring | nullNo
idstring | nullNo
inputstring | nullNo
input_idstring | nullNo
is_errorboolean | nullNo
kindnull | AgentInputEventKindDtoNo
messagestring | nullNo
modelstring | nullNo
namestring | nullNo
outcomenull | AgentTurnOutcomeDtoNo
outputstring | nullNo
providernull | AgentProviderDtoNo
reasoning_effortnull | ReasoningEffortDtoNo
restartedboolean | nullNo
resultstring | nullNo
resumedboolean | nullNo
session_idstring | nullNo
textstring | nullNo
usagenull | AgentUsageDtoNo
Example
{
  "code": "string",
  "id": "string",
  "input": "string",
  "input_id": "string",
  "is_error": false,
  "kind": "prompt",
  "message": "string",
  "model": "string",
  "name": "dev",
  "outcome": "completed",
  "output": "string",
  "provider": "claude",
  "reasoning_effort": "minimal",
  "restarted": false,
  "result": "string",
  "resumed": false,
  "seq": 0,
  "session_id": "string",
  "text": "string",
  "time_ms": 0,
  "turn_id": "string",
  "type": "turn_started",
  "usage": {
    "cached_input_tokens": 0,
    "cost_micro_usd": 0,
    "input_tokens": 0,
    "output_tokens": 0
  }
}

AgentEventsDto

FieldTypeRequiredDescription
activebooleanYesA turn is starting or running: more events are coming.
conversation_idstring (uuid)Yes
cursorintegerYesPass back as cursor to continue after these events.
eventsAgentEventDto[]Yes
latest_turnnull | AgentTurnDtoNoThe conversation's latest turn, as last observed.
Example
{
  "active": false,
  "conversation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "cursor": 0,
  "events": [
    {
      "code": "string",
      "id": "string",
      "input": "string",
      "input_id": "string",
      "is_error": false,
      "kind": "prompt",
      "message": "string",
      "model": "string",
      "name": "dev",
      "outcome": "completed",
      "output": "string",
      "provider": "claude",
      "reasoning_effort": "minimal",
      "restarted": false,
      "result": "string",
      "resumed": false,
      "seq": 0,
      "session_id": "string",
      "text": "string",
      "time_ms": 0,
      "turn_id": "string",
      "type": "turn_started",
      "usage": {
        "cached_input_tokens": 0,
        "cost_micro_usd": 0,
        "input_tokens": 0,
        "output_tokens": 0
      }
    }
  ],
  "latest_turn": {
    "conversation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "created_at": "2026-10-12T05:51:01Z",
    "error_code": "string",
    "events_url": "string",
    "exit_code": 0,
    "finished_at": "2026-10-12T05:51:01Z",
    "interrupt_requested": false,
    "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "model": "string",
    "provider": "claude",
    "reasoning_effort": "minimal",
    "resume": false,
    "started_at": "2026-10-12T05:51:01Z",
    "status": "starting",
    "turn_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
  }
}

AgentEventTypeDto

One of: turn_started, session, input_accepted, text_delta, thinking_delta, message, tool_call, tool_result, usage, error, turn_end.

AgentInputAccepted

FieldTypeRequiredDescription
conversation_idstring (uuid)Yes
input_idstring (uuid)YesThe input's ID; the agent confirms it with an input_accepted event carrying this input_id.
kindAgentInputKindDtoYes
turn_idstring (uuid)Yes
stoppedboolean | nullNoA forced interrupt killed the runner (false when it had already ended); absent otherwise.
Example
{
  "conversation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "input_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "kind": "steer",
  "stopped": false,
  "turn_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

AgentInputEventKindDto

One of: prompt, steer, interrupt.

AgentInputKindDto

One of: steer, interrupt.

AgentInterruptRequest

FieldTypeRequiredDescription
conversation_idstring (uuid)Yes
forcebooleanNoAlso kill the runner and the agent at once instead of letting the agent stop on its own (it gets 10 s, then SIGTERM, then SIGKILL).
Example
{
  "conversation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "force": false
}

AgentModelsDto

FieldTypeRequiredDescription
modelsProviderModelDto[]YesNewest first; an empty list means the agent's own default.
providerAgentProviderDtoYes
reasoning_effortsReasoningEffortDto[]Yes
Example
{
  "models": [
    {
      "attachments": false,
      "context_tokens": 0,
      "id": "string",
      "name": "dev",
      "provider": "anthropic",
      "reasoning": false,
      "release_date": "string"
    }
  ],
  "provider": "claude",
  "reasoning_efforts": [
    "minimal"
  ]
}

AgentPromptRequest

FieldTypeRequiredDescription
attachmentsAgentAttachmentRequest[]NoAt most 16 files, 16 MiB together, written to the machine for the agent to read.
conversation_idstring (uuid) | nullNoContinue this conversation; omit to start a new one.
modelstring | nullNoA model the agent accepts (see GET /v1/provider-models); the agent's default when omitted. Pi takes provider/model.
providernull | AgentProviderDtoNoRequired for a new conversation; a conversation keeps its provider.
reasoning_effortnull | ReasoningEffortDtoNo
textstringNoThe prompt, at most 256 KiB. A prompt needs text or an attachment.
Example
{
  "attachments": [
    {
      "content_base64": "string",
      "media_type": "string",
      "name": "dev"
    }
  ],
  "conversation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "model": "string",
  "provider": "claude",
  "reasoning_effort": "minimal",
  "text": "Add a health check endpoint and run the tests."
}

AgentProviderDto

One of: claude, codex, pi.

AgentSteerRequest

FieldTypeRequiredDescription
conversation_idstring (uuid)Yes
textstringYesMore instructions for the running turn, at most 256 KiB.
Example
{
  "conversation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "text": "string"
}

AgentTurnDto

FieldTypeRequiredDescription
conversation_idstring (uuid)Yes
created_atstring (date-time)Yes
events_urlstringYesFollow the conversation's events.
interrupt_requestedbooleanYes
machine_idstring (uuid)Yes
providerAgentProviderDtoYes
resumebooleanYesThe turn continues the conversation's earlier turns.
statusAgentTurnStatusDtoYes
turn_idstring (uuid)Yes
error_codestring | nullNoWhy a failed turn failed: agent_failed, invalid_turn, runner_failed, runner_killed, turn_lost, machine_stopped, or agents_unavailable.
exit_codeinteger | nullNoThe runner's exit status, once it exited.
finished_atstring (date-time) | nullNo
modelstring | nullNo
reasoning_effortnull | ReasoningEffortDtoNo
started_atstring (date-time) | nullNo
Example
{
  "conversation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "created_at": "2026-10-12T05:51:01Z",
  "error_code": "string",
  "events_url": "string",
  "exit_code": 0,
  "finished_at": "2026-10-12T05:51:01Z",
  "interrupt_requested": false,
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "model": "string",
  "provider": "claude",
  "reasoning_effort": "minimal",
  "resume": false,
  "started_at": "2026-10-12T05:51:01Z",
  "status": "starting",
  "turn_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

AgentTurnOutcomeDto

One of: completed, failed, interrupted.

AgentTurnStatusDto

One of: starting, running, completed, failed, interrupted.

AgentUsageDto

FieldTypeRequiredDescription
cached_input_tokensinteger | nullNo
cost_micro_usdinteger | nullNoThe agent's own cost estimate, in millionths of a US dollar.
input_tokensinteger | nullNo
output_tokensinteger | nullNo
Example
{
  "cached_input_tokens": 0,
  "cost_micro_usd": 0,
  "input_tokens": 0,
  "output_tokens": 0
}

AlertPreferenceDto

FieldTypeRequiredDescription
availablebooleanYesWhether the control plane raises this alert today (every type but product_announcements, which people send).
customizedbooleanYesThe member chose enabled instead of the role default.
default_enabledbooleanYesWhat the member's role receives without a choice.
descriptionstringYes
enabledbooleanYesWhether this member receives the alert.
typestringYesbalance_exhausted, auto_refill_failed, machine_unresponsive, machine_stop_failed, snapshot_failed, disk_almost_full, disk_full, operation_failed, auto_stop, billing_stop, idle_sleep, capacity, or product_announcements.
Example
{
  "available": false,
  "customized": false,
  "default_enabled": false,
  "description": "A machine could not be stopped.",
  "enabled": false,
  "type": "machine_stop_failed"
}

ApiKeyDto

FieldTypeRequiredDescription
created_atstring (date-time)Yes
created_bystring (uuid)Yes
expires_atstring (date-time)Yes
idstring (uuid)Yes
last_fourstringYes
namestringYes
organization_idstring (uuid)Yes
prefixstringYesThe first 12 characters of the secret, for identification only.
presetApiKeyPresetDtoYes
last_used_atstring (date-time) | nullNo
revoked_atstring (date-time) | nullNo
Example
{
  "created_at": "2026-10-12T05:51:01Z",
  "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "expires_at": "2026-10-12T05:51:01Z",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "last_four": "x9Q2",
  "last_used_at": "2026-10-12T05:51:01Z",
  "name": "ci-runner",
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "prefix": "vmy_AbCdEfGh",
  "preset": "read_only",
  "revoked_at": "2026-10-12T05:51:01Z"
}

ApiKeyPage

FieldTypeRequiredDescription
itemsApiKeyDto[]Yes
next_cursorstring (uuid) | nullNo
Example
{
  "items": [
    {
      "created_at": "2026-10-12T05:51:01Z",
      "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "expires_at": "2026-10-12T05:51:01Z",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "last_four": "x9Q2",
      "last_used_at": "2026-10-12T05:51:01Z",
      "name": "ci-runner",
      "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "prefix": "vmy_AbCdEfGh",
      "preset": "read_only",
      "revoked_at": "2026-10-12T05:51:01Z"
    }
  ],
  "next_cursor": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

ApiKeyPresetDto

One of: read_only, use_existing, create_and_use, full_access.

ApiKeySecretDto

Returned once on creation or rotation; the secret is never retrievable again.

FieldTypeRequiredDescription
api_keyApiKeyDtoYes
secretstringYes
Example
{
  "api_key": {
    "created_at": "2026-10-12T05:51:01Z",
    "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "expires_at": "2026-10-12T05:51:01Z",
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "last_four": "x9Q2",
    "last_used_at": "2026-10-12T05:51:01Z",
    "name": "ci-runner",
    "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "prefix": "vmy_AbCdEfGh",
    "preset": "read_only",
    "revoked_at": "2026-10-12T05:51:01Z"
  },
  "secret": "vmy_…"
}

AppliedDto

FieldTypeRequiredDescription
credit_microsintegerYes
plan_microsintegerYes
trial_microsintegerYes
Example
{
  "credit_micros": 0,
  "plan_micros": 0,
  "trial_micros": 0
}

ApproveWaitlistRequest

FieldTypeRequiredDescription
operatorstringYesThe individual operator acting, 1-200 characters.
initial_credit_microsinteger | nullNoCredits from VMYard granted once to the person's own organization (now if they already signed in, else at their first sign-in). Defaults to the service's access.initial_credit_micros; 0 grants none.
notifyboolean | nullNoSend the "you're in" email (default true).
reasonstring | nullNoWhy, 1-500 characters; optional.
Example
{
  "initial_credit_micros": 0,
  "notify": false,
  "operator": "string",
  "reason": "string"
}

AutoRefillChargeDto

FieldTypeRequiredDescription
amount_microsintegerYes
created_atstringYes
credit_packsintegerYes
idstring (uuid)Yes
statusstringYespending, submitted (waiting for the provider's confirmation), succeeded, or failed.
failure_codestring | nullNoProvider decline code such as insufficient_funds, authentication_required, or no_payment_method.
Example
{
  "amount_micros": 0,
  "created_at": "string",
  "credit_packs": 0,
  "failure_code": "string",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "status": "string"
}

AutoRefillDto

FieldTypeRequiredDescription
amount_microsintegerYes
charged_this_month_microsintegerYes
consecutive_failuresintegerYesFailed charges since the last success; refill turns off at 3.
credit_packsintegerYes$20 packs bought per refill.
enabledbooleanYes
monthly_cap_microsintegerYesMost refill charges per UTC calendar month.
threshold_microsintegerYesRefill when the balance (trial + plan + credits) drops below this.
disabled_reasonstring | nullNopayment_failures when refill turned itself off.
last_chargenull | AutoRefillChargeDtoNo
Example
{
  "amount_micros": 0,
  "charged_this_month_micros": 0,
  "consecutive_failures": 0,
  "credit_packs": 0,
  "disabled_reason": "string",
  "enabled": false,
  "last_charge": {
    "amount_micros": 0,
    "created_at": "string",
    "credit_packs": 0,
    "failure_code": "string",
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "status": "string"
  },
  "monthly_cap_micros": 0,
  "threshold_micros": 0
}

BackendDto

One of: mock, docker, kvm.

BalancesDto

FieldTypeRequiredDescription
credit_microsintegerYesNon-expiring credits; negative only by usage metered after exhaustion.
plan_microsintegerYesUnused allowance of the current plan period.
spendable_microsintegerYesWhat can still be spent, with credits bounded by the spend cap.
trial_microsintegerYes
Example
{
  "credit_micros": 0,
  "plan_micros": 0,
  "spendable_micros": 0,
  "trial_micros": 0
}

BillingDto

FieldTypeRequiredDescription
balancesBalancesDtoYes
card_checkCardCheckDtoYes
credit_spent_this_month_microsintegerYes
currencystringYes
limitsLimitsDtoYes
minimum_balance_microsintegerYesCreates and starts need more than this spendable balance.
organization_idstring (uuid)Yes
payment_customer_linkedbooleanYes
payments_availablebooleanYesWhether checkout and the payment portal are configured.
statusstringYestrial, pay_as_you_go, or subscribed.
trialTrialDtoYes
exhausted_sincestring | nullNoWhen the spendable balance reached zero; running machines are stopped after the grace period.
plannull | PlanSubscriptionDtoNo
spend_cap_microsinteger | nullNoMost credit spend allowed per UTC calendar month; null is no cap.
Example
{
  "balances": {
    "credit_micros": 0,
    "plan_micros": 0,
    "spendable_micros": 0,
    "trial_micros": 0
  },
  "card_check": {
    "required": false,
    "verified_at": "string"
  },
  "credit_spent_this_month_micros": 0,
  "currency": "USD",
  "exhausted_since": "string",
  "limits": {
    "concurrent_machines": {
      "limit": 0,
      "used": 0
    },
    "starts": [
      {
        "limit": 0,
        "used": 0,
        "window": "hour"
      }
    ],
    "status": "trial",
    "tier": "pro"
  },
  "minimum_balance_micros": 0,
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "payment_customer_linked": false,
  "payments_available": false,
  "plan": {
    "active": false,
    "cancel_at_period_end": false,
    "included_micros": 0,
    "included_seconds": 0,
    "period_end": "string",
    "period_start": "string",
    "price_micros": 0,
    "renews": false,
    "tier": "pro"
  },
  "spend_cap_micros": 0,
  "status": "trial",
  "trial": {
    "active": false,
    "concurrent_machines": 0,
    "ended_at": "string",
    "max_hourly_micros": 0,
    "remaining_micros": 0,
    "remaining_seconds": 0,
    "total_micros": 0
  }
}

BulkDeleteSnapshotsRequest

Delete several snapshots by ID.

FieldTypeRequiredDescription
snapshot_idsstring (uuid)[]Yes1-100 snapshot IDs; duplicates are reported once.
Example
{
  "snapshot_ids": [
    "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
  ]
}

CapacityApprovalList

FieldTypeRequiredDescription
approvalsCapacityPurchaseDto[]Yes
Example
{
  "approvals": [
    {
      "billing": "string",
      "decided_by": "string",
      "host_id": "string",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "monthly_cost_micros": 0,
      "note": "string",
      "provider": "github",
      "reason": "string",
      "region": "string",
      "requested_at": "string",
      "setup_cost_micros": 0,
      "slots": 0,
      "state": "string"
    }
  ]
}

CapacityApprovalRequest

FieldTypeRequiredDescription
operatorstringYesThe operator deciding, recorded with the decision (1-100 characters).
notestring | nullNoOptional note recorded with the decision (at most 500 characters).
Example
{
  "note": "string",
  "operator": "string"
}

CapacityBudgetDto

FieldTypeRequiredDescription
allowance_microsintegerYesWhat the revenue allows: the revenue share, at least the launch floor.
approval_threshold_microsintegerYesPurchases whose first month costs more wait for an approval.
ceiling_microsintegerYes
committed_monthly_microsintegerYesMonthly spend of every server bought or kept now.
launch_floor_microsintegerYes
revenue_30d_microsintegerYesStripe revenue of the last 30 days, USD micros.
revenue_share_bpsintegerYesShare of revenue servers may cost, basis points.
spend_30d_microsintegerYesProvider charges recorded in the last 30 days.
Example
{
  "allowance_micros": 0,
  "approval_threshold_micros": 0,
  "ceiling_micros": 0,
  "committed_monthly_micros": 0,
  "launch_floor_micros": 0,
  "revenue_30d_micros": 0,
  "revenue_share_bps": 0,
  "spend_30d_micros": 0
}

CapacityDecisionDto

FieldTypeRequiredDescription
actionstringYesstart_overflow, order_monthly, order, deliver, join, drain, release, cancel_at_term_end, retire, or approval.
atstringYesWhen it was decided (UTC RFC 3339).
dry_runbooleanYesRecorded in dry run: nothing was bought or changed.
factsobjectYesThe numbers behind the decision.
idintegerYes
outcomestringYesWhat happened, such as ordering, placed, refused, awaiting_approval, approved, dry_run, or failed.
reasonstringYesWhy, in plain words.
regionstringYes
server_idstring (uuid) | nullNo
Example
{
  "action": "string",
  "at": "string",
  "dry_run": false,
  "facts": {},
  "id": 0,
  "outcome": "string",
  "reason": "string",
  "region": "string",
  "server_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

CapacityDecisionPage

FieldTypeRequiredDescription
decisionsCapacityDecisionDto[]Yes
next_beforeinteger | nullNoPass as before for older decisions; absent on the last page.
Example
{
  "decisions": [
    {
      "action": "string",
      "at": "string",
      "dry_run": false,
      "facts": {},
      "id": 0,
      "outcome": "string",
      "reason": "string",
      "region": "string",
      "server_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
    }
  ],
  "next_before": 0
}

CapacityPurchaseDto

FieldTypeRequiredDescription
billingstringYesmonthly or hourly.
host_idstringYesThe fleet host ID it will enroll as.
idstring (uuid)Yes
monthly_cost_microsintegerYesWhat it adds to the monthly server spend, USD micros (an hourly server counts at its full-month price).
providerstringYesovh or scaleway.
reasonstringYesWhy the capacity loop wants it.
regionstringYes
requested_atstringYes
setup_cost_microsintegerYes
slotsintegerYes
statestringYesawaiting_approval, ordering, rejected, expired, ...
decided_bystring | nullNo
notestring | nullNo
Example
{
  "billing": "string",
  "decided_by": "string",
  "host_id": "string",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "monthly_cost_micros": 0,
  "note": "string",
  "provider": "github",
  "reason": "string",
  "region": "string",
  "requested_at": "string",
  "setup_cost_micros": 0,
  "slots": 0,
  "state": "string"
}

CapacityShortageDto

Why a start is waiting.

One of: no_host_in_region, full, held_for_paid.

CardCheckDto

The card check a trial needs before it may start machines.

FieldTypeRequiredDescription
requiredbooleanYesWhether this service requires a verified card before a trial starts machines (paid organizations never need one).
verified_atstring | nullNoWhen a card was verified with the payment provider, if ever.
Example
{
  "required": false,
  "verified_at": "string"
}

CardCheckSessionDto

FieldTypeRequiredDescription
checkout_urlstringYesThe provider's hosted page; the card is verified, not charged.
session_idstringYes
Example
{
  "checkout_url": "string",
  "session_id": "string"
}

CheckoutDto

FieldTypeRequiredDescription
checkout_urlstringYesHosted checkout page; card details stay with the payment provider.
session_idstringYes
Example
{
  "checkout_url": "string",
  "session_id": "string"
}

CheckoutRequestDto

FieldTypeRequiredDescription
credit_packsinteger | nullNoBuy this many $20 credit packs (1-50).
end_trialbooleanNoWith plan: forfeit the remaining trial once the plan's first payment is confirmed, so the plan's allowance is used right away.
planstring | nullNoSubscribe to starter, pro, team, or scale.
Example
{
  "credit_packs": 0,
  "end_trial": false,
  "plan": "string"
}

CommandAccepted

FieldTypeRequiredDescription
command_idstring (uuid)YesThe command ID; it equals the ID of the operation that starts it.
command_urlstringYes
machine_idstring (uuid)Yes
operation_idstring (uuid)Yes
operation_urlstringYes
statusstringYes
Example
{
  "command_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "command_url": "/v1/machines/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f/commands/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "operation_url": "/v1/operations/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "status": "pending"
}

CommandDto

FieldTypeRequiredDescription
command_idstring (uuid)Yes
machine_idstring (uuid)Yes
statusCommandStatusDtoYes
error_codestring | nullNo
exit_codeinteger | nullNoExit status recorded by the guest agent when status is exited.
lognull | CommandLogDtoNoCombined stdout and stderr, from log_offset.
signalinteger | nullNoSignal that ended the command when status is killed and known.
Example
{
  "command_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "error_code": "string",
  "exit_code": 0,
  "log": {
    "data_base64": "string",
    "next_offset": 0,
    "offset": 0,
    "size": 0
  },
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "signal": 0,
  "status": "starting"
}

CommandHistoryEntryDto

FieldTypeRequiredDescription
argvstring[]Yes
cancelledbooleanYes
commandstringYesThe shell command of /bin/sh -c <command>, otherwise the arguments joined by spaces. Search matches this text.
created_atstringYesWhen the command was requested (UTC RFC 3339).
logs_urlstringYes
machine_idstring (uuid)Yes
modeCommandModeDtoYes
operation_idstring (uuid)YesThe exec operation; for a detached command it is also the command_id.
output_purgedbooleanYesRetention removed the stored output; the sizes stay.
statusOperationStatusDtoYes
timed_outbooleanYes
truncatedbooleanYesThe runtime capped the captured output.
duration_msinteger | nullNofinished_at - started_at, across retries.
error_codestring | nullNo
exit_codeinteger | nullNoExit status of a finished foreground command.
finished_atstring | nullNo
started_atstring | nullNoThe first time a worker claimed it; absent for history recorded before migration 0023.
stderr_bytesinteger | nullNo
stdout_bytesinteger | nullNo
Example
{
  "argv": [
    "string"
  ],
  "cancelled": false,
  "command": "npm test",
  "created_at": "string",
  "duration_ms": 0,
  "error_code": "string",
  "exit_code": 0,
  "finished_at": "string",
  "logs_url": "/v1/machines/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f/commands/history/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f/logs",
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "mode": "sync",
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "output_purged": false,
  "started_at": "string",
  "status": "pending",
  "stderr_bytes": 0,
  "stdout_bytes": 0,
  "timed_out": false,
  "truncated": false
}

CommandHistoryPage

FieldTypeRequiredDescription
itemsCommandHistoryEntryDto[]Yes
next_cursorstring | nullNoPass as cursor for the next (older) page; absent on the last page.
Example
{
  "items": [
    {
      "argv": [
        "string"
      ],
      "cancelled": false,
      "command": "npm test",
      "created_at": "string",
      "duration_ms": 0,
      "error_code": "string",
      "exit_code": 0,
      "finished_at": "string",
      "logs_url": "/v1/machines/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f/commands/history/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f/logs",
      "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "mode": "sync",
      "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "output_purged": false,
      "started_at": "string",
      "status": "pending",
      "stderr_bytes": 0,
      "stdout_bytes": 0,
      "timed_out": false,
      "truncated": false
    }
  ],
  "next_cursor": "string"
}

CommandLogChunkDto

FieldTypeRequiredDescription
completebooleanYesThe command finished and its output is final. While a streamed command runs, output arrives as it is relayed and size grows.
data_base64stringYes
next_offsetintegerYes
offsetintegerYes
operation_idstring (uuid)Yes
sizeintegerYesBytes of this stream stored so far.
streamOutputStreamDtoYes
truncatedbooleanYes
Example
{
  "complete": false,
  "data_base64": "UEFTUyAgc3JjL2FwcC50ZXN0LnRzCg==",
  "next_offset": 0,
  "offset": 0,
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "size": 0,
  "stream": "stdout",
  "truncated": false
}

CommandLogDto

FieldTypeRequiredDescription
data_base64stringYes
next_offsetintegerYes
offsetintegerYes
sizeintegerYesCurrent log size reported by the guest.
Example
{
  "data_base64": "string",
  "next_offset": 0,
  "offset": 0,
  "size": 0
}

CommandModeDto

One of: sync, detached.

CommandStatusDto

One of: starting, failed_to_start, running, exited, killed, unknown.

CreateAccessGrantRequest

FieldTypeRequiredDescription
operatorstringYesThe individual operator acting, 1-200 characters.
emailstring | nullNoGrant a verified login email; or name provider and subject.
initial_credit_microsinteger | nullNoAs on approval; defaults to the service's initial credit, 0 for none.
providerstring | nullNoA configured sign-in provider such as erpai.
reasonstring | nullNo
subjectstring | nullNoThe provider's subject (sub) for the account, 1-255 characters.
Example
{
  "email": "ada@example.com",
  "initial_credit_micros": 0,
  "operator": "string",
  "provider": "github",
  "reason": "string",
  "subject": "string"
}

CreateApiKeyRequest

FieldTypeRequiredDescription
namestringYes1–64 characters.
presetApiKeyPresetDtoYes
expires_in_daysintegerNo1–365. default 90.
Example
{
  "expires_in_days": 90,
  "name": "dev",
  "preset": "read_only"
}

CreateEnvironmentRequest

FieldTypeRequiredDescription
filesSecretFileInput[]No
is_defaultboolean | nullNoDefaults to true when the organization has no default environment.
namestring | nullNoLowercase DNS label, unique in the organization. Defaults to base.
safe_for_third_partiesbooleanNo
varsmap of stringNoVariable names (^[A-Za-z_][A-Za-z0-9_]{0,127}$) to values.
Example
{
  "files": [
    {
      "contents": "string",
      "encoding": "text",
      "path": "notes/todo.txt"
    }
  ],
  "is_default": false,
  "name": "dev",
  "safe_for_third_parties": false,
  "vars": {}
}

CreateInvitationRequest

FieldTypeRequiredDescription
emailstringYes
roleRoleDtoYes
Example
{
  "email": "ada@example.com",
  "role": "owner"
}

CreateMachineRequest

FieldTypeRequiredDescription
auto_stop_after_secondsinteger | nullNoSeconds the machine may run after it becomes running before the control plane stops it, 60 to 2592000. Omitted means 3600; null means never. 60–2592000.
backendnull | BackendDtoNo
environmentstring | nullNoEnvironment to apply, by name (alternative to environment_id).
environment_idstring (uuid) | nullNoEnvironment to apply once the machine is first ready, by ID. Omitting environment_id, environment, and no_env selects the organization's default environment, if it has one.
idle_sleep_after_secondsinteger | nullNoSeconds the running machine may stay idle (no operation, terminal, or resource activity) before the control plane puts it to sleep, 300 to 86400. Omitted or null leaves idle sleep off. 300–86400.
imagenull | VersionedSelectionDtoNo
namestring | nullNoDisplay name, following the tenant_alias rules. Defaults to the tenant alias. Unlike the alias it can be changed later.
networknull | NetworkRequestNoThe machine's egress policy. Omitted, the host's default applies (internet egress unless the operator configured otherwise). Not with template: a restored machine keeps its host's policy. Change it later with PUT /v1/machines/{machine_id}/network.
never_auto_stopbooleanNotrue disables auto-stop. It cannot be combined with auto_stop_after_seconds.
no_envbooleanNotrue creates the machine without any environment, not even the default (for example, for a machine shared with third parties).
plannull | VersionedSelectionDtoNoRequired without template; with one, the template's exact plan, image, region, resources, and backend are used and these may be omitted (if sent, they must match).
regionnull | VersionedSelectionDtoNo
resourcesnull | ResourcesDtoNo
setup_scriptstring | nullNoShell script run once as /bin/sh -c <script> after the machine is first ready, at most 65527 bytes without NUL. It is its own exec operation (see setup_operation_id) with the runtime's maximum timeout; its failure does not stop the machine.
templatestring | nullNoCreate the machine from a ready template (name or ID): a warm restore with its own identity, woken at once. The chosen environment (or the default, or no_env) is applied after the restore.
tenant_aliasstring | nullNoRequired without template. With one, it is the template's (the runtime scopes stored snapshots to their tenant) and may be omitted.
Example
{
  "auto_stop_after_seconds": 60,
  "backend": "mock",
  "environment": "string",
  "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "idle_sleep_after_seconds": 300,
  "image": {
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "version": 0
  },
  "name": "dev",
  "network": {
    "egress": "none"
  },
  "never_auto_stop": false,
  "no_env": false,
  "plan": {
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "version": 0
  },
  "region": {
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "version": 0
  },
  "resources": {
    "cpu": 0,
    "disk_gib": 0,
    "memory_mib": 0
  },
  "setup_script": "string",
  "template": "string",
  "tenant_alias": "dev"
}

CreateOrganizationRequest

FieldTypeRequiredDescription
namestringYes1-64 characters without control characters or surrounding whitespace; unique (case-insensitively) among the caller's own organizations. 1–64 characters.
Example
{
  "name": "dev"
}

CreateSnapshotRequest

FieldTypeRequiredDescription
tiernull | SnapshotTierDtoNoDefault warm.
Example
{
  "tier": "warm"
}

CreateTemplateRequest

FieldTypeRequiredDescription
machine_idstring (uuid)YesA stopped machine to save as the template.
namestringYes[a-z0-9] then up to 63 of [a-z0-9._-]; unique among the organization's templates.
Example
{
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "name": "dev"
}

CreateWebhookRequest

FieldTypeRequiredDescription
eventsWebhookEventDto[]Yesat least 1 items.
namestringYes1–64 characters.
urlstringYeshttps on port 443, without credentials or a fragment, naming a public host. Redirects are never followed. at most 2048 characters.
enabledbooleanNodefault true.
Example
{
  "enabled": true,
  "events": [
    "machine.ready"
  ],
  "name": "dev",
  "url": "https://hooks.example.com/vmyard"
}

CreditKindDto

One of: grant, claw_back.

DesiredStateDto

One of: running, stopped, deleted.

DesktopClientMessage

A JSON text message from the client.

One of:

  • type: "resize"
Example
{
  "type": "resize"
}

DesktopModeDto

What a viewer shows.

One of: desktop, browser.

DesktopServerMessage

A JSON text message to the client. closed is always the last one; the WebSocket closes after it.

One of:

  • type: "opened" with height, mode, width
  • type: "error" with code
  • type: "closed" with reason
Example
{
  "height": 0,
  "mode": "desktop",
  "type": "opened",
  "width": 0
}

DesktopTicketDto

FieldTypeRequiredDescription
expires_atstringYes
ticketstringYesSingle-use credential for one desktop WebSocket of this machine, valid for 30 seconds, only with the session that minted it.
Example
{
  "expires_at": "string",
  "ticket": "string"
}

DeviceApproved

FieldTypeRequiredDescription
expires_in_daysintegerYes
organization_idstring (uuid)Yes
presetApiKeyPresetDtoYes
user_codestringYes
Example
{
  "expires_in_days": 0,
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "preset": "read_only",
  "user_code": "BCDF-GHJK"
}

DeviceApproveRequest

FieldTypeRequiredDescription
user_codestringYes
expires_in_daysinteger | nullNoKey lifetime, 1–90 days; defaults to 90. 1–90. default 90.
namestring | nullNoKey name, 1–64 characters; defaults to vy: <client_name>.
presetnull | ApiKeyPresetDtoNoThe key's preset; defaults to the requested scope.
Example
{
  "expires_in_days": 90,
  "name": "dev",
  "preset": "read_only",
  "user_code": "BCDF-GHJK"
}

DeviceAuthorizationDto

FieldTypeRequiredDescription
client_namestringYesUntrusted text supplied by the device; display it as plain text.
expires_atstring (date-time)Yes
requested_scopeApiKeyPresetDtoYes
user_codestringYes
Example
{
  "client_name": "vy on build-host",
  "expires_at": "2026-10-12T05:51:01Z",
  "requested_scope": "read_only",
  "user_code": "BCDF-GHJK"
}

DeviceCodeRequest

FieldTypeRequiredDescription
client_namestring | nullNoShown to the approving user, such as vy on build-host; 1–64 characters. Defaults to vy CLI.
scopenull | ApiKeyPresetDtoNoThe preset the CLI asks for; the approving user may choose another. Defaults to create_and_use.
Example
{
  "client_name": "vy on build-host",
  "scope": "read_only"
}

DeviceCodeResponse

FieldTypeRequiredDescription
device_codestringYesSecret polling credential; keep it on the device.
expires_inintegerYes
intervalintegerYesMinimum seconds between polls.
user_codestringYesShort code the user confirms in the browser, XXXX-XXXX.
verification_uristringYes
verification_uri_completestringYes
Example
{
  "device_code": "string",
  "expires_in": 0,
  "interval": 0,
  "user_code": "BCDF-GHJK",
  "verification_uri": "https://console.example.com/device",
  "verification_uri_complete": "https://console.example.com/device?user_code=BCDF-GHJK"
}

DeviceDecisionRequest

FieldTypeRequiredDescription
user_codestringYes
Example
{
  "user_code": "BCDF-GHJK"
}

DeviceTokenError

RFC 8628 §3.5 error: authorization_pending, slow_down, access_denied, expired_token, invalid_grant, invalid_request, or unsupported_grant_type.

FieldTypeRequiredDescription
errorstringYes
error_descriptionstringYes
Example
{
  "error": "string",
  "error_description": "string"
}

DeviceTokenRequest

FieldTypeRequiredDescription
device_codestringYes
grant_typestringYesurn:ietf:params:oauth:grant-type:device_code
Example
{
  "device_code": "string",
  "grant_type": "string"
}

DeviceTokenResponse

FieldTypeRequiredDescription
access_tokenstringYesThe new API key secret (vmy_…), returned only once.
api_keyApiKeyDtoYes
expires_inintegerYesSeconds until the API key expires.
scopeApiKeyPresetDtoYesThe key's preset.
token_typestringYesAlways Bearer.
Example
{
  "access_token": "vmy_…",
  "api_key": {
    "created_at": "2026-10-12T05:51:01Z",
    "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "expires_at": "2026-10-12T05:51:01Z",
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "last_four": "x9Q2",
    "last_used_at": "2026-10-12T05:51:01Z",
    "name": "ci-runner",
    "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "prefix": "vmy_AbCdEfGh",
    "preset": "read_only",
    "revoked_at": "2026-10-12T05:51:01Z"
  },
  "expires_in": 0,
  "scope": "read_only",
  "token_type": "Bearer"
}

EgressDto

What a machine's guest may reach: none (only the host's egress allowlist) or internet (the public internet as well, within the host's limits; private, metadata, and other machines' networks stay unreachable and SMTP is blocked).

One of: none, internet.

EmailStarted

The same answer for every well-formed address.

FieldTypeRequiredDescription
messagestringYes
Example
{
  "message": "If the address can receive email, a code is on its way."
}

EmailStartRequest

FieldTypeRequiredDescription
emailstringYes
return_tostring | nullNoSame-origin UI path to open after sign-in; invalid values become /.
Example
{
  "email": "ada@example.com",
  "return_to": "string"
}

EmailVerified

FieldTypeRequiredDescription
return_tostringYesThe UI path stored when the code was requested.
Example
{
  "return_to": "string"
}

EmailVerifyRequest

FieldTypeRequiredDescription
codestringYesThe 6-digit code from the email.
emailstringYes
Example
{
  "code": "string",
  "email": "ada@example.com"
}

EmptyAction

No fields.

Example
{}

EnvironmentApplyStatusDto

One of: pending, applied, failed.

EnvironmentDto

FieldTypeRequiredDescription
created_atstringYes
current_versionEnvironmentVersionDtoYes
idstring (uuid)Yes
is_defaultbooleanYesMachines created without environment_id, environment, or no_env get the default environment.
namestringYes
safe_for_third_partiesbooleanYesMarks an environment whose contents may be exposed to third parties.
updated_atstringYes
created_bystring (uuid) | nullNo
Example
{
  "created_at": "string",
  "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "current_version": {
    "change": {},
    "created_at": "string",
    "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "files": [
      {
        "path": "notes/todo.txt",
        "size": 0
      }
    ],
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "vars": [
      "string"
    ],
    "version": 0
  },
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "is_default": false,
  "name": "staging",
  "safe_for_third_parties": false,
  "updated_at": "string"
}

EnvironmentFileDto

FieldTypeRequiredDescription
pathstringYesPath relative to /work.
sizeintegerYes
Example
{
  "path": "notes/todo.txt",
  "size": 0
}

EnvironmentList

FieldTypeRequiredDescription
itemsEnvironmentDto[]Yes
Example
{
  "items": [
    {
      "created_at": "string",
      "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "current_version": {
        "change": {},
        "created_at": "string",
        "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "files": [
          {
            "path": "notes/todo.txt",
            "size": 0
          }
        ],
        "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "vars": [
          "string"
        ],
        "version": 0
      },
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "is_default": false,
      "name": "staging",
      "safe_for_third_parties": false,
      "updated_at": "string"
    }
  ]
}

EnvironmentVersionDto

One immutable version. Values are never included.

FieldTypeRequiredDescription
changeobjectYesWhat this version changed, without values, for example {"action": "set_variable", "name": "API_TOKEN", "size": 40}.
created_atstringYes
environment_idstring (uuid)Yes
filesEnvironmentFileDto[]Yes
idstring (uuid)Yes
varsstring[]YesVariable names, sorted.
versionintegerYes1 for the first version, then one more per change.
created_bystring (uuid) | nullNo
Example
{
  "change": {},
  "created_at": "string",
  "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "files": [
    {
      "path": "notes/todo.txt",
      "size": 0
    }
  ],
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "vars": [
    "string"
  ],
  "version": 0
}

EnvironmentVersionList

FieldTypeRequiredDescription
itemsEnvironmentVersionDto[]YesNewest first.
Example
{
  "items": [
    {
      "change": {},
      "created_at": "string",
      "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "files": [
        {
          "path": "notes/todo.txt",
          "size": 0
        }
      ],
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "vars": [
        "string"
      ],
      "version": 0
    }
  ]
}

ExecRequest

FieldTypeRequiredDescription
argvstring[] | nullNoProgram and arguments, executed directly. Exactly one of argv or command.
commandstring | nullNoShell command run as /bin/sh -c <command>, at most 8192 bytes.
streambooleanNoRespond with application/x-ndjson frames as output arrives instead of 202 Accepted.
timeout_msinteger | nullNoForeground limit in milliseconds, 1 to the runtime maximum (600000). Defaults to the maximum; the effective value is persisted with the operation.
Example
{
  "argv": [
    "string"
  ],
  "command": "string",
  "stream": false,
  "timeout_ms": 0
}

ExecResultDto

FieldTypeRequiredDescription
cancelledbooleanYes
stderr_base64stringYes
stdout_base64stringYes
timed_outbooleanYes
truncatedbooleanYes
exit_codeinteger | nullNo
Example
{
  "cancelled": false,
  "exit_code": 0,
  "stderr_base64": "string",
  "stdout_base64": "string",
  "timed_out": false,
  "truncated": false
}

ExecStreamFrame

One line of a streamed exec response. stdout/stderr frames carry untrusted guest bytes; the exit frame is the authoritative result.

One of:

  • type: "started" with operation_id, operation_url
  • type: "stdout" with data_base64
  • type: "stderr" with data_base64
  • type: "exit" with cancelled, error_code, exit_code, operation_id, status, timed_out, truncated
  • type: "error" with code, message, operation_id, status
Example
{
  "cancelled": false,
  "error_code": "string",
  "exit_code": 0,
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "status": "succeeded",
  "timed_out": false,
  "truncated": false,
  "type": "exit"
}

ExposePortRequest

FieldTypeRequiredDescription
portintegerYesGuest TCP port, 1-65535 except 22 (use the SSH key for SSH) and the desktop's 5907 and 5908 (open the desktop instead).
localhostbooleanNoRelay the guest's addresses to a service bound to 127.0.0.1/[::1].
publicbooleanNoReachable without a token. Private ports (the default) need a token from POST /v1/machines/{machine_id}/ports/{port}/token.
Example
{
  "localhost": false,
  "port": 0,
  "public": false
}

FileContentDto

FieldTypeRequiredDescription
contentstringYes
encodingFileEncodingDtoYes
pathstringYesPath relative to /work.
sizeintegerYes
Example
{
  "content": "string",
  "encoding": "text",
  "path": "notes/todo.txt",
  "size": 0
}

FileEncodingDto

One of: text, base64.

FileEntryTypeDto

One of: file, dir, symlink.

FileRangeDto

One range of a completed read, as persisted by the worker. Data is untrusted guest content.

FieldTypeRequiredDescription
data_base64stringYes
missingbooleanYes
offsetintegerYes
pathstringYes
sizeintegerYes
Example
{
  "data_base64": "string",
  "missing": false,
  "offset": 0,
  "path": "notes/todo.txt",
  "size": 0
}

FileTreeDto

FieldTypeRequiredDescription
entriesFileTreeEntryDto[]Yes
file_countintegerYesNon-directory entries under it at any depth.
pathstringYesThe listed directory, normalized.
total_bytesintegerYesThe directory's recursive apparent size (du -sb).
truncatedbooleanYesThe listing stopped at 5,000 entries (deeper levels go first).
Example
{
  "entries": [
    {
      "children": [],
      "modified_at": "2026-10-12T05:51:01Z",
      "name": "dev",
      "path": "notes/todo.txt",
      "size_bytes": 0,
      "type": "file"
    }
  ],
  "file_count": 0,
  "path": "notes/todo.txt",
  "total_bytes": 0,
  "truncated": false
}

FileTreeEntryDto

FieldTypeRequiredDescription
namestringYesThe last path component. Guest data: bytes that are not UTF-8 are replaced by U+FFFD.
pathstringYesThe absolute guest path.
size_bytesintegerYesA file's size; a symlink's target length; a directory's recursive apparent size, its own entries included (du -b).
typeFileEntryTypeDtoYes
childrenFileTreeEntryDto[] | nullNoA directory's entries, sorted by name, only within the requested depth; absent for files, symlinks, and directories at the depth.
modified_atstring (date-time) | nullNoLast modification (UTC RFC 3339), when the guest reported one.
Example
{
  "children": [],
  "modified_at": "2026-10-12T05:51:01Z",
  "name": "dev",
  "path": "notes/todo.txt",
  "size_bytes": 0,
  "type": "file"
}

FlagResolutionDto

One of: dismissed, confirmed.

ForkMachineRequest

FieldTypeRequiredDescription
keep_ssh_keysbooleanNoKeep the login user's SSH authorized_keys in the copy (default false). The SSH gateway port is never inherited.
liveboolean | nullNoRun the copy at once with the source's processes (default true); false creates it stopped.
namestring | nullNoThe copy's display name (default: the tenant alias it shares with the source).
Example
{
  "keep_ssh_keys": false,
  "live": false,
  "name": "dev"
}

GrantKindDto

One of: credits, trial, plan_period.

GrantResultDto

FieldTypeRequiredDescription
outcomestringYesapplied, duplicate, or stale.
Example
{
  "outcome": "applied"
}

GuestReportedDto

Values the guest agent reports about itself. Code in the guest can alter them: they are shown for information and never billed or enforced on.

FieldTypeRequiredDescription
filesystem_available_bytesintegerYes
filesystem_total_bytesintegerYes
memory_available_bytesintegerYes
memory_total_bytesintegerYes
reported_atstring (date-time) | nullNoWhen the guest reported them (UTC RFC 3339).
Example
{
  "filesystem_available_bytes": 0,
  "filesystem_total_bytes": 0,
  "memory_available_bytes": 0,
  "memory_total_bytes": 0,
  "reported_at": "2026-10-12T05:51:01Z"
}

ImageDto

FieldTypeRequiredDescription
digeststringYes
idstring (uuid)Yes
namestringYes
versionintegerYes
Example
{
  "digest": "sha256:3f5a…",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "name": "ubuntu-24.04",
  "version": 0
}

ImagePage

FieldTypeRequiredDescription
itemsImageDto[]Yes
next_cursorstring | nullNo
Example
{
  "items": [
    {
      "digest": "sha256:3f5a…",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "name": "ubuntu-24.04",
      "version": 0
    }
  ],
  "next_cursor": "string"
}

InteractiveAccessDto

One of: managed_terminal.

InvitationAcceptedDto

FieldTypeRequiredDescription
organization_idstring (uuid)Yes
roleRoleDtoYes
Example
{
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "role": "owner"
}

InvitationDto

FieldTypeRequiredDescription
created_atstring (date-time)Yes
emailstringYes
expires_atstring (date-time)Yes
idstring (uuid)Yes
organization_idstring (uuid)Yes
roleRoleDtoYes
invited_bystring (uuid) | nullNo
Example
{
  "created_at": "2026-10-12T05:51:01Z",
  "email": "ada@example.com",
  "expires_at": "2026-10-12T05:51:01Z",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "invited_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "role": "owner"
}

InvitationList

FieldTypeRequiredDescription
itemsInvitationDto[]YesOpen invitations, newest first.
Example
{
  "items": [
    {
      "created_at": "2026-10-12T05:51:01Z",
      "email": "ada@example.com",
      "expires_at": "2026-10-12T05:51:01Z",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "invited_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "role": "owner"
    }
  ]
}

InvitationPreviewDto

FieldTypeRequiredDescription
emailstringYes
expires_atstring (date-time)Yes
organization_idstring (uuid)Yes
organization_namestringYes
roleRoleDtoYes
stateInvitationStateDtoYes
Example
{
  "email": "ada@example.com",
  "expires_at": "2026-10-12T05:51:01Z",
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "organization_name": "string",
  "role": "owner",
  "state": "open"
}

InvitationStateDto

One of: open, accepted, revoked, expired.

InvoiceLineDto

FieldTypeRequiredDescription
amount_microsintegerYes
descriptionstringYes
hourly_microsintegerYes
multipliernumberYes
plan_idstring (uuid)Yes
plan_versionintegerYes
secondsintegerYes
Example
{
  "amount_micros": 0,
  "description": "default · machine time",
  "hourly_micros": 0,
  "multiplier": 0.5,
  "plan_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "plan_version": 0,
  "seconds": 0
}

InvoicePreviewDto

FieldTypeRequiredDescription
appliedAppliedDtoYesHow the charged part was paid.
credit_balance_microsintegerYes
currencystringYes
linesInvoiceLineDto[]YesMachine time in the period so far, by size.
next_charge_microsintegerYesWhat renews at period_end (the plan price), or 0. Usage is prepaid, so nothing else is charged automatically.
period_endstringYes
period_startstringYes
unbilled_microsintegerYesAccrued by running machines but not yet charged by the meter.
usage_microsintegerYes
plannull | PlanSubscriptionDtoNo
Example
{
  "applied": {
    "credit_micros": 0,
    "plan_micros": 0,
    "trial_micros": 0
  },
  "credit_balance_micros": 0,
  "currency": "USD",
  "lines": [
    {
      "amount_micros": 0,
      "description": "default · machine time",
      "hourly_micros": 0,
      "multiplier": 0.5,
      "plan_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "plan_version": 0,
      "seconds": 0
    }
  ],
  "next_charge_micros": 0,
  "period_end": "string",
  "period_start": "string",
  "plan": {
    "active": false,
    "cancel_at_period_end": false,
    "included_micros": 0,
    "included_seconds": 0,
    "period_end": "string",
    "period_start": "string",
    "price_micros": 0,
    "renews": false,
    "tier": "pro"
  },
  "unbilled_micros": 0,
  "usage_micros": 0
}

LatestSnapshotDto

A machine's newest live snapshot (templates and failed pushes excluded), for showing freshness in machine lists.

FieldTypeRequiredDescription
created_atstring (date-time)YesWhen the snapshot was requested (UTC RFC 3339): the instant a capture or push copies.
idstring (uuid)Yes
sourceSnapshotSourceDtoYes
statusSnapshotStatusDtoYespending or ready.
tierSnapshotTierDtoYes
completed_atstring (date-time) | nullNoWhen it became ready; null while pending.
Example
{
  "completed_at": "2026-10-12T05:51:01Z",
  "created_at": "2026-10-12T05:51:01Z",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "source": "api",
  "status": "pending",
  "tier": "warm"
}

LedgerEntryDto

FieldTypeRequiredDescription
amount_microsintegerYesPositive adds to the balance, negative takes from it.
atstringYes
bucketstringYestrial, plan, or credit.
idintegerYes
kindLedgerKindDtoYes
labelstringYesWhat to show, such as "Credit from VMYard".
plan_tierstring | nullNo
Example
{
  "amount_micros": 0,
  "at": "string",
  "bucket": "string",
  "id": 0,
  "kind": "trial_grant",
  "label": "k7f2mq3x9a1b",
  "plan_tier": "string"
}

LedgerKindDto

One of: trial_grant, trial_forfeit, plan_grant, plan_expire, credit_grant, vmyard_credit, vmyard_clawback.

LedgerPage

FieldTypeRequiredDescription
itemsLedgerEntryDto[]Yes
next_beforeinteger | nullNoPass as before for the next page; absent on the last page.
Example
{
  "items": [
    {
      "amount_micros": 0,
      "at": "string",
      "bucket": "string",
      "id": 0,
      "kind": "trial_grant",
      "label": "k7f2mq3x9a1b",
      "plan_tier": "string"
    }
  ],
  "next_before": 0
}

LimitDto

FieldTypeRequiredDescription
limitintegerYes
usedintegerYes
Example
{
  "limit": 0,
  "used": 0
}

LimitsDto

FieldTypeRequiredDescription
concurrent_machinesLimitDtoYesMachines that want to run, pending creates included.
startsStartLimitDto[]YesCreates, starts, and restarts in each rolling window.
statusstringYestrial, pay_as_you_go, or subscribed.
tierstring | nullNo
Example
{
  "concurrent_machines": {
    "limit": 0,
    "used": 0
  },
  "starts": [
    {
      "limit": 0,
      "used": 0,
      "window": "hour"
    }
  ],
  "status": "trial",
  "tier": "pro"
}

LinkRequest

FieldTypeRequiredDescription
emailstring | nullNoRequired for email, refused for other providers.
return_tostring | nullNoSame-origin UI path to open when the provider flow completes; invalid values become /.
Example
{
  "email": "ada@example.com",
  "return_to": "string"
}

LinkStarted

Open authorization_url as a top-level navigation; the provider returns to /v1/auth/callback, which attaches the identity to this user.

FieldTypeRequiredDescription
authorization_urlstringYes
Example
{
  "authorization_url": "string"
}

LoginMethodDto

FieldTypeRequiredDescription
created_atstring (date-time)Yes
idstring (uuid)Yes
last_used_atstring (date-time)Yes
providerstringYesProvider name such as github, google, or email.
emailstring | nullNoThe address the provider vouched for at the last sign-in, when known.
Example
{
  "created_at": "2026-10-12T05:51:01Z",
  "email": "ada@example.com",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "last_used_at": "2026-10-12T05:51:01Z",
  "provider": "github"
}

MachineDto

FieldTypeRequiredDescription
backendBackendDtoYes
created_atstring (date-time)YesWhen the machine was requested (UTC RFC 3339).
desired_stateDesiredStateDtoYes
idstring (uuid)Yes
imageVersionedSelectionDtoYes
namestringYesDisplay name; the tenant alias unless renamed.
observed_stateObservedStateDtoYes
organization_idstring (uuid)Yes
planVersionedSelectionDtoYes
regionVersionedSelectionDtoYes
resourcesResourcesDtoYes
tenant_aliasstringYes
auto_stop_after_secondsinteger | nullNoConfigured auto-stop duration in seconds; null means never.
auto_stop_atstring | nullNoWhen the control plane will stop the running machine (UTC RFC 3339); null when it is not running toward a deadline.
environmentnull | MachineEnvironmentDtoNoThe machine's environment; null when it was created without one.
forked_from_machine_idstring (uuid) | nullNoThe machine this one was forked from (POST .../fork).
idle_sincestring | nullNoStart of the running machine's current unbroken idle window (UTC RFC 3339); null while it is active, its metrics are unknown, or idle sleep is off.
idle_sleep_after_secondsinteger | nullNoConfigured idle-sleep window in seconds; null means idle sleep is off (the default).
idle_sleep_atstring | nullNoWhen the machine will be put to sleep if it stays idle: idle_since plus the window (UTC RFC 3339).
last_active_atstring | nullNoThe last activity the idle-sleep scan observed (UTC RFC 3339); null until a scan saw any.
latest_snapshotnull | LatestSnapshotDtoNoThe machine's newest live snapshot (pending or ready; templates and failed pushes excluded), for freshness; null when it has none.
metricsnull | MachineMetricsSummaryDtoNoThe latest metrics the poller recorded; null until the machine has been sampled. Values stay after the machine stops being reported, with stale set.
networknull | MachineNetworkDtoNoThe network policy and public address the machine's host last reported applying; null until a host reported one (hosts without guest networking never do).
restored_from_snapshot_idstring (uuid) | nullNoThe snapshot or template this machine was restored from.
setup_operation_idstring (uuid) | nullNoThe setup script's exec operation, when one was requested.
sshnull | SshAccessDtoNoHow to reach the machine over SSH, present while it has an SSH key (PUT /v1/machines/{machine_id}/ssh-key).
starting_soonnull | StartingSoonDtoNoSet while the machine's create or start waits for a server to have room ("starting soon"); null otherwise.
Example
{
  "auto_stop_after_seconds": 0,
  "auto_stop_at": "2026-10-12T06:51:01Z",
  "backend": "mock",
  "created_at": "2026-10-12T05:51:01Z",
  "desired_state": "running",
  "environment": {
    "applied_version_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "error_code": "string",
    "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "status": "pending",
    "version": 0,
    "version_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
  },
  "forked_from_machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "idle_since": "2026-10-12T05:36:01Z",
  "idle_sleep_after_seconds": 900,
  "idle_sleep_at": "2026-10-12T05:51:01Z",
  "image": {
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "version": 0
  },
  "last_active_at": "2026-10-12T05:36:01Z",
  "latest_snapshot": {
    "completed_at": "2026-10-12T05:51:01Z",
    "created_at": "2026-10-12T05:51:01Z",
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "source": "api",
    "status": "pending",
    "tier": "warm"
  },
  "metrics": {
    "cpu_limit_millis": 0,
    "cpu_millis": 0,
    "cpu_percent": 0.5,
    "disk_percent": 0.5,
    "disk_size_bytes": 0,
    "disk_used_bytes": 0,
    "flags": [
      "disk_almost_full"
    ],
    "io_read_bps": 0,
    "io_write_bps": 0,
    "memory_bytes": 0,
    "memory_limit_bytes": 0,
    "memory_percent": 0.5,
    "net_rx_bps": 0,
    "net_tx_bps": 0,
    "sampled_at": "2026-10-12T05:51:01Z",
    "stale": false,
    "stale_reason": "host_unreachable",
    "state": "string"
  },
  "name": "dev",
  "network": {
    "egress": "none",
    "ipv6_address": "string"
  },
  "observed_state": {
    "boot_id": "string",
    "state": "running"
  },
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "plan": {
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "version": 0
  },
  "region": {
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "version": 0
  },
  "resources": {
    "cpu": 0,
    "disk_gib": 0,
    "memory_mib": 0
  },
  "restored_from_snapshot_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "setup_operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "ssh": {
    "host": "ssh.eu.example.com",
    "port": 0,
    "user": "vmyard"
  },
  "starting_soon": {
    "expires_at": "2026-10-12T05:51:01Z",
    "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "position": 0,
    "priority": "paid",
    "queued_at": "2026-10-12T05:51:01Z",
    "reason": "no_host_in_region"
  },
  "tenant_alias": "dev"
}

MachineEnvironmentDto

FieldTypeRequiredDescription
environment_idstring (uuid)Yes
operation_idstring (uuid)YesThe apply operation for version_id.
statusEnvironmentApplyStatusDtoYes
versionintegerYes
version_idstring (uuid)YesThe version the machine should have: the one it was created with, until an upgrade.
applied_version_idstring (uuid) | nullNoThe version last installed in the guest, if any.
error_codestring | nullNo
Example
{
  "applied_version_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "error_code": "string",
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "status": "pending",
  "version": 0,
  "version_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

MachineMetricsDto

FieldTypeRequiredDescription
cpu_limit_millisintegerYes
interval_msintegerYesTime between points: the host's sampling interval for live, 60000 for 1m.
machine_idstring (uuid)Yes
memory_limit_bytesintegerYes
pointsMetricsPointDto[]YesOldest first.
resolutionMetricsResolutionDtoYes
guest_reportednull | GuestReportedDtoNoThe guest's own report, when there is one.
next_sincestring | nullNoMore 1m points follow: ask again with this as since.
Example
{
  "cpu_limit_millis": 0,
  "guest_reported": {
    "filesystem_available_bytes": 0,
    "filesystem_total_bytes": 0,
    "memory_available_bytes": 0,
    "memory_total_bytes": 0,
    "reported_at": "2026-10-12T05:51:01Z"
  },
  "interval_ms": 0,
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "memory_limit_bytes": 0,
  "next_since": "string",
  "points": [
    {
      "cpu_millis": 0,
      "cpu_millis_max": 0,
      "cpu_percent": 0.5,
      "disk_percent": 0.5,
      "disk_used_bytes": 0,
      "io_read_bps": 0,
      "io_write_bps": 0,
      "memory_bytes": 0,
      "memory_bytes_max": 0,
      "memory_percent": 0.5,
      "net_rx_bps": 0,
      "net_tx_bps": 0,
      "t": "2026-10-12T05:51:01Z"
    }
  ],
  "resolution": "live"
}

MachineMetricsSummaryDto

The machine's latest values as the last metrics poll recorded them. Percentages are of the machine's limits; absent values were not measured (for example CPU and memory while asleep).

FieldTypeRequiredDescription
cpu_limit_millisintegerYes
flagsMetricFlagDto[]Yes
memory_limit_bytesintegerYes
stalebooleanYesThe values are from an earlier poll and may no longer be current; they are the last known values, not zero.
statestringYesThe runtime state when sampled: running or sleeping.
cpu_millisinteger | nullNoMillicores used over the last sampling interval (1000 = one core).
cpu_percentnumber | nullNoCPU used over the host's last sampling interval, as a share of the machine's CPU limit.
disk_percentnumber | nullNoDisk blocks the machine's image holds, as a share of its size. An upper bound: blocks the guest freed stay allocated.
disk_size_bytesinteger | nullNo
disk_used_bytesinteger | nullNo
io_read_bpsinteger | nullNoBytes per second over the host's last sampling interval.
io_write_bpsinteger | nullNo
memory_bytesinteger | nullNo
memory_percentnumber | nullNoMemory charged to the machine (guest RAM in use, page cache, and the VMM), as a share of its limit.
net_rx_bpsinteger | nullNoBytes per second seen from the guest (rx = received by it).
net_tx_bpsinteger | nullNo
sampled_atstring (date-time) | nullNoWhen the host sampled these values (UTC RFC 3339).
stale_reasonnull | StaleReasonDtoNo
Example
{
  "cpu_limit_millis": 0,
  "cpu_millis": 0,
  "cpu_percent": 0.5,
  "disk_percent": 0.5,
  "disk_size_bytes": 0,
  "disk_used_bytes": 0,
  "flags": [
    "disk_almost_full"
  ],
  "io_read_bps": 0,
  "io_write_bps": 0,
  "memory_bytes": 0,
  "memory_limit_bytes": 0,
  "memory_percent": 0.5,
  "net_rx_bps": 0,
  "net_tx_bps": 0,
  "sampled_at": "2026-10-12T05:51:01Z",
  "stale": false,
  "stale_reason": "host_unreachable",
  "state": "string"
}

MachineNetworkDto

The machine's network as its host last reported applying it.

FieldTypeRequiredDescription
egressEgressDtoYes
ipv6_addressstring | nullNoThe machine's public IPv6 address, when its host routes a global prefix to its machines; null otherwise. Inbound traffic still reaches only exposed ports.
Example
{
  "egress": "none",
  "ipv6_address": "string"
}

MachinePage

FieldTypeRequiredDescription
itemsMachineDto[]Yes
next_cursorstring | nullNoOpaque; pass it as cursor with the same sort and order.
Example
{
  "items": [
    {
      "auto_stop_after_seconds": 0,
      "auto_stop_at": "2026-10-12T06:51:01Z",
      "backend": "mock",
      "created_at": "2026-10-12T05:51:01Z",
      "desired_state": "running",
      "environment": {
        "applied_version_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "error_code": "string",
        "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "status": "pending",
        "version": 0,
        "version_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
      },
      "forked_from_machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "idle_since": "2026-10-12T05:36:01Z",
      "idle_sleep_after_seconds": 900,
      "idle_sleep_at": "2026-10-12T05:51:01Z",
      "image": {
        "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "version": 0
      },
      "last_active_at": "2026-10-12T05:36:01Z",
      "latest_snapshot": {
        "completed_at": "2026-10-12T05:51:01Z",
        "created_at": "2026-10-12T05:51:01Z",
        "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "source": "api",
        "status": "pending",
        "tier": "warm"
      },
      "metrics": {
        "cpu_limit_millis": 0,
        "cpu_millis": 0,
        "cpu_percent": 0.5,
        "disk_percent": 0.5,
        "disk_size_bytes": 0,
        "disk_used_bytes": 0,
        "flags": [
          "disk_almost_full"
        ],
        "io_read_bps": 0,
        "io_write_bps": 0,
        "memory_bytes": 0,
        "memory_limit_bytes": 0,
        "memory_percent": 0.5,
        "net_rx_bps": 0,
        "net_tx_bps": 0,
        "sampled_at": "2026-10-12T05:51:01Z",
        "stale": false,
        "stale_reason": "host_unreachable",
        "state": "string"
      },
      "name": "dev",
      "network": {
        "egress": "none",
        "ipv6_address": "string"
      },
      "observed_state": {
        "boot_id": "string",
        "state": "running"
      },
      "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "plan": {
        "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "version": 0
      },
      "region": {
        "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "version": 0
      },
      "resources": {
        "cpu": 0,
        "disk_gib": 0,
        "memory_mib": 0
      },
      "restored_from_snapshot_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "setup_operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "ssh": {
        "host": "ssh.eu.example.com",
        "port": 0,
        "user": "vmyard"
      },
      "starting_soon": {
        "expires_at": "2026-10-12T05:51:01Z",
        "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
        "position": 0,
        "priority": "paid",
        "queued_at": "2026-10-12T05:51:01Z",
        "reason": "no_host_in_region"
      },
      "tenant_alias": "dev"
    }
  ],
  "next_cursor": "string"
}

MachineUsageDto

FieldTypeRequiredDescription
cost_microsintegerYes
hourly_microsintegerYes
machine_idstring (uuid)Yes
multipliernumberYesSize multiplier relative to default (small 0.5, large 2).
runningbooleanYesWhether a metered run is open now.
secondsintegerYesWhole seconds observed running inside the window.
Example
{
  "cost_micros": 0,
  "hourly_micros": 0,
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "multiplier": 0.5,
  "running": false,
  "seconds": 0
}

MeDto

FieldTypeRequiredDescription
accessAccessDtoYeswaitlisted while the service is invite-only and this account holds no access grant: it may sign in and read, and work in organizations an approved owner invited it to, but not create organizations.
emailstringYes
login_method_detailsLoginMethodDto[]YesEach linked sign-in identity, oldest first; id is what DELETE /v1/auth/login-methods/{id} takes.
login_methodsstring[]YesSign-in provider names linked to this user, sorted.
membershipsMembershipDto[]YesEvery organization the user belongs to (with an API key, only the key's). Signing in gives a user who belongs to none their personal organization, unless the deployment disables auto_personal_organization.
recent_authbooleanYes
user_idstring (uuid)Yes
active_organization_idstring (uuid) | nullNoThe organization the user last switched to (PUT /v1/me/active-organization) or joined, while they are still a member; the console sends it as X-Organization-ID. With an API key, the key's organization.
namestring | nullNoDisplay name from the identity provider's name claim, when it supplied one.
waitlist_urlstring | nullNoWhere to join the waitlist, while the service is invite-only.
Example
{
  "access": "approved",
  "active_organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "email": "ada@example.com",
  "login_method_details": [
    {
      "created_at": "2026-10-12T05:51:01Z",
      "email": "ada@example.com",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "last_used_at": "2026-10-12T05:51:01Z",
      "provider": "github"
    }
  ],
  "login_methods": [
    "string"
  ],
  "memberships": [
    {
      "access": "approved",
      "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "organization_name": "string",
      "role": "owner"
    }
  ],
  "name": "dev",
  "recent_auth": false,
  "user_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "waitlist_url": "string"
}

MemberDto

FieldTypeRequiredDescription
emailstringYes
joined_atstring (date-time)Yes
roleRoleDtoYes
running_machinesintegerYesMachines the member last asked to run that still want to run; the cap counts these.
usage_this_monthMemberUsageDtoYes
user_idstring (uuid)Yes
max_running_machinesinteger | nullNoThe member's own running-at-once cap; null is no cap beyond the organization's plan limits.
Example
{
  "email": "ada@example.com",
  "joined_at": "2026-10-12T05:51:01Z",
  "max_running_machines": 0,
  "role": "owner",
  "running_machines": 0,
  "usage_this_month": {
    "cost_micros": 0,
    "seconds": 0
  },
  "user_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

MemberList

FieldTypeRequiredDescription
itemsMemberDto[]YesOwners first, then by email.
Example
{
  "items": [
    {
      "email": "ada@example.com",
      "joined_at": "2026-10-12T05:51:01Z",
      "max_running_machines": 0,
      "role": "owner",
      "running_machines": 0,
      "usage_this_month": {
        "cost_micros": 0,
        "seconds": 0
      },
      "user_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
    }
  ]
}

MemberRemovedDto

FieldTypeRequiredDescription
api_keys_revokedintegerYesThe member's API keys of this organization, now revoked.
channels_revokedintegerYesOpen terminals and desktops revoked; each ends at its relay's next heartbeat (at most 15 s) with reason revoked.
tickets_revokedintegerYesUnredeemed terminal and desktop tickets deleted.
user_idstring (uuid)Yes
Example
{
  "api_keys_revoked": 0,
  "channels_revoked": 0,
  "tickets_revoked": 0,
  "user_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

MembershipDto

FieldTypeRequiredDescription
accessAccessDtoYesapproved while one of the organization's owners is approved: its members may then create and start machines and create API keys.
organization_idstring (uuid)Yes
organization_namestringYes
rolestringYes
Example
{
  "access": "approved",
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "organization_name": "string",
  "role": "owner"
}

MemberUsageDto

FieldTypeRequiredDescription
cost_microsintegerYes
secondsintegerYesMachine seconds of the runs the member started this UTC month.
Example
{
  "cost_micros": 0,
  "seconds": 0
}

MetricFlagDto

One of: disk_almost_full, disk_full, host_disk_low.

MetricsPointDto

One chart point. live points are the host's samples; 1m points average the minute's samples, with its maxima and counter-based rates.

FieldTypeRequiredDescription
tstring (date-time)YesThe sample time, or the minute's start (UTC RFC 3339).
cpu_millisinteger | nullNo
cpu_millis_maxinteger | nullNoThe minute's highest sample (1m only).
cpu_percentnumber | nullNo
disk_percentnumber | nullNo
disk_used_bytesinteger | nullNo
io_read_bpsinteger | nullNo
io_write_bpsinteger | nullNo
memory_bytesinteger | nullNo
memory_bytes_maxinteger | nullNoThe minute's highest sample (1m only).
memory_percentnumber | nullNo
net_rx_bpsinteger | nullNo
net_tx_bpsinteger | nullNo
Example
{
  "cpu_millis": 0,
  "cpu_millis_max": 0,
  "cpu_percent": 0.5,
  "disk_percent": 0.5,
  "disk_used_bytes": 0,
  "io_read_bps": 0,
  "io_write_bps": 0,
  "memory_bytes": 0,
  "memory_bytes_max": 0,
  "memory_percent": 0.5,
  "net_rx_bps": 0,
  "net_tx_bps": 0,
  "t": "2026-10-12T05:51:01Z"
}

MetricsResolutionDto

One of: live, 1m.

NetworkAccessPolicyDto

FieldTypeRequiredDescription
egress_optionsEgressDto[]YesThe egress policies a machine of the plan may request at create or change later (PUT /v1/machines/{machine_id}/network). Any member who may create machines may choose either; the host's operator can still refuse internet with its kill switch.
interactive_accessInteractiveAccessDtoYes
public_ingressPublicIngressDtoYes
ssh_key_selectionSshKeySelectionDtoYes
Example
{
  "egress_options": [
    "none"
  ],
  "interactive_access": "managed_terminal",
  "public_ingress": "disabled",
  "ssh_key_selection": "unavailable"
}

NetworkRequest

A requested network policy.

FieldTypeRequiredDescription
egressEgressDtoYes
Example
{
  "egress": "none"
}

NotificationDto

Whether the "you're in" email went out.

One of: sent, failed, not_configured, skipped.

NotificationPreferencesDto

FieldTypeRequiredDescription
alertsAlertPreferenceDto[]Yes
emailstringYesWhere alerts are sent: the account's email address.
organization_idstring (uuid)Yes
user_idstring (uuid)Yes
Example
{
  "alerts": [
    {
      "available": false,
      "customized": false,
      "default_enabled": false,
      "description": "A machine could not be stopped.",
      "enabled": false,
      "type": "machine_stop_failed"
    }
  ],
  "email": "ada@example.com",
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "user_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

ObservedStateDto

One of:

  • state: "absent"
  • state: "provisioning"
  • state: "running" with boot_id
  • state: "stopped"
  • state: "degraded"
  • state: "unknown"
Example
{
  "boot_id": "string",
  "state": "running"
}

OperationAccepted

FieldTypeRequiredDescription
machine_idstring (uuid)Yes
operation_idstring (uuid)Yes
operation_urlstringYes
requested_actionstringYes
statusstringYes
Example
{
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "operation_url": "/v1/operations/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "requested_action": "string",
  "status": "pending"
}

OperationDto

FieldTypeRequiredDescription
attempt_countintegerYes
completed_but_unchangedbooleanYes
idstring (uuid)Yes
kindstringYes
machine_idstring (uuid)Yes
statusOperationStatusDtoYes
error_codestring | nullNo
exec_resultnull | ExecResultDtoNo
file_rangesFileRangeDto[] | nullNoFor a succeeded file_read: the ranges read, as untrusted guest data.
starting_soonnull | StartingSoonDtoNoFor a pending create or start the fleet has no room for yet: why it waits and until when ("starting soon"); null otherwise.
stop_reasonnull | StopReasonDtoNoFor a stop: who asked for it; null for other kinds.
Example
{
  "attempt_count": 0,
  "completed_but_unchanged": false,
  "error_code": "string",
  "exec_result": {
    "cancelled": false,
    "exit_code": 0,
    "stderr_base64": "string",
    "stdout_base64": "string",
    "timed_out": false,
    "truncated": false
  },
  "file_ranges": [
    {
      "data_base64": "string",
      "missing": false,
      "offset": 0,
      "path": "notes/todo.txt",
      "size": 0
    }
  ],
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "kind": "stop",
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "starting_soon": {
    "expires_at": "2026-10-12T05:51:01Z",
    "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "position": 0,
    "priority": "paid",
    "queued_at": "2026-10-12T05:51:01Z",
    "reason": "no_host_in_region"
  },
  "status": "pending",
  "stop_reason": "idle_sleep"
}

OperationEventDto

FieldTypeRequiredDescription
messagestringYes
stagestringYes
timestampstringYes
Example
{
  "message": "string",
  "stage": "accepted",
  "timestamp": "string"
}

OperationStatusDto

One of: pending, running, succeeded, failed, uncertain, correlation_miss.

OperatorActionRequest

FieldTypeRequiredDescription
operatorstringYesThe individual operator acting (a name or work email), recorded in the audit log; 1-200 characters.
reasonstringYesWhy; recorded in the audit log, 1-500 characters. A suspension's reason is shown to operators only.
Example
{
  "operator": "string",
  "reason": "string"
}

OperatorCreditDto

FieldTypeRequiredDescription
outcomestringYesapplied or duplicate.
credit_balance_microsinteger | nullNoThe credit balance after an applied change.
Example
{
  "credit_balance_micros": 0,
  "outcome": "string"
}

OperatorCreditRequest

FieldTypeRequiredDescription
amount_microsintegerYesPositive micros (1 USD = 1000000). at least 1.
idempotency_keystringYesReplaying the same key applies the change once.
kindCreditKindDtoYes
operatorstringYesThe individual operator acting, 1-200 characters.
organization_idstring (uuid)Yes
reasonstringYesWhy, 1-500 characters; kept on the ledger row and in the audit log, never shown to the organization.
Example
{
  "amount_micros": 1,
  "idempotency_key": "string",
  "kind": "grant",
  "operator": "string",
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "reason": "string"
}

OperatorGrantRequest

FieldTypeRequiredDescription
idempotency_keystringYesReplaying the same key applies the grant once.
kindGrantKindDtoYes
organization_idstring (uuid)Yes
reasonstringYesWhy the grant was made; recorded in the audit log.
amount_microsinteger | nullNoMicros for credits and trial.
period_daysinteger | nullNoPeriod length for plan_period, starting now (1-366, default 30).
tierstring | nullNoTier for plan_period.
Example
{
  "amount_micros": 0,
  "idempotency_key": "string",
  "kind": "credits",
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "period_days": 0,
  "reason": "string",
  "tier": "pro"
}

OrganizationDeletedDto

FieldTypeRequiredDescription
api_keys_revokedintegerYes
channels_revokedintegerYes
machines_stoppingintegerYesMachines that wanted to run; each gets a durable stop (stop_reason: organization_deleted) within about a second.
members_removedintegerYes
organization_idstring (uuid)Yes
tickets_revokedintegerYes
Example
{
  "api_keys_revoked": 0,
  "channels_revoked": 0,
  "machines_stopping": 0,
  "members_removed": 0,
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "tickets_revoked": 0
}

OrganizationDto

FieldTypeRequiredDescription
created_atstring (date-time)Yes
idstring (uuid)Yes
namestringYes
rolestringYesThe caller's role in the organization.
suspended_atstring (date-time) | nullNoWhen an operator suspended the organization; null unless it is suspended. While suspended its machines are stopped and nothing may create, start, or reach into one (403 organization_suspended); reads, billing, keys, and settings still work.
Example
{
  "created_at": "2026-10-12T05:51:01Z",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "name": "dev",
  "role": "owner",
  "suspended_at": "2026-10-12T05:51:01Z"
}

OrganizationList

FieldTypeRequiredDescription
itemsOrganizationDto[]YesEvery organization the caller belongs to, by name. With an API key, only the key's organization.
Example
{
  "items": [
    {
      "created_at": "2026-10-12T05:51:01Z",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "name": "dev",
      "role": "owner",
      "suspended_at": "2026-10-12T05:51:01Z"
    }
  ]
}

OutputStreamDto

One of: stdout, stderr.

PlanDto

FieldTypeRequiredDescription
backendBackendDtoYes
cpuintegerYes
disk_gibintegerYes
idstring (uuid)Yes
memory_mibintegerYes
namestringYes
network_accessNetworkAccessPolicyDtoYes
pricePlanPriceDtoYes
versionintegerYes
sizestring | nullNosmall, default, large, or xlarge for the seeded size plans; null for other plans.
Example
{
  "backend": "mock",
  "cpu": 0,
  "disk_gib": 0,
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "memory_mib": 0,
  "name": "small",
  "network_access": {
    "egress_options": [
      "none"
    ],
    "interactive_access": "managed_terminal",
    "public_ingress": "disabled",
    "ssh_key_selection": "unavailable"
  },
  "price": {
    "currency": "USD",
    "effective_from": "2026-01-01T00:00:00.000000Z",
    "hourly": "0.012500",
    "monthly": "9.125000"
  },
  "size": "string",
  "version": 0
}

PlanPage

FieldTypeRequiredDescription
itemsPlanDto[]Yes
next_cursorstring | nullNo
Example
{
  "items": [
    {
      "backend": "mock",
      "cpu": 0,
      "disk_gib": 0,
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "memory_mib": 0,
      "name": "small",
      "network_access": {
        "egress_options": [
          "none"
        ],
        "interactive_access": "managed_terminal",
        "public_ingress": "disabled",
        "ssh_key_selection": "unavailable"
      },
      "price": {
        "currency": "USD",
        "effective_from": "2026-01-01T00:00:00.000000Z",
        "hourly": "0.012500",
        "monthly": "9.125000"
      },
      "size": "string",
      "version": 0
    }
  ],
  "next_cursor": "string"
}

PlanPriceDto

FieldTypeRequiredDescription
currencystringYespattern ^[A-Z]{3}$.
effective_fromstring (date-time)Yes
hourlystringYespattern ^(0|[1-9][0-9]*)\.[0-9]{6}$.
monthlystringYespattern ^(0|[1-9][0-9]*)\.[0-9]{6}$.
Example
{
  "currency": "USD",
  "effective_from": "2026-01-01T00:00:00.000000Z",
  "hourly": "0.012500",
  "monthly": "9.125000"
}

PlanSubscriptionDto

FieldTypeRequiredDescription
activebooleanYesWhether the period covers now.
cancel_at_period_endbooleanYesThe linked subscription was cancelled: the plan ends at period_end unless resumed before then.
included_microsintegerYesUsage included each period, in micros. It expires at period_end.
included_secondsintegerYesThe allowance as default-size seconds.
period_endstringYes
period_startstringYes
price_microsintegerYes
renewsbooleanYes
tierstringYesstarter ($20), pro ($100), team ($500), or scale ($2000).
Example
{
  "active": false,
  "cancel_at_period_end": false,
  "included_micros": 0,
  "included_seconds": 0,
  "period_end": "string",
  "period_start": "string",
  "price_micros": 0,
  "renews": false,
  "tier": "pro"
}

PortalDto

FieldTypeRequiredDescription
urlstringYes
Example
{
  "url": "https://hooks.example.com/vmyard"
}

PortDto

FieldTypeRequiredDescription
localhostbooleanYes
portintegerYes
publicbooleanYes
urlstringYeshttps://<label>-<port>.<edge domain>.
Example
{
  "localhost": false,
  "port": 0,
  "public": false,
  "url": "https://hooks.example.com/vmyard"
}

PortListDto

FieldTypeRequiredDescription
itemsPortDto[]YesExposed ports as the machine's host last confirmed them, by port.
labelstring | nullNoThe machine's name in port URLs; null until a port was first exposed.
Example
{
  "items": [
    {
      "localhost": false,
      "port": 0,
      "public": false,
      "url": "https://hooks.example.com/vmyard"
    }
  ],
  "label": "k7f2mq3x9a1b"
}

PortTokenDto

FieldTypeRequiredDescription
expires_atstringYesWhen the token stops working (UTC RFC 3339).
header_tokenstringYesFor API clients: send it as X-Vmyard-Token. A version 2 edge token bound to this route host and the host sandbox the machine runs in now; it stops working once the machine runs in another sandbox.
urlstringYesThe port URL without a token.
url_with_tokenstringYesOpens the port in a browser: the edge answers 302 to url and sets a host-scoped cookie, removing the token from the address bar.
Example
{
  "expires_at": "string",
  "header_token": "string",
  "url": "https://hooks.example.com/vmyard",
  "url_with_token": "string"
}

PortTokenRequest

FieldTypeRequiredDescription
ttl_secondsinteger | nullNoToken lifetime, 1-3600 seconds; default 900. 1–3600.
Example
{
  "ttl_seconds": 1
}

ProblemDetails

FieldTypeRequiredDescription
codestringYes
correlation_idstring (uuid)Yes
field_errorsmap of stringYes
messagestringYes
remediationstringYes
statusintegerYes
titlestringYes
typestringYes
retry_after_secondsinteger | nullNo
waitlist_urlstring | nullNoWith waitlisted: where to join the waitlist.
Example
{
  "code": "string",
  "correlation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "field_errors": {},
  "message": "string",
  "remediation": "string",
  "retry_after_seconds": 0,
  "status": 0,
  "title": "string",
  "type": "string",
  "waitlist_url": "string"
}

ProviderModelDto

FieldTypeRequiredDescription
idstringYesWhat to send as model in a prompt.
namestringYes
attachmentsboolean | nullNoAccepts image or file input.
context_tokensinteger | nullNo
providerstring | nullNoThe catalog provider that serves it (anthropic, openai, ...).
reasoningboolean | nullNo
release_datestring | nullNoYYYY-MM-DD, as the catalog states it.
Example
{
  "attachments": false,
  "context_tokens": 0,
  "id": "string",
  "name": "dev",
  "provider": "anthropic",
  "reasoning": false,
  "release_date": "string"
}

ProviderModelsDto

FieldTypeRequiredDescription
providersAgentModelsDto[]Yes
sourceProviderModelsSourceDtoYes
Example
{
  "providers": [
    {
      "models": [
        {
          "attachments": false,
          "context_tokens": 0,
          "id": "string",
          "name": "dev",
          "provider": "anthropic",
          "reasoning": false,
          "release_date": "string"
        }
      ],
      "provider": "claude",
      "reasoning_efforts": [
        "minimal"
      ]
    }
  ],
  "source": "live"
}

ProviderModelsSourceDto

One of: live, builtin.

PublicIngressDto

One of: disabled.

ReadySnapshotDto

A machine's newest ready snapshot, for the Files view's snapshot section.

FieldTypeRequiredDescription
created_atstring (date-time)YesWhen the snapshot was requested (UTC RFC 3339): the instant it copies.
idstring (uuid)Yes
sourceSnapshotSourceDtoYes
tierSnapshotTierDtoYes
completed_atstring (date-time) | nullNoWhen it became ready.
size_bytesinteger | nullNoPlaintext bytes of the snapshot's files.
Example
{
  "completed_at": "2026-10-12T05:51:01Z",
  "created_at": "2026-10-12T05:51:01Z",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "size_bytes": 0,
  "source": "api",
  "tier": "warm"
}

ReasoningEffortDto

One of: minimal, low, medium, high, xhigh.

RegionDto

FieldTypeRequiredDescription
backendBackendDtoYes
capacity_statusstringYes
idstring (uuid)Yes
namestringYes
versionintegerYes
Example
{
  "backend": "mock",
  "capacity_status": "available",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "name": "eu-central",
  "version": 0
}

RegionPage

FieldTypeRequiredDescription
itemsRegionDto[]Yes
next_cursorstring | nullNo
Example
{
  "items": [
    {
      "backend": "mock",
      "capacity_status": "available",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "name": "eu-central",
      "version": 0
    }
  ],
  "next_cursor": "string"
}

RemoveFileRequest

FieldTypeRequiredDescription
pathstringYes
Example
{
  "path": "notes/todo.txt"
}

ResolveAbuseFlagRequest

FieldTypeRequiredDescription
notestringYesWhat the review found, 1-500 characters.
operatorstringYesThe individual operator acting, 1-200 characters.
resolutionFlagResolutionDtoYes
Example
{
  "note": "string",
  "operator": "string",
  "resolution": "dismissed"
}

ResourcesDto

FieldTypeRequiredDescription
cpuintegerYes
disk_gibintegerYes
memory_mibintegerYes
Example
{
  "cpu": 0,
  "disk_gib": 0,
  "memory_mib": 0
}

RestoreMachineRequest

FieldTypeRequiredDescription
snapshot_idstring (uuid)YesA ready snapshot of this machine.
keep_ssh_keysbooleanNoKeep the login user's SSH authorized_keys (default false).
namestring | nullNoThe new machine's display name.
wakeboolean | nullNoWake the new machine at once (default true); false creates it stopped.
Example
{
  "keep_ssh_keys": false,
  "name": "dev",
  "snapshot_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "wake": false
}

ResumeDto

FieldTypeRequiredDescription
organization_idstring (uuid)Yes
resumedbooleanYesFalse when the organization was not suspended.
Example
{
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "resumed": false
}

RevealedEnvironmentDto

FieldTypeRequiredDescription
environment_idstring (uuid)Yes
filesRevealedFileDto[]Yes
varsmap of stringYes
versionEnvironmentVersionDtoYes
Example
{
  "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "files": [
    {
      "contents": "string",
      "encoding": "text",
      "path": "notes/todo.txt"
    }
  ],
  "vars": {},
  "version": {
    "change": {},
    "created_at": "string",
    "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "files": [
      {
        "path": "notes/todo.txt",
        "size": 0
      }
    ],
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "vars": [
      "string"
    ],
    "version": 0
  }
}

RevealedFileDto

FieldTypeRequiredDescription
contentsstringYes
encodingFileEncodingDtoYesAlways base64, so the exact bytes come back.
pathstringYes
Example
{
  "contents": "string",
  "encoding": "text",
  "path": "notes/todo.txt"
}

RevealRequest

FieldTypeRequiredDescription
version_idstring (uuid) | nullNoA version of this environment; omitted reveals the current version.
Example
{
  "version_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

RoleDto

One of: owner, admin, operator, billing, viewer.

SecretFileInput

A secret file. contents is UTF-8 text unless encoding is base64.

FieldTypeRequiredDescription
contentsstringYes
pathstringYesRelative to /work: no leading /, ~, ., .., or empty components, and not under .vmyard.
encodingFileEncodingDtoNo
Example
{
  "contents": "string",
  "encoding": "text",
  "path": "notes/todo.txt"
}

SetSshKeyRequest

FieldTypeRequiredDescription
public_keystringYesOne OpenSSH public key line: ssh-ed25519, ecdsa-sha2-nistp256/384/521, or ssh-rsa of at least 3072 bits, with an optional comment, without a trailing newline.
Example
{
  "public_key": "string"
}

SetVariableRequest

FieldTypeRequiredDescription
valuestringYesAt most 32 KiB without NUL.
Example
{
  "value": "string"
}

SignInProviderDto

FieldTypeRequiredDescription
defaultbooleanYesUsed when /v1/auth/login names no provider.
display_namestringYesThe button label, such as "ERP.AI" ("Continue with ERP.AI").
kindSignInProviderKindDtoYes
namestringYesWhat provider takes, such as erpai, github, or email.
Example
{
  "default": false,
  "display_name": "string",
  "kind": "oidc",
  "name": "dev"
}

SignInProviderKindDto

One of: oidc, github, email.

SignInProvidersDto

FieldTypeRequiredDescription
accessAccessModeDtoYesinvite_only: anyone may sign in, but only approved accounts may create organizations, machines, and API keys.
providersSignInProviderDto[]YesSorted by name.
waitlist_urlstring | nullNoWhere to join the waitlist, while invite-only.
Example
{
  "access": "open",
  "providers": [
    {
      "default": false,
      "display_name": "string",
      "kind": "oidc",
      "name": "dev"
    }
  ],
  "waitlist_url": "string"
}

SnapshotAccepted

A push or template save was accepted.

FieldTypeRequiredDescription
machine_idstring (uuid)Yes
operation_idstring (uuid)Yes
operation_urlstringYes
snapshot_idstring (uuid)Yes
snapshot_urlstringYes
statusstringYes
Example
{
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "operation_url": "/v1/operations/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "snapshot_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "snapshot_url": "string",
  "status": "string"
}

SnapshotDeleteItemDto

FieldTypeRequiredDescription
resultSnapshotDeleteResultDtoYes
snapshot_idstring (uuid)Yes
Example
{
  "result": "deleted",
  "snapshot_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

SnapshotDeleteResultDto

What happened to one requested snapshot.

One of: deleted, not_found, pending, template.

SnapshotDeleteResults

Per-snapshot results of a bulk delete, in request order (oldest first for a machine's snapshots). The request succeeds even when some items were not deleted.

FieldTypeRequiredDescription
deletedintegerYesHow many were deleted.
resultsSnapshotDeleteItemDto[]Yes
Example
{
  "deleted": 0,
  "results": [
    {
      "result": "deleted",
      "snapshot_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
    }
  ]
}

SnapshotDto

FieldTypeRequiredDescription
created_atstring (date-time)Yes
idstring (uuid)Yes
machine_idstring (uuid)YesThe machine the snapshot was taken from.
operation_idstring (uuid)YesThe push operation.
sourceSnapshotSourceDtoYes
statusSnapshotStatusDtoYes
tierSnapshotTierDtoYes
completed_atstring (date-time) | nullNo
disk_syncedboolean | nullNoThe guest flushed its filesystems before the snapshot.
error_codestring | nullNo
generationinteger | nullNo1 for a machine's first push, then one more than its parent's.
manifeststring | nullNoThe stored manifest (64 hex digits) once ready.
namestring | nullNoThe template name, for a template.
parent_manifeststring | nullNoThe manifest the machine last was or came from.
size_bytesinteger | nullNoPlaintext bytes of the snapshot's files.
uploaded_bytesinteger | nullNoCompressed bytes this push uploaded (chunks already stored are reused).
Example
{
  "completed_at": "2026-10-12T05:51:01Z",
  "created_at": "2026-10-12T05:51:01Z",
  "disk_synced": false,
  "error_code": "string",
  "generation": 0,
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "manifest": "string",
  "name": "dev",
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "parent_manifest": "string",
  "size_bytes": 0,
  "source": "api",
  "status": "pending",
  "tier": "warm",
  "uploaded_bytes": 0
}

SnapshotPage

FieldTypeRequiredDescription
itemsSnapshotDto[]Yes
next_cursorstring (uuid) | nullNo
Example
{
  "items": [
    {
      "completed_at": "2026-10-12T05:51:01Z",
      "created_at": "2026-10-12T05:51:01Z",
      "disk_synced": false,
      "error_code": "string",
      "generation": 0,
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "manifest": "string",
      "name": "dev",
      "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "parent_manifest": "string",
      "size_bytes": 0,
      "source": "api",
      "status": "pending",
      "tier": "warm",
      "uploaded_bytes": 0
    }
  ],
  "next_cursor": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

SnapshotSourceDto

Who took a snapshot.

One of: api, tier_policy, automatic.

SnapshotStatusDto

One of: pending, ready, failed.

SnapshotTierDto

One of: warm, cold.

SshAccessDto

FieldTypeRequiredDescription
portintegerYesThe gateway port allocated to the machine.
userstringYes
hoststring | nullNoThe SSH gateway for the machine's host or region; null when none is configured.
Example
{
  "host": "ssh.eu.example.com",
  "port": 0,
  "user": "vmyard"
}

SshKeySelectionDto

One of: unavailable.

StaleReasonDto

One of: host_unreachable, not_reported, poll_overdue.

StartCommandRequest

FieldTypeRequiredDescription
argvstring[] | nullNoProgram and arguments. Exactly one of argv or command.
commandstring | nullNoShell command run as /bin/sh -c <command>, at most 8192 bytes.
Example
{
  "argv": [
    "string"
  ],
  "command": "string"
}

StartingSoonDto

A create or start waiting for capacity. Its operation stays pending and is tried again every few seconds; it begins as soon as a server has room, or fails as capacity_unavailable at expires_at. Nothing is billed while it waits.

FieldTypeRequiredDescription
expires_atstring (date-time)YesWhen it fails if no room appears (UTC RFC 3339).
operation_idstring (uuid)YesThe waiting create or start operation.
positionintegerYesIts place in line among the region's waiting starts (1 is next; paid starts are ahead of every trial start).
priorityStartPriorityDtoYes
queued_atstring (date-time)YesWhen it began waiting (UTC RFC 3339).
reasonCapacityShortageDtoYes
Example
{
  "expires_at": "2026-10-12T05:51:01Z",
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "position": 0,
  "priority": "paid",
  "queued_at": "2026-10-12T05:51:01Z",
  "reason": "no_host_in_region"
}

StartLimitDto

FieldTypeRequiredDescription
limitintegerYes
usedintegerYes
windowstringYesRolling window: minute, hour, or day.
Example
{
  "limit": 0,
  "used": 0,
  "window": "hour"
}

StartPriorityDto

Paid starts leave the queue before trial starts.

One of: paid, trial.

StopReasonDto

Who asked for a stop: a caller through the API, or the control plane itself (an auto-stop deadline, an exhausted balance, idle sleep, an operator's suspension of the organization, the sustained-CPU abuse guard, or the organization's deletion).

One of: api, auto_stop, billing, idle_sleep, suspension, abuse, organization_deleted.

SuspensionDto

FieldTypeRequiredDescription
already_suspendedbooleanYesThe organization was already suspended: nothing changed, and the original suspension is returned.
channels_revokedintegerYesOpen terminals and desktops revoked; each ends at its relay's next heartbeat (at most 15 s) with reason revoked.
machines_stoppingintegerYesMachines that wanted to run; the worker persists a stop for each (stop_reason: suspension) within about a second.
organization_idstring (uuid)Yes
reasonstringYes
suspended_atstringYes
tickets_revokedintegerYesUnredeemed terminal and desktop tickets deleted.
Example
{
  "already_suspended": false,
  "channels_revoked": 0,
  "machines_stopping": 0,
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "reason": "string",
  "suspended_at": "string",
  "tickets_revoked": 0
}

TerminalClientMessage

A JSON text message from the browser.

One of:

  • type: "resize" with cols, rows
  • type: "signal" with signal
  • type: "close"
Example
{
  "cols": 0,
  "rows": 0,
  "type": "resize"
}

TerminalServerMessage

A JSON text message to the browser. exit and closed are final; the WebSocket closes after them.

One of:

  • type: "opened" with terminal_id, user
  • type: "exit" with exit_code, signal
  • type: "closed" with reason
Example
{
  "terminal_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "type": "opened",
  "user": "vmyard"
}

TerminalTicketDto

FieldTypeRequiredDescription
expires_atstringYes
ticketstringYesSingle-use credential for one terminal WebSocket of this machine, valid for 30 seconds, only with the session that minted it.
urlstringYesThe WebSocket path with the ticket; add cols and rows.
Example
{
  "expires_at": "string",
  "ticket": "string",
  "url": "https://hooks.example.com/vmyard"
}

TransferOwnershipRequest

FieldTypeRequiredDescription
user_idstring (uuid)YesA member who becomes the owner; the caller becomes an admin.
Example
{
  "user_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

TrialDto

FieldTypeRequiredDescription
activebooleanYesWhether trial rules (two machines, small/default only) apply.
concurrent_machinesintegerYes
max_hourly_microsintegerYesSizes priced above this hourly rate are refused during the trial.
remaining_microsintegerYes
remaining_secondsintegerYesRemaining trial time as default-size seconds.
total_microsintegerYes
ended_atstring | nullNoWhen the trial was ended early and its remaining balance forfeited. Trial rules still apply until the first payment.
Example
{
  "active": false,
  "concurrent_machines": 0,
  "ended_at": "string",
  "max_hourly_micros": 0,
  "remaining_micros": 0,
  "remaining_seconds": 0,
  "total_micros": 0
}

UnsubscribedDto

FieldTypeRequiredDescription
enabledbooleanYes
organization_idstring (uuid)Yes
typestringYes
Example
{
  "enabled": false,
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "type": "operation_failed"
}

UpdateAutoRefillRequest

FieldTypeRequiredDescription
credit_packsintegerYes1-50 packs of $20. 1–50.
enabledbooleanYes
monthly_cap_microsintegerYesAt least one refill's amount.
threshold_microsintegerYes
Example
{
  "credit_packs": 1,
  "enabled": false,
  "monthly_cap_micros": 0,
  "threshold_micros": 0
}

UpdateBillingRequest

FieldTypeRequiredDescription
minimum_balance_microsinteger | nullNo
spend_cap_microsinteger | nullNoMonthly credit spend cap in micros, or null to remove it.
Example
{
  "minimum_balance_micros": 0,
  "spend_cap_micros": 0
}

UpdateEnvironmentRequest

FieldTypeRequiredDescription
is_defaultboolean | nullNotrue makes this the default; false leaves the organization without one.
namestring | nullNo
safe_for_third_partiesboolean | nullNo
Example
{
  "is_default": false,
  "name": "dev",
  "safe_for_third_parties": false
}

UpdateMachineRequest

A partial settings change. At least one setting is required.

FieldTypeRequiredDescription
auto_stop_after_secondsinteger | nullNoNew auto-stop duration, 60 to 2592000 seconds, or null for never. The deadline of a running machine restarts from now. 60–2592000.
idle_sleep_after_secondsinteger | nullNoNew idle-sleep window, 300 to 86400 seconds, or null to turn idle sleep off. The idle window restarts. 300–86400.
namestring | nullNoNew display name, following the tenant_alias rules. The tenant alias itself is immutable.
never_auto_stopbooleanNotrue disables auto-stop. It cannot be combined with auto_stop_after_seconds.
Example
{
  "auto_stop_after_seconds": 60,
  "idle_sleep_after_seconds": 300,
  "name": "dev",
  "never_auto_stop": false
}

UpdateMemberRequest

FieldTypeRequiredDescription
max_running_machinesinteger | nullNo0-10000, or null to remove the member's cap; absent leaves it. at most 10000.
rolenull | RoleDtoNo
Example
{
  "max_running_machines": 0,
  "role": "owner"
}

UpdateNotificationPreferencesRequest

FieldTypeRequiredDescription
alertsmap of stringYesAlert type to on (true) or off (false); unlisted types keep their current setting.
Example
{
  "alerts": {}
}

UpdateOrganizationRequest

FieldTypeRequiredDescription
namestringYes1–64 characters.
Example
{
  "name": "dev"
}

UpdateWebhookRequest

Omitted fields keep their value; at least one field is required.

FieldTypeRequiredDescription
enabledboolean | nullNo
eventsWebhookEventDto[] | nullNoat least 1 items.
namestring | nullNo1–64 characters.
urlstring | nullNoat most 2048 characters.
Example
{
  "enabled": false,
  "events": [
    "machine.ready"
  ],
  "name": "dev",
  "url": "https://hooks.example.com/vmyard"
}

UpgradeEnvironmentRequest

FieldTypeRequiredDescription
machine_idsstring (uuid)[] | nullNoMachines to upgrade; omitted upgrades every running machine created with this environment. At most 100.
Example
{
  "machine_ids": [
    "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
  ]
}

UpgradeEnvironmentResponse

FieldTypeRequiredDescription
environment_idstring (uuid)Yes
operationsUpgradeOperationDto[]YesOne apply_environment operation per upgraded machine.
skippedUpgradeSkippedDto[]Yes
versionintegerYes
version_idstring (uuid)Yes
Example
{
  "environment_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "operations": [
    {
      "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "operation_url": "/v1/operations/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
    }
  ],
  "skipped": [
    {
      "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "reason": "not_running"
    }
  ],
  "version": 0,
  "version_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

UpgradeOperationDto

FieldTypeRequiredDescription
machine_idstring (uuid)Yes
operation_idstring (uuid)Yes
operation_urlstringYes
Example
{
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "operation_url": "/v1/operations/6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

UpgradeSkippedDto

FieldTypeRequiredDescription
machine_idstring (uuid)Yes
reasonstringYesalready_current or not_running (start it, then upgrade again).
Example
{
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "reason": "not_running"
}

UsageDto

FieldTypeRequiredDescription
cost_microsintegerYes
machinesMachineUsageDto[]Yes
secondsintegerYes
sincestringYes
untilstringYes
Example
{
  "cost_micros": 0,
  "machines": [
    {
      "cost_micros": 0,
      "hourly_micros": 0,
      "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "multiplier": 0.5,
      "running": false,
      "seconds": 0
    }
  ],
  "seconds": 0,
  "since": "string",
  "until": "string"
}

VersionedSelectionDto

FieldTypeRequiredDescription
idstring (uuid)Yes
versionintegerYes
Example
{
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "version": 0
}

WaitlistAckDto

FieldTypeRequiredDescription
receivedbooleanYes
Example
{
  "received": false
}

WaitlistDecisionDto

FieldTypeRequiredDescription
changedbooleanYesFalse when the entry already had this decision.
entryWaitlistEntryDtoYes
notificationNotificationDtoYes
grantnull | AccessGrantDtoNoThe access grant behind an approved or revoked entry.
Example
{
  "changed": false,
  "entry": {
    "access_grant_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "company": "string",
    "created_at": "string",
    "decided_at": "string",
    "decided_by": "string",
    "decision_reason": "string",
    "email": "ada@example.com",
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "name": "dev",
    "raw_answers": {},
    "status": "pending",
    "updated_at": "string",
    "use_case": "string"
  },
  "grant": {
    "created_at": "string",
    "credited_at": "string",
    "credited_organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "email": "ada@example.com",
    "granted_by": "string",
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "initial_credit_micros": 0,
    "provider": "github",
    "reason": "string",
    "revoke_reason": "string",
    "revoked_at": "string",
    "revoked_by": "string",
    "subject": "string"
  },
  "notification": "sent"
}

WaitlistDecisionRequest

FieldTypeRequiredDescription
operatorstringYesThe individual operator acting, 1-200 characters.
reasonstringYesWhy, 1-500 characters.
Example
{
  "operator": "string",
  "reason": "string"
}

WaitlistEntryDto

FieldTypeRequiredDescription
created_atstringYes
emailstringYes
idstring (uuid)Yes
raw_answersobjectYesThe form's answers as received.
statusWaitlistStatusDtoYes
updated_atstringYes
access_grant_idstring (uuid) | nullNo
companystring | nullNo
decided_atstring | nullNo
decided_bystring | nullNo
decision_reasonstring | nullNo
namestring | nullNo
use_casestring | nullNo
Example
{
  "access_grant_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "company": "string",
  "created_at": "string",
  "decided_at": "string",
  "decided_by": "string",
  "decision_reason": "string",
  "email": "ada@example.com",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "name": "dev",
  "raw_answers": {},
  "status": "pending",
  "updated_at": "string",
  "use_case": "string"
}

WaitlistFilterDto

One of: pending, approved, rejected, revoked, all.

WaitlistPage

FieldTypeRequiredDescription
itemsWaitlistEntryDto[]Yes
Example
{
  "items": [
    {
      "access_grant_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "company": "string",
      "created_at": "string",
      "decided_at": "string",
      "decided_by": "string",
      "decision_reason": "string",
      "email": "ada@example.com",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "name": "dev",
      "raw_answers": {},
      "status": "pending",
      "updated_at": "string",
      "use_case": "string"
    }
  ]
}

WaitlistStatusDto

One of: pending, approved, rejected, revoked.

WebhookAckDto

FieldTypeRequiredDescription
outcomestringYesapplied, duplicate, stale, or ignored.
receivedbooleanYes
Example
{
  "outcome": "applied",
  "received": false
}

WebhookDeliveryDto

FieldTypeRequiredDescription
attempt_countintegerYes
created_atstring (date-time)Yes
event_idstring (uuid)YesShared by every endpoint's delivery of the same event and sent as X-VMYard-Event-Id; deduplicate on it.
event_typeWebhookEventDtoYes
idstring (uuid)Yes
machine_idstring (uuid)Yes
operation_idstring (uuid)Yes
statusWebhookDeliveryStatusDtoYes
delivered_atstring (date-time) | nullNo
last_attempt_atstring (date-time) | nullNo
last_errorstring | nullNoWhy the last attempt failed, when it did.
last_status_codeinteger | nullNoHTTP status of the last attempt; null when no response arrived.
next_attempt_atstring (date-time) | nullNoWhen the next attempt is due; set only while pending.
Example
{
  "attempt_count": 0,
  "created_at": "2026-10-12T05:51:01Z",
  "delivered_at": "2026-10-12T05:51:01Z",
  "event_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "event_type": "machine.ready",
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "last_attempt_at": "2026-10-12T05:51:01Z",
  "last_error": "string",
  "last_status_code": 0,
  "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "next_attempt_at": "2026-10-12T05:51:01Z",
  "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "status": "pending"
}

WebhookDeliveryPage

FieldTypeRequiredDescription
itemsWebhookDeliveryDto[]Yes
Example
{
  "items": [
    {
      "attempt_count": 0,
      "created_at": "2026-10-12T05:51:01Z",
      "delivered_at": "2026-10-12T05:51:01Z",
      "event_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "event_type": "machine.ready",
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "last_attempt_at": "2026-10-12T05:51:01Z",
      "last_error": "string",
      "last_status_code": 0,
      "machine_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "next_attempt_at": "2026-10-12T05:51:01Z",
      "operation_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "status": "pending"
    }
  ]
}

WebhookDeliveryStatusDto

One of: pending, delivering, succeeded, dead.

WebhookDto

FieldTypeRequiredDescription
created_atstring (date-time)Yes
enabledbooleanYes
eventsWebhookEventDto[]Yes
idstring (uuid)Yes
namestringYes
organization_idstring (uuid)Yes
secret_rotated_atstring (date-time)Yes
updated_atstring (date-time)Yes
urlstringYes
created_bystring (uuid) | nullNoThe member who created the endpoint; null once that user is deleted.
Example
{
  "created_at": "2026-10-12T05:51:01Z",
  "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "enabled": false,
  "events": [
    "machine.ready"
  ],
  "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "name": "ci",
  "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
  "secret_rotated_at": "2026-10-12T05:51:01Z",
  "updated_at": "2026-10-12T05:51:01Z",
  "url": "https://hooks.example.com/vmyard"
}

WebhookEventDto

A lifecycle event an endpoint subscribes to.

One of: machine.ready, machine.started, machine.stopped, machine.deleted, machine.error, operation.failed, snapshot.ready, template.ready.

WebhookPage

FieldTypeRequiredDescription
itemsWebhookDto[]Yes
next_cursorstring (uuid) | nullNo
Example
{
  "items": [
    {
      "created_at": "2026-10-12T05:51:01Z",
      "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "enabled": false,
      "events": [
        "machine.ready"
      ],
      "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "name": "ci",
      "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
      "secret_rotated_at": "2026-10-12T05:51:01Z",
      "updated_at": "2026-10-12T05:51:01Z",
      "url": "https://hooks.example.com/vmyard"
    }
  ],
  "next_cursor": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f"
}

WebhookSecretDto

Returned on creation and secret rotation; the secret is never shown again.

FieldTypeRequiredDescription
secretstringYeswhsec_ plus 43 base64url characters. The whole string is the HMAC-SHA256 key for X-VMYard-Signature.
webhookWebhookDtoYes
Example
{
  "secret": "whsec_…",
  "webhook": {
    "created_at": "2026-10-12T05:51:01Z",
    "created_by": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "enabled": false,
    "events": [
      "machine.ready"
    ],
    "id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "name": "ci",
    "organization_id": "6f1c2d3e-4b5a-4c7d-8e9f-0a1b2c3d4e5f",
    "secret_rotated_at": "2026-10-12T05:51:01Z",
    "updated_at": "2026-10-12T05:51:01Z",
    "url": "https://hooks.example.com/vmyard"
  }
}

WriteFileRequest

FieldTypeRequiredDescription
contentstringYes
encodingFileEncodingDtoYes
Example
{
  "content": "string",
  "encoding": "text"
}