# Park a server

Parks a running server: its disk is kept and the server is stopped, so the work survives and the hourly price stops. The answer is `202 Accepted` with the server in `parking`; poll [Get a server](/docs/api-reference/forge-compute/get-host) until it is `parked`. [Resume it](/docs/api-reference/forge-compute/resume-host) later to continue where it left off.

How the disk is kept depends on the offering's `capabilities.park` in [List compute offerings](/docs/api-reference/forge-compute/list-offerings): `snapshot` keeps a snapshot and removes the server; `poweroff` keeps the stopped server itself. An offering whose `capabilities.park` is `false` cannot park at all: `park` is never in the server's `actions`, and a park is refused with `FORGE_COMPUTE_ACTION_UNSUPPORTED`; delete such a server instead. If the park cannot be completed, the server goes back to `ready` (or to `awaiting_client` when Forge never reported the server's host key) with `failure` set. When the server could not be confirmed running again, `failure.message` says it may have been left switched off; it is charged as a running server until it is parked or deleted.

**Billing.** An Aitronos server stops being charged by the hour once the server is gone (every started hour is charged, as always); from then on its snapshot is charged per GB-month at `price.parked_per_gb_month`, until it is resumed and ready again, or deleted. For a server in your own account, the provider's own rules apply — some providers keep charging for a stopped server.

**Parked Aitronos servers expire after 30 days.** An Aitronos server that stays parked for 30 days is deleted together with its snapshot, so an unused server costs nothing. Its owner is notified 3 days before, and the server's `parked_expires_at` shows the deadline. [Resuming](/docs/api-reference/forge-compute/resume-host) it before then cancels the expiry. Servers in your own account never expire.

Allowed while the server is `awaiting_client`, `securing`, `installing`, `pairing` or `ready`. On an offering whose `capabilities.park` is `poweroff`, a park also waits until Forge has [reported the server's host key](/docs/api-reference/forge-compute/report-host-key): before that, `park` is not in `actions` and a park is refused with `FORGE_COMPUTE_INVALID_STATE`, because a server stopped in the middle of its setup would never finish it. Asking again while it is `parking` or `parked` returns it unchanged. The organization's [settings](/docs/api-reference/forge-compute/get-settings) can also park servers automatically when idle or at the spending limit. Requires a bearer token (or API key) whose principal holds the `use_forge` capability in the acting organization and created the server or holds `manage_forge`. It works while Forge cloud compute is switched off.

#### Path Parameters

**`host_id`** string required

The server's id: the `fchost_` id returned in `id`, or the UUID sent when the server was created (any letter case, with or without hyphens).

#### Query Parameters

**`organization_id`** string optional

The organization the server belongs to: send its `organization.id` (from [List your servers in every organization](/docs/api-reference/forge-compute/list-my-hosts)). Defaults to your current organization, where a server of another organization is not found. You must be an active member of it, or the request is refused with `403 ORGANIZATION_ACCESS_DENIED`.

#### Headers

**`X-Organization-Id`** string optional

The same as `organization_id`, as a header. When both are sent, the query parameter wins.

This endpoint takes no body.

## Returns

`202 Accepted` with the [server object](/docs/api-reference/forge-compute/get-host#returns) in `parking`.


```json
{
  "id": "fchost_5d0c2b9e7a414f3c9e8b1a6d2f4c7e90",
  "offering_id": "aitronos",
  "kind": "managed",
  "name": "build-box",
  "organization": {"id": "org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c", "name": "Acme Engineering"},
  "user_id": "usr_7f3a9c2e1b8d4e6fa0c5b3d9e2f1a4c7",
  "project_group": {"id": "fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c", "client_id": "grp-clients", "name": "Clients"},
  "location_id": "eu-central",
  "location_label": "Germany",
  "size_id": "std-16",
  "size_label": "16 vCPU · 64 GB",
  "state": "parking",
  "state_label": "Parking: saving the server, then shutting it down",
  "transient": true,
  "step": null,
  "step_started_at": null,
  "state_changed_at": "2026-09-28T18:00:03.211870Z",
  "failure": null,
  "ipv4": "203.0.113.24",
  "ipv6": "2001:db8:4f2a::1",
  "ssh_port": 22,
  "ssh_user": "forge",
  "bootstrap_host_key_pub": null,
  "host_key_pub": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleServerHostKeyForDocumentationOnly0000",
  "price": {
    "hourly": "0.83",
    "monthly_cap": "520.30",
    "currency": "CHF",
    "source": "aitronos",
    "includes_vat": false,
    "catalog_version": "fc-3b8e1f0a9c42",
    "quoted_at": "2026-09-28T09:00:00.184066Z",
    "parked_per_gb_month": "0.0269",
    "price_verified": true
  },
  "month_to_date": "8.30",
  "notice": null,
  "idle_reminder": null,
  "reconcile_flags": null,
  "actions": ["delete", "revoke"],
  "created_at": "2026-09-28T09:00:00.184066Z",
  "ready_at": "2026-09-28T09:03:41.502318Z",
  "parked_at": null,
  "parked_expires_at": null,
  "deleted_at": null,
  "revoked_at": null,
  "revoke_reason": null,
  "last_activity_at": "2026-09-28T09:25:00Z"
}
```

## Errors

| Status | Code | When |
|  --- | --- | --- |
| 401 | `AUTHENTICATION_REQUIRED` | No valid credential. |
| 403 | `ORGANIZATION_ACCESS_DENIED` | `organization_id` or `X-Organization-Id` names an organization you are not an active member of. |
| 403 | `INSUFFICIENT_PERMISSIONS` | The caller does not hold `use_forge` in the acting organization. |
| 404 | `FORGE_COMPUTE_HOST_NOT_FOUND` | No server with this id in the acting organization, or it was created by someone else and the caller does not hold `manage_forge`. |
| 409 | `FORGE_COMPUTE_INVALID_STATE` | The server is not running (for example `creating`, `booting`, `resuming` or `deleting`), or it is on a `poweroff` offering and Forge has not reported its host key yet. `details.action` is `park`. |
| 409 | `FORGE_COMPUTE_ACTION_UNSUPPORTED` | The offering cannot park servers. `details.offering` names it. |
| 422 | `INVALID_ID_FORMAT` | `host_id` is neither a UUID nor `fchost_<32 hex>`. |



```bash cURL
curl -X POST "https://api.aitronos.com/v1/forge/compute/hosts/fchost_5d0c2b9e7a414f3c9e8b1a6d2f4c7e90/park" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```


```python Python SDK
# pip install aitronos-sdk
#
# The Python SDK does not expose a typed `forge_compute` namespace yet, so call
# the endpoint directly with the same credential you would pass to `Aitronos(...)`
# — an API key or a bearer token, both sent as `Authorization: Bearer <value>`.
import httpx

API_KEY = "your-api-key"

server = httpx.post(
    "https://api.aitronos.com/v1/forge/compute/hosts/fchost_5d0c2b9e7a414f3c9e8b1a6d2f4c7e90/park",
    headers={"Authorization": f"Bearer {API_KEY}"},
).json()
print(server["state"], server["actions"])
```


```python Python
import os
import requests

token = os.environ["AITRONOS_TOKEN"]
response = requests.post(
    "https://api.aitronos.com/v1/forge/compute/hosts/fchost_5d0c2b9e7a414f3c9e8b1a6d2f4c7e90/park",
    headers={"Authorization": f"Bearer {token}"},
)
if response.status_code == 202:
    print(response.json()["state_label"])
else:
    print(response.json()["error"]["message"])
```


```javascript JavaScript
const response = await fetch(
  "https://api.aitronos.com/v1/forge/compute/hosts/fchost_5d0c2b9e7a414f3c9e8b1a6d2f4c7e90/park",
  {
    method: "POST",
    headers: { Authorization: `Bearer ${process.env.AITRONOS_TOKEN}` },
  },
);
const server = await response.json();
console.log(response.status, server.state); // 202 ...
```

**Response:**

202 Accepted

```json
{
  "id": "fchost_5d0c2b9e7a414f3c9e8b1a6d2f4c7e90",
  "offering_id": "aitronos",
  "kind": "managed",
  "name": "build-box",
  "organization": {"id": "org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c", "name": "Acme Engineering"},
  "user_id": "usr_7f3a9c2e1b8d4e6fa0c5b3d9e2f1a4c7",
  "project_group": {"id": "fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c", "client_id": "grp-clients", "name": "Clients"},
  "location_id": "eu-central",
  "location_label": "Germany",
  "size_id": "std-16",
  "size_label": "16 vCPU · 64 GB",
  "state": "parking",
  "state_label": "Parking: saving the server, then shutting it down",
  "transient": true,
  "step": null,
  "step_started_at": null,
  "state_changed_at": "2026-09-28T18:00:03.211870Z",
  "failure": null,
  "ipv4": "203.0.113.24",
  "ipv6": "2001:db8:4f2a::1",
  "ssh_port": 22,
  "ssh_user": "forge",
  "bootstrap_host_key_pub": null,
  "host_key_pub": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleServerHostKeyForDocumentationOnly0000",
  "price": {
    "hourly": "0.83",
    "monthly_cap": "520.30",
    "currency": "CHF",
    "source": "aitronos",
    "includes_vat": false,
    "catalog_version": "fc-3b8e1f0a9c42",
    "quoted_at": "2026-09-28T09:00:00.184066Z",
    "parked_per_gb_month": "0.0269",
    "price_verified": true
  },
  "month_to_date": "8.30",
  "notice": null,
  "idle_reminder": null,
  "reconcile_flags": null,
  "actions": ["delete", "revoke"],
  "created_at": "2026-09-28T09:00:00.184066Z",
  "ready_at": "2026-09-28T09:03:41.502318Z",
  "parked_at": null,
  "parked_expires_at": null,
  "deleted_at": null,
  "revoked_at": null,
  "revoke_reason": null,
  "last_activity_at": "2026-09-28T09:25:00Z"
}
```

409 Unsupported

```json
{
  "success": false,
  "error": {
    "code": "FORGE_COMPUTE_ACTION_UNSUPPORTED",
    "message": "This action (park) is not available for Akamai/Linode.",
    "system_message": "Action 'park' is not supported for Akamai/Linode",
    "type": "client_error",
    "status": 409,
    "details": {"action": "park", "offering": "Akamai/Linode"},
    "trace_id": "3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34",
    "timestamp": "2026-09-28T09:00:00Z"
  }
}
```

409 Conflict

```json
{
  "success": false,
  "error": {
    "code": "FORGE_COMPUTE_INVALID_STATE",
    "message": "This server cannot do that in its current state. Wait for it to finish and try again.",
    "system_message": "Action 'park' is not allowed while the host is 'booting'",
    "type": "client_error",
    "status": 409,
    "details": {"state": "booting", "action": "park"},
    "trace_id": "3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34",
    "timestamp": "2026-09-28T09:00:00Z"
  }
}
```

## Related Resources

- [Forge cloud compute overview](/docs/api-reference/forge-compute/introduction)
- [List billing organizations](/docs/api-reference/forge-compute/list-billing-organizations)
- [Choose the default billing organization](/docs/api-reference/forge-compute/choose-billing-organization)
- [List project groups](/docs/api-reference/forge-compute/list-project-groups)
- [Register or update a project group](/docs/api-reference/forge-compute/put-project-group)
- [Delete a project group](/docs/api-reference/forge-compute/delete-project-group)
- [List compute offerings](/docs/api-reference/forge-compute/list-offerings)
- [Get offering options](/docs/api-reference/forge-compute/get-offering-options)
- [Resolve a free size](/docs/api-reference/forge-compute/resolve-offering-size)
- [List connected accounts](/docs/api-reference/forge-compute/list-credentials)
- [Connect a cloud account](/docs/api-reference/forge-compute/put-credential)
- [Disconnect a cloud account](/docs/api-reference/forge-compute/delete-credential)
- [Create a server](/docs/api-reference/forge-compute/create-host)
- [List servers](/docs/api-reference/forge-compute/list-hosts)
- [List your servers in every organization](/docs/api-reference/forge-compute/list-my-hosts)
- [Get a server](/docs/api-reference/forge-compute/get-host)
- [Get a server's daily cost and uptime](/docs/api-reference/forge-compute/get-host-usage)
- [List a server's running intervals](/docs/api-reference/forge-compute/list-host-intervals)
- [List a server's event history](/docs/api-reference/forge-compute/list-host-events)
- [Report a setup step](/docs/api-reference/forge-compute/report-progress)
- [Report the server's host key](/docs/api-reference/forge-compute/report-host-key)
- [Mark a server ready](/docs/api-reference/forge-compute/report-ready)
- [Report activity](/docs/api-reference/forge-compute/report-activity)
- [Park a server](/docs/api-reference/forge-compute/park-host)
- [Resume a server](/docs/api-reference/forge-compute/resume-host)
- [Delete a server](/docs/api-reference/forge-compute/delete-host)
- [Revoke a server](/docs/api-reference/forge-compute/revoke-host)
- [Get compute settings](/docs/api-reference/forge-compute/get-settings)
- [Update compute settings](/docs/api-reference/forge-compute/update-settings)
- [Get spend limits](/docs/api-reference/forge-compute/get-limits)
- [Change the organization's limits](/docs/api-reference/forge-compute/update-organization-limits)
- [Set your own limit](/docs/api-reference/forge-compute/update-my-limit)
- [List member limits](/docs/api-reference/forge-compute/list-member-limits)
- [Set a member's limit](/docs/api-reference/forge-compute/update-member-limit)
- [Delete a leftover resource](/docs/api-reference/forge-compute/delete-orphan)