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.
This endpoint takes no 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.
X-Organization-Id string optional
The same as organization_id, as a header. When both are sent, the query parameter wins.
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:
idstring — the id used in every other call:aitronos, or a provider such ashetzner,digitalocean,vultr,scaleway,exoscale,linodeorupcloud.kindstring —managed(Aitronos servers, billed to your organization) orbyo(your own account, billed to you by the provider).labelstring — display name. The Aitronos offering is always "Aitronos servers".descriptionstring — one sentence on who runs and bills the servers.orderinteger — sort key, as configured by Aitronos.statusstring —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) orblocked.blocked_reasonstring ornull— why the offering cannot be used, as a sentence to show;nullunlessstatusisblocked. 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 lackmanage_forgeand nobody in your organization has connected the account yet.blocked_actionobject — an action that lifts the block, to show besideblocked_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 (themanage_userscapability); omitted otherwise.kindisraise_spend_limit,labelthe button text (Raise the limit) andurlthe app route where the limit is edited (/usage).capabilitiesobject —parkstring orfalse: 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.falsewhen a server can only be deleted; such a server never listsparkin itsactions.credentialobject — the connect form, present only forbyoofferings (omitted foraitronos):fieldsarray — the inputs in display order, every one required. Each hasid(the key to send it under),label,secret(true: show a password input),helpandhelp_url(the provider's own page, ornull).recommendationstring ornull— advice on which account or project to connect.egress_addressesarray 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'shelpthen 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."
}
}
]
}| Status | Code | When |
|---|---|---|
| 401 | AUTHENTICATION_REQUIRED | No credential, or a credential with no user (an organization API key). |
| 403 | ORGANIZATION_ACCESS_DENIED | organization_id or X-Organization-Id names an organization you are not an active member of. |
| 403 | INSUFFICIENT_PERMISSIONS | The user does not hold use_forge in the acting organization. |
- Bash
- Python
- Python
- JavaScript
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"]
}
}
]
}- Forge cloud compute overview
- List billing organizations
- Choose the default billing organization
- List project groups
- Register or update a project group
- Delete a project group
- List compute offerings
- Get offering options
- Resolve a free size
- List connected accounts
- Connect a cloud account
- Disconnect a cloud account
- Create a server
- List servers
- List your servers in every organization
- Get a server
- Get a server's daily cost and uptime
- List a server's running intervals
- List a server's event history
- Report a setup step
- Report the server's host key
- Mark a server ready
- Report activity
- Park a server
- Resume a server
- Delete a server
- Revoke a server
- Get compute settings
- Update compute settings
- Get spend limits
- Change the organization's limits
- Set your own limit
- List member limits
- Set a member's limit
- Delete a leftover resource