---
title: "Stop a node (disk parks; billing stops)"
method: POST
path: "/preview/nodes/{name}/stop"
tags: ["nodes"]
---

# Stop a node (disk parks; billing stops)

`POST /preview/nodes/{name}/stop`

## Request

- Base URL: `https://autoresearch.sfcompute.com`
- URL: `https://autoresearch.sfcompute.com/preview/nodes/{name}/stop`
- Auth: HTTP bearer

Stop a node and stop paying for it now instead of waiting out the idle grace window. The routine end of a session: a node left running is what costs money. The disk is parked with files intact; the next run_command wakes it. A node that keeps stopping under you mid-task wants hold_node, not this. The parked disk lives on one machine: if that machine fails while the node is stopped, the files are lost (credited automatically) - for files you can't afford to lose, call snapshot_node after stopping. Stopping a queued create cancels it (status "canceled": nothing was created, nothing billed); stopping a queued wake parks the disk again; a node stuck restoring or waking also stops, files intact - only a first-time create must reach running before it can stop. Idempotent: stopping an already-stopped node returns the stopped shape. Billing ends at once; status may read "stopping" for minutes after a large write while the disk's last writes save - snapshot_node waits for stopped, run_command does not. A stopped answer carries wake_estimate - what a wake requested now would be quoted, null if it cannot start (get_node has the shape) - so the cost of getting the node back is visible as the disk parks, not first at the wake. A stop KILLS every detached command still running on the node - processes don't survive a stop, your volume's files and logs do - and a command caught mid-run has no exit to report, so it ends as `lost` with no exit_code and no declared result; this tool's answer carries a `warning` naming every detached command that was still running when the stop landed. Poll get_command for the exit_code first when you need a verdict. Stopping a node this investigation did not create refuses unless you pass force: true - the refusal names who created it, what for, and what is live on it. Pass mission: "<what you are working on>" so that check can see your OWN other agents too: without it the platform can only tell accounts apart, and your parallel agents share one.

## Path parameters

- `name` string, required: Node name (from `list_nodes`).

## Query parameters

- `workspace` string

## Request body

- object
  - `force` boolean, nullable: Stop a node somebody else created. Without it, a node whose `created_by` is not you refuses - a workspace is shared, and the node you are about to stop may be carrying another agent's training run. Set it only once you know whose node it is and that stopping it is what the human wants.
  - `mission` string, nullable: The mission you are working under (from open_mission). Naming it is how the platform tells your agent apart from your OTHER agents: a request resolves to your ACCOUNT, and parallel agents on one login share it, so without this a node from your other investigation reads as "yours". With it, a node created under a different mission is treated exactly like a teammate's.

## Response `200`

The capability's JSON result.

- Result: The capability's result: the same object the MCP tool returns as structuredContent. Resources carry an `object` type discriminator and an immutable id; money is integer micro-dollars in `*_usd_micros` fields.
  - `object` string: The resource type, when the result is one resource.

## Other responses

- `400`: Malformed request: bad JSON, a parameter that does not parse, or a value outside its range. Code `invalid`.
- `401`: No bearer token, or one this API cannot verify. Code `unauthenticated`.
- `403`: Authenticated, but the token's scopes or the account's role do not reach this operation. The message names the scope word to request. Code `forbidden`.
- `404`: No such route. Code `not_found`; the body names the OpenAPI document.
- `422`: A well-formed request the platform declined: no such node, a cap reached, a state that forbids the move. The message says which, and what to do instead. Code `refused`.
- `429`: Over this door's per-customer budget. Wait `Retry-After` seconds. Code `rate_limited`.
- `500`: Our fault. Retry; if it persists, quote the request-id. Code `internal`.
- `503`: The node changed state under every pass this call made - a wake, a stop, or a container exit landing mid-call. Nothing ran and nothing was billed; the same call works shortly. Wait `Retry-After` seconds and repeat it. Code `settling`.

---

[API](https://skmtc.dev/givemeanode/apis/autoresearch-customer-api.md) · [All operations](https://skmtc.dev/givemeanode/apis/autoresearch-customer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/givemeanode/apis/autoresearch-customer-api/revisions/f88dcb70ac6c?raw)
