Skip to content

Get a server

Returns one Forge cloud server: its state, network addresses, SSH host keys, price, this month's cost (Aitronos servers) and what can be done with it now. Poll it about every two seconds while the server is in a backend-driven state (creating, booting, parking, resuming, deleting, revoking); the setup itself is described in the lifecycle.

A server is visible to the person who created it and to members with manage_forge; anyone else is told it does not exist. Requires a bearer token (or API key) whose principal holds the use_forge capability in the acting organization. It works while Forge cloud compute is switched off, so a server can always be found and stopped.

GEThttps://api.aitronos.com/v1/forge/compute/hosts/{host_id}

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). 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.


Returns

The server object. Every host endpoint returns it.

Identity

  • id string — fchost_ followed by 32 hex characters.
  • offering_id string — the offering it runs on, e.g. aitronos.
  • kind string — managed (Aitronos servers, billed to your organization) or byo (your organization's own provider account, billed by the provider).
  • name string — the name given at creation.
  • organization object — the organization the server is billed to and acted on in: id string, and name string or null (null when it cannot be read right now). Send organization.id as organization_id or X-Organization-Id with every request about this server.
  • user_id string or null — the user who created it.
  • project_group object or null — the Forge project group the server was rented in, fixed when it was created: id string (fpgrp_ id), client_id string or null (Forge's own id for the group) and name string or null (both null when they cannot be read right now; the id never is). A group deleted since is still named. null when the server was rented outside any group. The group never moves the server's billing: the server stays billed to organization, the organization it was rented in, even when the group's organization changes later; the group only places the server's usage under it on the organization's usage report.
  • location_id, location_label string — where it runs. For Aitronos servers the label is a country, e.g. Germany; for your own account both are the provider's location id.
  • size_id, size_label string — its size, e.g. 16 vCPU · 64 GB; for your own account both are the provider's size id.

State

  • state string — the lifecycle state; see the lifecycle.
  • state_label string — the state as a sentence to show the person.
  • transient boolean — true while the server is between states. Backend-driven states (creating, booting, parking, resuming, deleting, revoking) end on their own; client-driven ones (awaiting_client to pairing) end when the client reports its next step.
  • step string or null — the setup step reached (securing, installing, pairing or ready); null outside setup.
  • step_started_at, state_changed_at string or null — when the step started and when the server entered its current state (UTC).
  • failure object or null — why the last lifecycle step failed: code (a FORGE_COMPUTE_* error code, e.g. FORGE_COMPUTE_CAPACITY_UNAVAILABLE or FORGE_COMPUTE_PROVIDER_LIMIT), message (a sentence safe to show) and details (e.g. alternatives). A failed create ends in failed_clean; a failed resume goes back to parked; a failed park goes back to ready; a step that may have left a running server ends in failed_billing.
  • actions array of strings — what the caller may request now, in display order: park, resume, delete, revoke. Already filtered by what the offering supports: park is never listed for an offering whose capabilities.park is false in List compute offerings.

Connection

  • ipv4, ipv6 string or null — the server's public addresses while it exists. A resumed server usually has new ones.
  • ssh_port integer — the SSH port, 22.
  • ssh_user string — the user to log in as, always forge.
  • bootstrap_host_key_pub string or null — the bootstrap host key (K0) to trust on the first connection. null in the create response, set once the backend has generated it (by awaiting_client at the latest), and null again once the host key was reported.
  • host_key_pub string or null — the server's own host key (K1), once reported. From then on it is the only key to trust.

Money

  • price object — the price the server was created (or last resumed) at; it is billed at exactly this price. hourly, monthly_cap and parked_per_gb_month are decimal strings in currency; source is aitronos (billed to your organization) or the bring-your-own offering id (billed by that provider); includes_vat is false; catalog_version and quoted_at say where and when it was quoted; price_verified is true when the price was confirmed at the source.
  • month_to_date string or null — Aitronos servers: what this server has cost your organization this calendar month, in CHF. null for bring-your-own servers, and when the reading is unavailable right now (never "0.00" in its place).
  • notice object or null — Aitronos servers near or at a spending limit; null when there is none. code string: spend_cap_90, spend_cap_100 or spend_cap_parked for the organization's spending limit, or member_limit_90, member_limit_100 or member_limit_parked for the per-person limit of the server's owner (at 90%; at 100% while the server keeps running or until it can be parked; parked at 100%). The organization's notice wins when both apply. Show message for any other code. message string (a sentence to show, for example "You have used 92% of your monthly limit of CHF 12.50 for Aitronos servers. At 100%, your running Aitronos servers are parked: their work is saved and compute charges stop."), percent integer or null (how much of the limit is used, at most 100; null when not known) and set_at string or null (when the notice was set, UTC).
  • idle_reminder object or null — set while the server is ready and no activity was reported for the organization's idle_reminder_hours: since (when it was last in use) and message.
  • reconcile_flags object or null — bring-your-own servers only: resources of this server that still exist in your provider account although they should not (for example after a delete). leftover_resources lists each with resource_type (server, snapshot, ssh_key or firewall), provider_resource_id, name (or null), first_seen_at and last_seen_at (UTC); message (a sentence to show, or null) and checked_at (UTC, or null) go with it. null when nothing is left; always null for Aitronos servers.

Times and reasons

  • created_at, ready_at (the last time it became ready), parked_at, deleted_at, revoked_at, last_activity_at string or null (UTC).
  • parked_expires_at string or null — parked Aitronos servers only: when the saved server is deleted unless it is resumed first (UTC). An Aitronos server parked for 30 days is deleted; its owner is notified 3 days before, and a server is never deleted with less than 3 days' notice. null for bring-your-own servers (they never expire) and for any server that is not parked.
  • revoke_reason string or null — the reason given when it was revoked.
  • provider_server_id string — bring-your-own servers only, while a server exists: its id in your own provider account. The key is left out entirely for Aitronos servers and when no server exists.

Every timestamp in the object, the ones inside price, notice, idle_reminder and reconcile_flags included, is ISO 8601 in UTC with a Z suffix, e.g. 2026-09-28T09:03:41.502318Z.

{
  "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": "ready",
  "state_label": "Ready",
  "transient": false,
  "step": "ready",
  "step_started_at": "2026-09-28T09:03:41.502318Z",
  "state_changed_at": "2026-09-28T09:03:41.502318Z",
  "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": "0.83",
  "notice": null,
  "idle_reminder": null,
  "reconcile_flags": null,
  "actions": ["park", "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": null
}

Errors

StatusCodeWhen
401AUTHENTICATION_REQUIREDNo valid credential.
403ORGANIZATION_ACCESS_DENIEDorganization_id or X-Organization-Id names an organization you are not an active member of.
403INSUFFICIENT_PERMISSIONSThe caller does not hold use_forge in the acting organization.
404FORGE_COMPUTE_HOST_NOT_FOUNDNo server with this id in the acting organization, or it was created by someone else and the caller does not hold manage_forge.
422INVALID_ID_FORMAThost_id is neither a UUID nor fchost_<32 hex>.
cURL
curl "https://api.aitronos.com/v1/forge/compute/hosts/fchost_5d0c2b9e7a414f3c9e8b1a6d2f4c7e90" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Response:

{
  "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": "ready",
  "state_label": "Ready",
  "transient": false,
  "step": "ready",
  "step_started_at": "2026-09-28T09:03:41.502318Z",
  "state_changed_at": "2026-09-28T09:03:41.502318Z",
  "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": "0.83",
  "notice": null,
  "idle_reminder": null,
  "reconcile_flags": null,
  "actions": ["park", "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": null
}