Skip to content

List compute offerings

Lists every place Forge can run a server — Aitronos servers, billed to your organization, and each cloud provider where your organization can connect its own account — with your organization's status for each, what its servers can do and, for your own accounts, the connect form. Render labels, order and help text from this response. While Forge cloud compute is not switched on for your organization, offerings is empty rather than refused, so a client can always render the page. It acts for a person: it requires a bearer token whose user holds the use_forge capability in the acting organization, and an organization API key, which carries no user, is refused.

GEThttps://api.aitronos.com/v1/forge/compute/catalog

This endpoint takes no parameters.

Query Parameters

organization_id string optional

The organization to act in. Defaults to your current organization. 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

catalog_version string — version of the offerings, locations and sizes. Send it back inside the quote of a create or resume; a quote from another version is refused with FORGE_COMPUTE_PRICE_CHANGED.

offerings array — the offerings offered to you, in ascending order (the configured catalog position; ties by id). An offering that is not offered to you right now is omitted rather than listed as blocked: it is switched off, switched off for your organization, or offered to Aitronos staff only — by default only Aitronos servers are offered; every bring-your-own provider is switched off until enabled. Getting options for, connecting, creating or resuming an omitted offering is refused with 403 FORGE_COMPUTE_OFFERING_NOT_OFFERED. Each offering:

  • id string — the id used in every other call: aitronos, or a provider such as hetzner, digitalocean, vultr, scaleway, exoscale, linode or upcloud.
  • kind string — managed (Aitronos servers, billed to your organization) or byo (your own account, billed to you by the provider).
  • label string — display name. The Aitronos offering is always "Aitronos servers".
  • description string — one sentence on who runs and bills the servers.
  • order integer — sort key, as configured by Aitronos.
  • status string — available (Aitronos servers can be used), not_connected (connect an account first), connected, credential_invalid (the provider stopped accepting the stored account; connect it again) or blocked.
  • blocked_reason string or null — why the offering cannot be used, as a sentence to show; null unless status is blocked. An offering is blocked when this environment cannot serve it; for Aitronos servers, also when the organization's spending limit (or the share of it set aside for cloud servers) cannot pay one hour of the cheapest Aitronos server, when the spending could not be checked just now, when Aitronos servers are at capacity ("Aitronos servers are at capacity right now. Try again later.") or their capacity could not be checked, or when the price of Aitronos servers could not be read ("Prices for Aitronos servers could not be read just now, so none can be started. Try again in a few minutes.") — for example "Your organization has reached its spending limit, so no Aitronos server can be started. An organization admin can raise the limit."; and for your own accounts, when you lack manage_forge and nobody in your organization has connected the account yet.
  • blocked_action object — an action that lifts the block, to show beside blocked_reason. Present only for Aitronos servers blocked by the organization's spending limit (never for a capacity block, which nothing in your organization lifts), and only when you may change that limit (the manage_users capability); omitted otherwise. kind is raise_spend_limit, label the button text (Raise the limit) and url the app route where the limit is edited (/usage).
  • capabilities object — park string or false: how a server can be parked (stopped and kept) and resumed later. snapshot: the server is removed and its disk kept as a snapshot, charged per GB-month while parked. poweroff: the server is powered off and kept as it is; the provider may keep charging for it. false when a server can only be deleted; such a server never lists park in its actions.
  • credential object — the connect form, present only for byo offerings (omitted for aitronos):
    • fields array — the inputs in display order, every one required. Each has id (the key to send it under), label, secret (true: show a password input), help and help_url (the provider's own page, or null).
    • recommendation string or null — advice on which account or project to connect.
    • egress_addresses array of strings — present only for providers whose API keys accept calls only from listed addresses: add every address to the key's access list before connecting. Empty when this environment has no fixed outgoing address; the field's help then says to allow all IPv4 addresses on the key's access list instead.
{
  "catalog_version": "fc-3b8e1f0a9c42",
  "offerings": [
    {
      "id": "aitronos",
      "kind": "managed",
      "label": "Aitronos servers",
      "description": "Billed to your organization as Forge cloud compute.",
      "order": 0,
      "status": "available",
      "blocked_reason": null,
      "capabilities": {"park": "snapshot"}
    },
    {
      "id": "hetzner",
      "kind": "byo",
      "label": "Hetzner Cloud",
      "description": "Runs in your own Hetzner project. Hetzner bills you directly.",
      "order": 10,
      "status": "not_connected",
      "blocked_reason": null,
      "capabilities": {"park": "snapshot"},
      "credential": {
        "fields": [
          {
            "id": "api_token",
            "label": "API token",
            "secret": true,
            "help": "In your Hetzner project open Security → API tokens and create a token with Read & Write permission.",
            "help_url": "https://docs.hetzner.com/cloud/api/getting-started/generating-api-token/"
          }
        ],
        "recommendation": "Use a project that holds only Forge's servers."
      }
    },
    {
      "id": "linode",
      "kind": "byo",
      "label": "Akamai/Linode",
      "description": "Runs in your own Akamai/Linode account. Akamai bills you directly.",
      "order": 60,
      "status": "connected",
      "blocked_reason": null,
      "capabilities": {"park": false},
      "credential": {
        "fields": [
          {
            "id": "api_token",
            "label": "Personal access token",
            "secret": true,
            "help": "Open your profile → API Tokens and create a token with Linodes and Firewalls set to Read/Write and Images to Read Only.",
            "help_url": "https://techdocs.akamai.com/cloud-computing/docs/manage-personal-access-tokens"
          }
        ],
        "recommendation": "Use a project that holds only Forge's servers."
      }
    }
  ]
}

Errors

StatusCodeWhen
401AUTHENTICATION_REQUIREDNo credential, or a credential with no user (an organization API key).
403ORGANIZATION_ACCESS_DENIEDorganization_id or X-Organization-Id names an organization you are not an active member of.
403INSUFFICIENT_PERMISSIONSThe user does not hold use_forge in the acting organization.
cURL
curl "https://api.aitronos.com/v1/forge/compute/catalog" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Response:

{
  "catalog_version": "fc-3b8e1f0a9c42",
  "offerings": [
    {
      "id": "aitronos",
      "kind": "managed",
      "label": "Aitronos servers",
      "description": "Billed to your organization as Forge cloud compute.",
      "order": 0,
      "status": "available",
      "blocked_reason": null,
      "capabilities": {"park": "snapshot"}
    },
    {
      "id": "vultr",
      "kind": "byo",
      "label": "Vultr",
      "description": "Runs in your own Vultr account. Vultr bills you directly.",
      "order": 30,
      "status": "blocked",
      "blocked_reason": "Ask an organization admin to connect Vultr.",
      "capabilities": {"park": "snapshot"},
      "credential": {
        "fields": [
          {
            "id": "api_key",
            "label": "API key",
            "secret": true,
            "help": "Open Account → API, enable API access and copy the key. The key only answers the addresses on its Access Control list. Add 198.51.100.21, 198.51.100.22 to that list.",
            "help_url": "https://docs.vultr.com/platform/other/api/manage-api-access-control"
          }
        ],
        "recommendation": "Use a project that holds only Forge's servers.",
        "egress_addresses": ["198.51.100.21", "198.51.100.22"]
      }
    }
  ]
}