---
title: "Start a computer, optionally for a set number of hours"
method: POST
path: "/api/computers/{id}/start"
tags: ["computers"]
---

# Start a computer, optionally for a set number of hours

`POST /api/computers/{id}/start`

## Request

- Base URL: `https://www.orgo.ai`
- URL: `https://www.orgo.ai/api/computers/{id}/start`
- Auth: HTTP bearer

Starts a stopped computer (a running one answers success). Body, all optional: async (true answers 202 at once with an operation to poll), and when it ends: ends_in_hours (1 to 720, counted from when it is running) or ends_at (ISO 8601, in the future, at most 720 hours away), not both; null for either keeps it forever. When the end is up the computer is deleted, with everything on it. on_end is not a choice: "delete" is accepted with an end and changes nothing, alone it is a 400 (a Start never touches the end a computer already has), and any other value ("stop" included) is a 400. The end is checked as PATCH /api/computers/{id} checks it, before anything starts: a bad one is a 400 and nothing starts. It is set only once the computer is running, as PATCH sets it, so a Start that fails holds no credit and leaves no clock running. A computer stopped when its time ran out comes back with the new end (with none, its end is cleared). A running hourly computer prepays its run to the end, under the same rule as PATCH (the workspace owner, and on a paid plan only signed in or with a key that has Billing write); when the credit is short or the caller may not prepay, the end is still set, the time is billed by the hour, and the answer says prepay_warning. An end that could not be set never fails the Start: the 200 carries end_not_set with why (error) and a code. With async, the 202 says end_pending, and the operation’s result carries the end once it is running.

## Path parameters

- `id` string, required

## Request body

- object
  - `async` boolean
  - `ends_in_hours` integer, nullable
  - `ends_at` string, date-time, nullable
  - `on_end` 'delete' | 'null', nullable: Not a choice: a computer with an end is deleted when its time is up, running or not, with everything on it. "delete" is accepted and changes nothing; omitted or null is the same. Any other value, "stop" included, is 400 INVALID_ENDS: "A computer with an end is deleted when its time is up. To keep a computer, leave out the end." On a computer (GET, the listing, and the create, PATCH, Start and Resume answers) on_end is read only: "delete", "stop" for a computer whose end was set before this rule (stopped then, and deleted 7 days later unless it is started), or null with no end.

## Response `200`

Started: success, and with an end ends_at, on_end (read only), ended_at and deletes_at, and for an hourly computer prepaid_until, prepaid_cents and prepay_warning when it was not prepaid. end_not_set (error, code) when the end could not be set; the computer is running.

## Other responses

- `202`: async: the operation to poll (operation_id, poll_url), and end_pending with the end it gets once it is running.
- `400`: INVALID_ENDS (a time in the past, past 720 hours, both fields, an on_end other than "delete", or on_end without ends_in_hours or ends_at) or ENDS_NOT_SUPPORTED (not a Linux or Windows computer). Nothing started.
- `402`: The plan or the credit does not cover running it (upgrade_required, insufficient_credit).
- `403`: View only access (workspace_read_only), or an end asked for by a caller PATCH refuses: computer_key (the computer’s own key or identity token) or computer_scope (a key for one computer). Nothing started.
- `409`: The computer cannot start now (its code says why), or OPERATION_IN_PROGRESS: another Start without this end is under way.
- `429`: Over one of the account's rate limits (rate_limited): `limit` names it, `retry_after` and Retry-After say how many seconds to wait. Limits are per account (the workspace owner when the request acts on a computer or a workspace) and set by its plan (x-rate-limits).
- `503`: ENDS_UNAVAILABLE: an end, or on_end, was asked for where they are not set up yet. Nothing started.

## Changes

- **2026-10-30** `afb6f0ee1aac`: 2 info
  - added the new optional request property `on_end`
  - added the non-success response with the status `429`
- **2026-10-28** `354a2c3d47fc`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/orgo/apis/orgo-api/changes/api/computers/:id/start/post.md)

---

[API](https://skmtc.dev/orgo/apis/orgo-api.md) - [All operations](https://skmtc.dev/orgo/apis/orgo-api/llms.txt) - [OpenAPI document](https://skmtc.dev/orgo/apis/orgo-api/revisions/e4c1e7379fa5?raw)
