{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/api-reference/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["api-container","api-content","endpoint","api-examples","code-group","tabs","tab"]},"redocly_category":"API Reference","searchWeight":120,"type":"markdown"},"seo":{"title":"Create a server","description":"Complete API reference and documentation for Freddy AI-powered backend system by Aitronos","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"create-a-server","__idx":0},"children":["Create a server"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Creates a cloud server for Forge in the chosen offering, location and size, at the price the person confirmed (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quote"]},", from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/get-offering-options"},"children":["Get offering options"]},"). The server is created in the background: the answer is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["202 Accepted"]}," with the server in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["creating"]},". Poll ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/get-host"},"children":["Get a server"]}," about every two seconds until it reaches ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["awaiting_client"]}," (or ends in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed_clean"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed_billing"]},"); the server moves ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["creating"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["booting"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["awaiting_client"]},", and then the client takes it through setup (see the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/introduction#creating-and-setting-up-a-server"},"children":["lifecycle"]},")."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The id is chosen by the client, which makes the call safe to retry: sending the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," again returns the server that id already names (whatever the rest of the body says) and never creates a second one. The server's login user (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ssh_user"]},", always ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["forge"]},"), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ssh_port"]}," and — once the backend has generated it — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bootstrap_host_key_pub"]},", the bootstrap host key (K0) to pin on the first connection, are on the server record. Only public keys are stored or returned; the server accepts logins only with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_public_key"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Billing."]}," The server is billed to the organization named in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]},", and only to it: every hour, a resume and a parked copy are charged there for the server's whole life. Offer the choice with ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-billing-organizations"},"children":["List billing organizations"]}," and preselect its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["default_organization_id"]},"; the backend never infers it. An Aitronos server (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["aitronos"]},") is charged to that organization per started hour at exactly the quoted ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hourly"]}," price in CHF, never more than the size's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["monthly_cap"]}," in a calendar month, from the moment the server exists until it is gone. A server in your own account is billed to that organization by the provider; Aitronos meters nothing for it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Project groups."]}," When the server is rented inside a Forge project group, send the group's Forge id as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["project_group_id"]}," (registered with ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/put-project-group"},"children":["Register or update a project group"]},"). When that group bills to an organization (its own or its nearest registered ancestor's, as ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-project-groups"},"children":["List project groups"]}," shows in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization"]},"), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]}," must be that organization: another one is refused with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422 FORGE_PROJECT_GROUP_ORGANIZATION_MISMATCH"]},", and a group whose organization you can no longer use Forge in is refused with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403 FORGE_PROJECT_GROUP_ORGANIZATION_UNAVAILABLE"]},", never billed somewhere else. The server then names the group in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["project_group"]},", and its usage is shown under the group on the organization's ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/assets/get-usage-detail-report.45870ea5b94806d0570403fa53ae031e4b48417dddf0f27bd3aa2fc29b7ba55c.49b960d1.md"},"children":["usage report"]},". A server stays billed to the organization it was rented in: changing or deleting the group later never moves it. A group that is not registered is ignored, and the server is created as if no group had been sent."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["It acts for a person: it requires a bearer token whose user is an active member of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]},", holds the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["use_forge"]}," capability there, and Forge cloud compute switched on for that organization."]},{"$$mdtype":"Tag","name":"ApiContainer","attributes":{},"children":[{"$$mdtype":"Tag","name":"ApiContent","attributes":{},"children":[{"$$mdtype":"Tag","name":"Endpoint","attributes":{"method":"POST","path":"https://api.aitronos.com/v1/forge/compute/hosts"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"headers","__idx":1},"children":["Headers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Organization-Id"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#9ca3af !important","fontWeight":"500 !important","fontStyle":"normal !important"}},"children":["optional"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Not needed: the body names the organization. If sent (or sent as the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]}," query parameter), it must name the same organization as the body, or the request is refused with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INVALID_FIELD_VALUE"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.reason"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_mismatch"]},")."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"body-parameters","__idx":2},"children":["Body Parameters"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The server's id, chosen by the client: a UUID (any case, with or without hyphens) or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fchost_"]}," followed by 32 hex characters. It is returned, and accepted in paths, as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fchost_<32 hex>"]},". Sending an id that already names a server of yours returns that server; an id already used by a different server is refused with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_HOST_ID_CONFLICT"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The organization the server is billed to: an organization marked ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["selectable"]}," in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-billing-organizations"},"children":["List billing organizations"]},". It becomes the server's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization"]},", and every later charge for the server goes there."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["offering_id"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The offering to run the server on, from the catalog, e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["aitronos"]},". A bring-your-own offering needs a connected account."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["location_id"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A location id from the offering's options, e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eu-central"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The size is given in exactly one of three ways — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["size_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["machine_type_id"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["vcpu"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["memory_gb"]}," — otherwise the request is refused with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VALIDATION_ERROR"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.reason"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["size_choice"]},")."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["size_id"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#9ca3af !important","fontWeight":"500 !important","fontStyle":"normal !important"}},"children":["optional"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A size id from the offering's options ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sizes"]},", e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["std-16"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["machine_type_id"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#9ca3af !important","fontWeight":"500 !important","fontStyle":"normal !important"}},"children":["optional"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Aitronos servers only: a machine type id from the options ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["machine_types"]}," (or a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["resolutions"]}," entry), e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ded-x86-48c-192g"]},". Priced and created exactly like a size id."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["vcpu"]}]}," integer ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#9ca3af !important","fontWeight":"500 !important","fontStyle":"normal !important"}},"children":["optional"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Aitronos servers only, with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["memory_gb"]},": the vCPUs wanted, 1 to 4096. The server is the cheapest one in the location with at least this many vCPUs and at least ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["memory_gb"]}," — the same answer as ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/resolve-offering-size"},"children":["Resolve a free size"]},", so confirm the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quote"]}," of that answer. When no server there has both, the request is refused with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_CAPACITY_UNAVAILABLE"]}," naming the largest server there."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["memory_gb"]}]}," integer ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#9ca3af !important","fontWeight":"500 !important","fontStyle":"normal !important"}},"children":["optional"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Aitronos servers only, with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["vcpu"]},": the memory wanted in GB, 1 to 65536."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A name for the server, 1 to 63 characters after surrounding spaces are removed, without control characters."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_public_key"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The OpenSSH public key the client will log in with, as exactly one line: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ssh-ed25519"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ecdsa-sha2-nistp256/384/521"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sk-ssh-ed25519@openssh.com"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ssh-rsa"]}," of 3072 to 16384 bits. No options prefix and no certificates; the comment is kept, reduced to letters, digits and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["@._-"]},", at most 64 characters. A private key is refused."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quote"]}]}," object ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The price the person confirmed, exactly as the options quoted it. It must match the live price, or the request is refused with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_PRICE_CHANGED"]}," and the live quote in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.quote"]},": show it and ask again."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hourly"]}]}," string, required — the hourly price as quoted, e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"0.83\""]},". Compared as a decimal, so ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"0.830\""]}," equals ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"0.83\""]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["currency"]}]}," string, required — the currency of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hourly"]},", e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHF"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["catalog_version"]}]}," string, required — the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["catalog_version"]}," the quote came with."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["project_group_id"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#9ca3af !important","fontWeight":"500 !important","fontStyle":"normal !important"}},"children":["optional"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Forge's own id for the project group the server is rented in (its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}," in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-project-groups"},"children":["List project groups"]},"), at most 128 characters; an empty or blank value is the same as leaving it out. When the group bills to an organization (its own or an ancestor's), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]}," must be that organization, else ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_PROJECT_GROUP_ORGANIZATION_MISMATCH"]}," (422); when you can no longer use Forge there, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_PROJECT_GROUP_ORGANIZATION_UNAVAILABLE"]}," (403). A group billed to no organization is accepted with any ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]},". The server's usage is shown under the group on the organization's usage report. A group that is not registered (or was deleted) is ignored: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["project_group"]}," is then ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Unknown fields are refused."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"returns","__idx":3},"children":["Returns"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["202 Accepted"]}," with the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/get-host#returns"},"children":["server object"]}," in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["creating"]},". A repeat of the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," also answers ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["202"]}," with the server in whatever state it has reached."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"id\": \"fchost_5d0c2b9e7a414f3c9e8b1a6d2f4c7e90\",\n  \"offering_id\": \"aitronos\",\n  \"kind\": \"managed\",\n  \"name\": \"build-box\",\n  \"organization\": {\"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\", \"name\": \"Acme Engineering\"},\n  \"user_id\": \"usr_7f3a9c2e1b8d4e6fa0c5b3d9e2f1a4c7\",\n  \"project_group\": {\"id\": \"fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c\", \"client_id\": \"grp-clients\", \"name\": \"Clients\"},\n  \"location_id\": \"eu-central\",\n  \"location_label\": \"Germany\",\n  \"size_id\": \"std-16\",\n  \"size_label\": \"16 vCPU · 64 GB\",\n  \"state\": \"creating\",\n  \"state_label\": \"Creating the server\",\n  \"transient\": true,\n  \"step\": null,\n  \"step_started_at\": null,\n  \"state_changed_at\": \"2026-09-28T09:00:00.184066Z\",\n  \"failure\": null,\n  \"ipv4\": null,\n  \"ipv6\": null,\n  \"ssh_port\": 22,\n  \"ssh_user\": \"forge\",\n  \"bootstrap_host_key_pub\": null,\n  \"host_key_pub\": null,\n  \"price\": {\n    \"hourly\": \"0.83\",\n    \"monthly_cap\": \"520.30\",\n    \"currency\": \"CHF\",\n    \"source\": \"aitronos\",\n    \"includes_vat\": false,\n    \"catalog_version\": \"fc-3b8e1f0a9c42\",\n    \"quoted_at\": \"2026-09-28T09:00:00.184066Z\",\n    \"parked_per_gb_month\": \"0.0269\",\n    \"price_verified\": true\n  },\n  \"month_to_date\": \"0.00\",\n  \"notice\": null,\n  \"idle_reminder\": null,\n  \"reconcile_flags\": null,\n  \"actions\": [\"delete\", \"revoke\"],\n  \"created_at\": \"2026-09-28T09:00:00.184066Z\",\n  \"ready_at\": null,\n  \"parked_at\": null,\n  \"parked_expires_at\": null,\n  \"deleted_at\": null,\n  \"revoked_at\": null,\n  \"revoke_reason\": null,\n  \"last_activity_at\": null\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A server that cannot be created after the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["202"]}," (for example the provider has no capacity for the size in that location) ends in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed_clean"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failure.code"]}," set to the same code this endpoint would have returned, e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_CAPACITY_UNAVAILABLE"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failure.details.alternatives"]},". Nothing is running and nothing is charged; delete it and create again."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"errors","__idx":4},"children":["Errors"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Code"},"children":["Code"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"When"},"children":["When"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["401"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AUTHENTICATION_REQUIRED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No credential, or a credential with no user (an organization API key)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["402"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_SPEND_LIMIT_REACHED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Aitronos servers only: a spending limit of the organization is reached, or cannot absorb one more hour at the quoted price. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.reason"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["spend_limit_reached"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["headroom_below_one_hour"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["compute_share_below_one_hour"]}," (ask an admin to raise the limit); ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["org_compute_limit_reached"]}," when one more hour would pass the organization's ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/update-organization-limits"},"children":["monthly limit for Aitronos servers"]}," (\"Your organization's monthly limit for Aitronos servers does not allow another server hour. Someone who manages billing can raise it on the Machines page.\"); or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["member_limit_reached"]}," when it would pass your own ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/get-limits"},"children":["per-person limit"]}," (\"Your monthly limit for Aitronos servers (CHF 12.50) does not allow another server hour.\" followed by \"You can raise or clear your own limit on the Machines page.\" when your ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/update-my-limit"},"children":["own limit"]}," applies, else \"Someone who manages billing can raise it on the Machines page.\"). Show ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]}," as is."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["403"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ORGANIZATION_ACCESS_DENIED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]}," names an organization you are not an active member of."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["403"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INSUFFICIENT_PERMISSIONS"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The user does not hold ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["use_forge"]}," in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["403"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_DISABLED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Forge cloud compute is not switched on for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["403"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_OFFERING_BLOCKED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The offering cannot be used in this environment."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["403"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_OFFERING_NOT_OFFERED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The offering is not offered to you right now: switched off, switched off for your organization, or offered to Aitronos staff only. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]}," names the offering (for example \"DigitalOcean is not offered right now.\") and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.offering_id"]}," is its id. Nothing was created."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["403"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_PROJECT_GROUP_ORGANIZATION_UNAVAILABLE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["project_group_id"]}," names a group that bills to an organization where you can no longer use Forge (you left it, lost ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["use_forge"]}," there, or the credential is not granted it). ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]}," names it (\"This project group is billed to Client Workspace, where you can no longer use Forge. Choose another organization for the group.\"); ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details"]}," carries ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]},". Nothing was created and nothing is billed elsewhere."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["404"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_OFFERING_NOT_FOUND"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No offering has this id."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["409"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_PRICE_CHANGED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The quote no longer matches the live price (hourly, currency or catalog version). ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.quote"]}," is the live quote to confirm. A create by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["vcpu"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["memory_gb"]}," also gets ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.machine_type_id"]},", the machine type that price is for."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["409"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_CAPACITY_UNAVAILABLE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The size cannot be ordered in that location now. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.alternatives"]}," lists up to three placements that can, each ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{location_id, size_id, hourly, currency}"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["409"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_CAPACITY_UNAVAILABLE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A create by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["vcpu"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["memory_gb"]}," that no server in the location meets: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.reason"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no_size_large_enough"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]}," names the largest server there (for example \"The largest server in Germany has 48 vCPU and 192 GB.\"), and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.alternatives"]}," lists the other locations where the choice can be met."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["409"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_HOST_ID_CONFLICT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," already names a different server. Generate a new id."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_CREDENTIAL_MISSING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A bring-your-own offering whose account is not connected."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_CREDENTIAL_REJECTED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The provider no longer accepts the connected account."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_INVALID_PUBLIC_KEY"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_public_key"]}," is not one accepted OpenSSH public key. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.reason"]}," says why."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_PROJECT_GROUP_ORGANIZATION_MISMATCH"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["project_group_id"]}," names a group that bills to another organization than ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]}," names it (\"This project is billed to Acme Engineering through its project group. Rent the server in Acme Engineering, or change the group's organization first.\"); ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{\"field\": \"organization_id\", \"reason\": \"project_group_organization_mismatch\", \"client_id\", \"organization_id\"}"]},", where ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]}," is the organization the group bills to. Nothing was created."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INVALID_FIELD_VALUE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]}," query parameter or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Organization-Id"]}," header names a different organization than the body: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{\"field\": \"organization_id\", \"reason\": \"organization_mismatch\"}"]},". Nothing was created."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INVALID_ID_FORMAT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," is neither a UUID nor ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fchost_<32 hex>"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VALIDATION_ERROR"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A body of the wrong shape (including a missing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]},"), an unknown field, a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}," that is empty, longer than 63 characters or holds control characters, or a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["project_group_id"]}," longer than 128 characters. Also: the size given in none or more than one way (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.reason"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["size_choice"]},"), or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["machine_type_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["vcpu"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["memory_gb"]}," for a bring-your-own offering (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.reason"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["free_sizing_unsupported"]},")."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["502"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_PROVIDER_UNREACHABLE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The provider could not be reached to confirm the price."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["503"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_PRICE_UNAVAILABLE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No verified price, or no spending reading, could be taken right now, so nothing was created. Retry after ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.retry_after"]}," seconds."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["503"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FORGE_COMPUTE_PLATFORM_CAPACITY_REACHED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Aitronos servers only: Aitronos servers are at capacity for now, so nothing was created. Nothing your organization changes lifts it; try again later (after ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details.retry_after"]}," seconds)."]}]}]}]}]}]},{"$$mdtype":"Tag","name":"ApiExamples","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"dropdown"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","data-title":"cURL","header":{"title":"cURL","controls":{"copy":{}}},"source":"curl -X POST \"https://api.aitronos.com/v1/forge/compute/hosts\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"id\": \"5d0c2b9e-7a41-4f3c-9e8b-1a6d2f4c7e90\",\n    \"organization_id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\",\n    \"offering_id\": \"aitronos\",\n    \"location_id\": \"eu-central\",\n    \"size_id\": \"std-16\",\n    \"name\": \"build-box\",\n    \"client_public_key\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleClientKeyForDocumentationOnly000000 dev@laptop\",\n    \"quote\": {\"hourly\": \"0.83\", \"currency\": \"CHF\", \"catalog_version\": \"fc-3b8e1f0a9c42\"},\n    \"project_group_id\": \"grp-clients\"\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","data-title":"Python SDK","header":{"title":"Python SDK","controls":{"copy":{}}},"source":"# pip install aitronos-sdk\n#\n# The Python SDK does not expose a typed `forge_compute` namespace yet, so call\n# the endpoint directly with the same bearer token you would pass to `Aitronos(...)`.\nimport uuid\nimport httpx\n\nACCESS_TOKEN = \"your-access-token\"\nheaders = {\"Authorization\": f\"Bearer {ACCESS_TOKEN}\"}\n\nbody = {\n    \"id\": str(uuid.uuid4()),  # keep it: resending it never creates a second server\n    \"organization_id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\",  # from the billing organizations\n    \"offering_id\": \"aitronos\",\n    \"location_id\": \"eu-central\",\n    \"size_id\": \"std-16\",\n    \"name\": \"build-box\",\n    \"client_public_key\": open(\"/Users/dev/.ssh/id_ed25519.pub\").read().strip(),\n    \"quote\": {\"hourly\": \"0.83\", \"currency\": \"CHF\", \"catalog_version\": \"fc-3b8e1f0a9c42\"},\n    \"project_group_id\": \"grp-clients\",  # optional: Forge's id for the project group\n}\nresponse = httpx.post(\n    \"https://api.aitronos.com/v1/forge/compute/hosts\", headers=headers, json=body\n)\nerror = response.json().get(\"error\") if response.is_error else None\nif error and error[\"code\"] == \"FORGE_COMPUTE_PRICE_CHANGED\":\n    print(\"Ask again at\", error[\"details\"][\"quote\"])\nelif error and error[\"code\"] == \"FORGE_PROJECT_GROUP_ORGANIZATION_MISMATCH\":\n    print(\"Rent it in\", error[\"details\"][\"organization_id\"], \"-\", error[\"message\"])\nelif error:\n    print(error[\"message\"])\nelse:\n    host = response.json()\n    print(host[\"id\"], host[\"state\"])\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","data-title":"Python","header":{"title":"Python","controls":{"copy":{}}},"source":"import os\nimport time\nimport uuid\nimport requests\n\ntoken = os.environ[\"AITRONOS_TOKEN\"]\nheaders = {\"Authorization\": f\"Bearer {token}\"}\nbase = \"https://api.aitronos.com/v1/forge/compute\"\n\nhost = requests.post(\n    f\"{base}/hosts\",\n    headers=headers,\n    json={\n        \"id\": str(uuid.uuid4()),\n        \"organization_id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\",\n        \"offering_id\": \"aitronos\",\n        \"location_id\": \"eu-central\",\n        \"size_id\": \"std-16\",\n        \"name\": \"build-box\",\n        \"client_public_key\": os.environ[\"FORGE_CLIENT_PUBLIC_KEY\"],\n        \"quote\": {\"hourly\": \"0.83\", \"currency\": \"CHF\", \"catalog_version\": \"fc-3b8e1f0a9c42\"},\n        \"project_group_id\": \"grp-clients\",\n    },\n).json()\n\nwhile host[\"state\"] in (\"creating\", \"booting\"):\n    time.sleep(2)\n    host = requests.get(f\"{base}/hosts/{host['id']}\", headers=headers).json()\nprint(host[\"state\"], host[\"ipv4\"], host[\"bootstrap_host_key_pub\"])\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","data-title":"JavaScript","header":{"title":"JavaScript","controls":{"copy":{}}},"source":"const response = await fetch(\"https://api.aitronos.com/v1/forge/compute/hosts\", {\n  method: \"POST\",\n  headers: {\n    Authorization: `Bearer ${process.env.AITRONOS_TOKEN}`,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({\n    id: crypto.randomUUID(),\n    organization_id: \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\",\n    offering_id: \"aitronos\",\n    location_id: \"eu-central\",\n    size_id: \"std-16\",\n    name: \"build-box\",\n    client_public_key: process.env.FORGE_CLIENT_PUBLIC_KEY,\n    quote: { hourly: \"0.83\", currency: \"CHF\", catalog_version: \"fc-3b8e1f0a9c42\" },\n    project_group_id: \"grp-clients\",\n  }),\n});\nconst host = await response.json();\nconsole.log(response.status, host.id, host.state); // 202 fchost_... creating\n","lang":"javascript"},"children":[]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Response:"]}]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"div","attributes":{"label":"202 Accepted","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"id\": \"fchost_5d0c2b9e7a414f3c9e8b1a6d2f4c7e90\",\n  \"offering_id\": \"aitronos\",\n  \"kind\": \"managed\",\n  \"name\": \"build-box\",\n  \"organization\": {\"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\", \"name\": \"Acme Engineering\"},\n  \"user_id\": \"usr_7f3a9c2e1b8d4e6fa0c5b3d9e2f1a4c7\",\n  \"project_group\": {\"id\": \"fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c\", \"client_id\": \"grp-clients\", \"name\": \"Clients\"},\n  \"location_id\": \"eu-central\",\n  \"location_label\": \"Germany\",\n  \"size_id\": \"std-16\",\n  \"size_label\": \"16 vCPU · 64 GB\",\n  \"state\": \"creating\",\n  \"state_label\": \"Creating the server\",\n  \"transient\": true,\n  \"step\": null,\n  \"step_started_at\": null,\n  \"state_changed_at\": \"2026-09-28T09:00:00.184066Z\",\n  \"failure\": null,\n  \"ipv4\": null,\n  \"ipv6\": null,\n  \"ssh_port\": 22,\n  \"ssh_user\": \"forge\",\n  \"bootstrap_host_key_pub\": null,\n  \"host_key_pub\": null,\n  \"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},\n  \"month_to_date\": \"0.00\",\n  \"notice\": null,\n  \"idle_reminder\": null,\n  \"reconcile_flags\": null,\n  \"actions\": [\"delete\", \"revoke\"],\n  \"created_at\": \"2026-09-28T09:00:00.184066Z\",\n  \"ready_at\": null,\n  \"parked_at\": null,\n  \"parked_expires_at\": null,\n  \"deleted_at\": null,\n  \"revoked_at\": null,\n  \"revoke_reason\": null,\n  \"last_activity_at\": null\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"div","attributes":{"label":"409 Price changed","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"FORGE_COMPUTE_PRICE_CHANGED\",\n    \"message\": \"The price has changed since you confirmed it. Review the new price and confirm again.\",\n    \"system_message\": \"The confirmed Forge compute quote no longer matches the live price\",\n    \"type\": \"client_error\",\n    \"status\": 409,\n    \"details\": {\"quote\": {\"hourly\": \"0.83\", \"currency\": \"CHF\", \"catalog_version\": \"fc-3b8e1f0a9c42\"}},\n    \"trace_id\": \"3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34\",\n    \"timestamp\": \"2026-09-28T09:00:00Z\"\n  }\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"div","attributes":{"label":"409 Capacity","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"FORGE_COMPUTE_CAPACITY_UNAVAILABLE\",\n    \"message\": \"This server size is not available in that location right now. Choose another size or location.\",\n    \"system_message\": \"No capacity for the requested size in the requested location\",\n    \"type\": \"client_error\",\n    \"status\": 409,\n    \"details\": {\n      \"alternatives\": [\n        {\"location_id\": \"eu-north\", \"size_id\": \"std-16\", \"hourly\": \"0.83\", \"currency\": \"CHF\"},\n        {\"location_id\": \"eu-central\", \"size_id\": \"std-8\", \"hourly\": \"0.42\", \"currency\": \"CHF\"},\n        {\"location_id\": \"eu-central\", \"size_id\": \"std-32\", \"hourly\": \"1.61\", \"currency\": \"CHF\"}\n      ]\n    },\n    \"trace_id\": \"3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34\",\n    \"timestamp\": \"2026-09-28T09:00:00Z\"\n  }\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"div","attributes":{"label":"402 Payment Required","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"FORGE_COMPUTE_SPEND_LIMIT_REACHED\",\n    \"message\": \"Your organization's spending limit does not allow another cloud server hour. Ask an admin to raise the limit.\",\n    \"system_message\": \"Forge compute spend limit reached: headroom_below_one_hour\",\n    \"type\": \"client_error\",\n    \"status\": 402,\n    \"details\": {\"reason\": \"headroom_below_one_hour\"},\n    \"trace_id\": \"3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34\",\n    \"timestamp\": \"2026-09-28T09:00:00Z\"\n  }\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"div","attributes":{"label":"402 Your limit","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"FORGE_COMPUTE_SPEND_LIMIT_REACHED\",\n    \"message\": \"Your monthly limit for Aitronos servers (CHF 12.50) does not allow another server hour. Someone who manages billing can raise it on the Machines page.\",\n    \"system_message\": \"Forge compute spend limit reached: member_limit_reached\",\n    \"type\": \"client_error\",\n    \"status\": 402,\n    \"details\": {\"reason\": \"member_limit_reached\"},\n    \"trace_id\": \"3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34\",\n    \"timestamp\": \"2026-10-01T09:00:00Z\"\n  }\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"div","attributes":{"label":"422 Unprocessable Entity","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"FORGE_COMPUTE_INVALID_PUBLIC_KEY\",\n    \"message\": \"The SSH public key was not accepted. Use a single ed25519, ECDSA or RSA key of at least 3072 bits.\",\n    \"system_message\": \"Invalid client public key: The RSA public key has 2048 bits; at least 3072 are required.\",\n    \"type\": \"validation_error\",\n    \"status\": 422,\n    \"details\": {\"field\": \"client_public_key\", \"reason\": \"The RSA public key has 2048 bits; at least 3072 are required.\"},\n    \"trace_id\": \"3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34\",\n    \"timestamp\": \"2026-09-28T09:00:00Z\"\n  }\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"div","attributes":{"label":"403 Forbidden","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"FORGE_COMPUTE_DISABLED\",\n    \"message\": \"Cloud servers are not enabled for this organization.\",\n    \"system_message\": \"Forge cloud compute is disabled for this organization\",\n    \"type\": \"authorization_error\",\n    \"status\": 403,\n    \"details\": {\"feature\": \"forge_compute_enabled\"},\n    \"trace_id\": \"3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34\",\n    \"timestamp\": \"2026-09-28T09:00:00Z\"\n  }\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"div","attributes":{"label":"422 Group organization","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"FORGE_PROJECT_GROUP_ORGANIZATION_MISMATCH\",\n    \"message\": \"This project is billed to Acme Engineering through its project group. Rent the server in Acme Engineering, or change the group's organization first.\",\n    \"system_message\": \"Forge compute create names an organization its project group does not bill\",\n    \"type\": \"validation_error\",\n    \"status\": 422,\n    \"details\": {\n      \"field\": \"organization_id\",\n      \"reason\": \"project_group_organization_mismatch\",\n      \"client_id\": \"grp-clients\",\n      \"organization_id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\"\n    },\n    \"trace_id\": \"3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34\",\n    \"timestamp\": \"2026-10-09T09:00:00Z\"\n  }\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"div","attributes":{"label":"403 Group unavailable","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"FORGE_PROJECT_GROUP_ORGANIZATION_UNAVAILABLE\",\n    \"message\": \"This project group is billed to Client Workspace, where you can no longer use Forge. Choose another organization for the group.\",\n    \"system_message\": \"Forge project group bills to an organization the caller cannot use: 'org_1a2b3c4d5e6f4a7b8c9d0e1f2a3b4c5d'\",\n    \"type\": \"authorization_error\",\n    \"status\": 403,\n    \"details\": {\n      \"client_id\": \"grp-old-client\",\n      \"organization_id\": \"org_1a2b3c4d5e6f4a7b8c9d0e1f2a3b4c5d\"\n    },\n    \"trace_id\": \"3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34\",\n    \"timestamp\": \"2026-10-09T09:00:00Z\"\n  }\n}\n","lang":"json"},"children":[]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-resources","__idx":5},"children":["Related Resources"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/introduction"},"children":["Forge cloud compute overview"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-billing-organizations"},"children":["List billing organizations"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/choose-billing-organization"},"children":["Choose the default billing organization"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-project-groups"},"children":["List project groups"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/put-project-group"},"children":["Register or update a project group"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/delete-project-group"},"children":["Delete a project group"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-offerings"},"children":["List compute offerings"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/get-offering-options"},"children":["Get offering options"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/resolve-offering-size"},"children":["Resolve a free size"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-credentials"},"children":["List connected accounts"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/put-credential"},"children":["Connect a cloud account"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/delete-credential"},"children":["Disconnect a cloud account"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/create-host"},"children":["Create a server"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-hosts"},"children":["List servers"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-my-hosts"},"children":["List your servers in every organization"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/get-host"},"children":["Get a server"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/get-host-usage"},"children":["Get a server's daily cost and uptime"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-host-intervals"},"children":["List a server's running intervals"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-host-events"},"children":["List a server's event history"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/report-progress"},"children":["Report a setup step"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/report-host-key"},"children":["Report the server's host key"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/report-ready"},"children":["Mark a server ready"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/report-activity"},"children":["Report activity"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/park-host"},"children":["Park a server"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/resume-host"},"children":["Resume a server"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/delete-host"},"children":["Delete a server"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/revoke-host"},"children":["Revoke a server"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/get-settings"},"children":["Get compute settings"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/update-settings"},"children":["Update compute settings"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/get-limits"},"children":["Get spend limits"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/update-organization-limits"},"children":["Change the organization's limits"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/update-my-limit"},"children":["Set your own limit"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-member-limits"},"children":["List member limits"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/update-member-limit"},"children":["Set a member's limit"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/delete-orphan"},"children":["Delete a leftover resource"]}]}]}]},"headings":[{"value":"Create a server","id":"create-a-server","depth":1},{"value":"Headers","id":"headers","depth":4},{"value":"Body Parameters","id":"body-parameters","depth":4},{"value":"Returns","id":"returns","depth":2},{"value":"Errors","id":"errors","depth":2},{"value":"Related Resources","id":"related-resources","depth":2}],"frontmatter":{"title":"Create a server","keywords":["forge","cloud compute","servers","create","quote","execution hosts"],"seo":{"title":"Create a server"}},"lastModified":"2026-10-26T18:32:31.575Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/api-reference/forge-compute/create-host","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}