{"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":"List project groups","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":"list-project-groups","__idx":0},"children":["List project groups"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Lists every Forge project group you registered, each with the organization its Forge spend is billed to, and the organizations a group may be billed to. A project group is a folder of projects in the Forge sidebar. Forge keeps its groups on the person's machine and registers each one with ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/put-project-group"},"children":["Register or update a project group"]},", keyed by its own id (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]},"), so the group can carry an organization that pays for the Forge spend made inside its projects: ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/create-host"},"children":["rented servers"]}," and the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/assets/assess-git-impact.a7bae1761a3dd82a227de8c76df41608e7e238562f3d2f420b7b3eccb4ee1234.23c4b6e8.md"},"children":["git impact assessment"]},". That spend 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"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["by_forge_project_group"]},"). Every label and sentence in the answer is written by the backend; show them as they are."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Which organization a group bills to."]}," It is resolved on every read, never stored, so changing one group's organization changes every group that follows it at once."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A group with an organization of its own (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["own_organization"]},") bills there."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A group without one follows its parent: it bills to its nearest registered ancestor's organization. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["inherited"]}," is then ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["inherited_from"]}," names that ancestor."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["When no group on the chain has an organization, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," and the group is \"Not billed to an organization\": Forge spend inside it is billed where it would have been without a group, and is still shown under the group."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The chain is followed through registered groups only: a parent that is not registered (or was deleted) ends it. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Register every group, also those without an organization of their own"]},", so the groups inside them can inherit through them."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["When the organization can no longer be billed."]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reason"]}," is set when Forge spend can no longer be billed to the group's organization: you left it, lost ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["use_forge"]}," there, or the credential is not granted it. While it is set, billable work inside the group (renting a server, the git impact assessment) is refused with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403 FORGE_PROJECT_GROUP_ORGANIZATION_UNAVAILABLE"]},", never billed somewhere else. Choose another organization for the group, or for the ancestor it inherits from."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["The Bill to choice."]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organizations"]}," lists every organization you are an active member of. One is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["selectable"]}," when you hold the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["use_forge"]}," capability there. This is deliberately looser than the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/api-reference/forge-compute/list-billing-organizations"},"children":["server billing choice"]},": a group also carries spend that is not a server (Forge's AI features). Renting a server inside the group still needs cloud servers available in that organization; that is checked, and explained, when you rent."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Groups are personal: nobody else can read, rename, delete or bill yours. It names no organization (it is about you, across all of yours) and requires a credential that acts for a person (a bearer token, or a key belonging to a person). A credential confined to some organizations is shown those alone."]},{"$$mdtype":"Tag","name":"ApiContainer","attributes":{},"children":[{"$$mdtype":"Tag","name":"ApiContent","attributes":{},"children":[{"$$mdtype":"Tag","name":"Endpoint","attributes":{"method":"GET","path":"https://api.aitronos.com/v1/forge/project-groups"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"returns","__idx":1},"children":["Returns"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["title"]}]}," string — the label of the group's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Bill to"]}," choice: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Bill to"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["help"]}]}," string — the sentence explaining it: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Forge spend inside this group's projects is billed to this organization: rented servers and Forge's AI features. Groups inside it follow it unless they choose their own."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["unassigned_label"]}]}," string — the sentence for a group billed to no organization: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Not billed to an organization"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organizations"]}]}," array — every organization you are an active member of, for the group's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Bill to"]}," choice, in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["order"]},". Each entry:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}]}," string — the organization's id. Send it as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization_id"]}," when registering a group."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}]}," string — the organization's name."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["logo_url"]}]}," string or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — the organization's logo, as a public URL."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["selectable"]}]}," boolean — whether a group may be billed to it: you hold ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["use_forge"]}," there."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reason"]}]}," string or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — why it cannot be chosen, as a sentence to show (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["You don't have permission to use Forge in this organization."]},"); ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["selectable"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["order"]}]}," integer — display position from 0: selectable organizations first, then by name."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["groups"]}]}," array — every registered group, oldest first. Deleted groups are left out. Each group:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}]}," string — the group's id (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fpgrp_"]}," followed by 32 hex characters)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}]}," string — Forge's own id for the group, as registered."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}]}," string — the group's name."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parent_id"]}]}," string or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — the parent group's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]},"; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," at the top, and while the parent is not registered."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parent_client_id"]}]}," string or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — the parent group's Forge id, as last sent (also when that parent is not registered)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization"]}]}," object or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — the organization Forge spend inside the group is billed to now: its own, else its nearest registered ancestor's. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}]}," string, and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}]}," string or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," when it cannot be read). ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," when no group on the chain has one."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["own_organization"]}]}," object or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — the organization chosen for this group itself (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{id, name}"]},"); ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," when it follows its parent."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["inherited"]}]}," boolean — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization"]}," comes from an ancestor."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["inherited_from"]}]}," object or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — that ancestor when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["inherited"]},": ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}]},", all strings."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["billing_label"]}]}," string — the sentence to show, e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Billed to Aitronos AG"]}," (its own organization), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Billed to Aitronos AG, from Clients"]}," (inherited from the group named Clients) or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Not billed to an organization"]},". When the organization's name cannot be read it still says the group is billed: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Billed to an organization whose name cannot be shown"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reason"]}]}," string or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — why Forge spend can no longer be billed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["organization"]},", as a sentence to show: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["You don't have permission to use Forge in this organization."]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["You are not a member of this organization."]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["This key cannot be used in this organization."]},"; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," when it can, and when the group bills to no organization."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["month_to_date_label"]}]}," string or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — what you spent inside the group this calendar month (UTC), across every organization you are or were a member of, e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHF 12.40 this month"]},"; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHF 0.00 this month"]}," when nothing was spent. A group whose organization changed, or that bills to an organization you have since left, keeps what it spent before. With an API key limited to some organizations it is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," for a group whose spend lies outside them. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," when the spend cannot be read right now (never ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHF 0.00"]}," in its place)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["created_at"]}]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["updated_at"]}]}," string or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — when the group was registered and when it last changed (ISO 8601, UTC)."]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"title\": \"Bill to\",\n  \"help\": \"Forge spend inside this group's projects is billed to this organization: rented servers and Forge's AI features. Groups inside it follow it unless they choose their own.\",\n  \"unassigned_label\": \"Not billed to an organization\",\n  \"organizations\": [\n    {\n      \"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\",\n      \"name\": \"Acme Engineering\",\n      \"logo_url\": \"https://cdn.example.com/logos/acme.png\",\n      \"selectable\": true,\n      \"reason\": null,\n      \"order\": 0\n    },\n    {\n      \"id\": \"org_8f2d4b6a1c3e4f5a8b7c9d0e1f2a3b4c\",\n      \"name\": \"Side Project\",\n      \"logo_url\": null,\n      \"selectable\": true,\n      \"reason\": null,\n      \"order\": 1\n    },\n    {\n      \"id\": \"org_1a2b3c4d5e6f4a7b8c9d0e1f2a3b4c5d\",\n      \"name\": \"Client Workspace\",\n      \"logo_url\": null,\n      \"selectable\": false,\n      \"reason\": \"You don't have permission to use Forge in this organization.\",\n      \"order\": 2\n    }\n  ],\n  \"groups\": [\n    {\n      \"id\": \"fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c\",\n      \"client_id\": \"grp-clients\",\n      \"name\": \"Clients\",\n      \"parent_id\": null,\n      \"parent_client_id\": null,\n      \"organization\": {\"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\", \"name\": \"Acme Engineering\"},\n      \"own_organization\": {\"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\", \"name\": \"Acme Engineering\"},\n      \"inherited\": false,\n      \"inherited_from\": null,\n      \"billing_label\": \"Billed to Acme Engineering\",\n      \"reason\": null,\n      \"month_to_date_label\": \"CHF 12.40 this month\",\n      \"created_at\": \"2026-10-09T08:12:03.418227Z\",\n      \"updated_at\": \"2026-10-09T08:12:03.418227Z\"\n    },\n    {\n      \"id\": \"fpgrp_9d3a6e1c5b7f4a2e8c0d4b6f1a3e5c7d\",\n      \"client_id\": \"grp-acme-shop\",\n      \"name\": \"Acme Shop\",\n      \"parent_id\": \"fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c\",\n      \"parent_client_id\": \"grp-clients\",\n      \"organization\": {\"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\", \"name\": \"Acme Engineering\"},\n      \"own_organization\": null,\n      \"inherited\": true,\n      \"inherited_from\": {\"id\": \"fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c\", \"client_id\": \"grp-clients\", \"name\": \"Clients\"},\n      \"billing_label\": \"Billed to Acme Engineering, from Clients\",\n      \"reason\": null,\n      \"month_to_date_label\": \"CHF 3.10 this month\",\n      \"created_at\": \"2026-10-09T08:12:04.902114Z\",\n      \"updated_at\": \"2026-10-09T08:12:04.902114Z\"\n    },\n    {\n      \"id\": \"fpgrp_2f8c1a5e9d3b4c7a6e0f2d4b8a1c3e5f\",\n      \"client_id\": \"grp-side-work\",\n      \"name\": \"Side work\",\n      \"parent_id\": null,\n      \"parent_client_id\": null,\n      \"organization\": null,\n      \"own_organization\": null,\n      \"inherited\": false,\n      \"inherited_from\": null,\n      \"billing_label\": \"Not billed to an organization\",\n      \"reason\": null,\n      \"month_to_date_label\": \"CHF 0.00 this month\",\n      \"created_at\": \"2026-10-09T08:12:05.117390Z\",\n      \"updated_at\": \"2026-10-09T08:12:05.117390Z\"\n    },\n    {\n      \"id\": \"fpgrp_7a1e3c5b9d2f4e6a8c0b1d3f5a7e9c2b\",\n      \"client_id\": \"grp-old-client\",\n      \"name\": \"Old client\",\n      \"parent_id\": null,\n      \"parent_client_id\": null,\n      \"organization\": {\"id\": \"org_1a2b3c4d5e6f4a7b8c9d0e1f2a3b4c5d\", \"name\": \"Client Workspace\"},\n      \"own_organization\": {\"id\": \"org_1a2b3c4d5e6f4a7b8c9d0e1f2a3b4c5d\", \"name\": \"Client Workspace\"},\n      \"inherited\": false,\n      \"inherited_from\": null,\n      \"billing_label\": \"Billed to Client Workspace\",\n      \"reason\": \"You don't have permission to use Forge in this organization.\",\n      \"month_to_date_label\": \"CHF 0.00 this month\",\n      \"created_at\": \"2026-10-09T08:12:05.664021Z\",\n      \"updated_at\": \"2026-10-09T08:12:05.664021Z\"\n    }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"errors","__idx":2},"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 valid credential."]}]},{"$$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":["API_KEY_PERSON_REQUIRED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An organization API key: it has no person of its own."]}]}]}]}]}]},{"$$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 \"https://api.aitronos.com/v1/forge/project-groups\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\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_project_groups` namespace yet, so\n# call the endpoint directly with the same bearer token you would pass to `Aitronos(...)`.\nimport httpx\n\nACCESS_TOKEN = \"your-access-token\"\n\nlisting = httpx.get(\n    \"https://api.aitronos.com/v1/forge/project-groups\",\n    headers={\"Authorization\": f\"Bearer {ACCESS_TOKEN}\"},\n).json()\nfor group in listing[\"groups\"]:\n    print(group[\"name\"], \"-\", group[\"billing_label\"], \"-\", group[\"month_to_date_label\"])\n    if group[\"reason\"]:\n        print(\"  cannot be billed:\", group[\"reason\"])\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","data-title":"Python","header":{"title":"Python","controls":{"copy":{}}},"source":"import os\nimport requests\n\ntoken = os.environ[\"AITRONOS_TOKEN\"]\nresponse = requests.get(\n    \"https://api.aitronos.com/v1/forge/project-groups\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n)\nbody = response.json()\nchoices = [o[\"name\"] for o in body[\"organizations\"] if o[\"selectable\"]]\nprint(body[\"title\"], \"->\", choices)\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/project-groups\", {\n  headers: { Authorization: `Bearer ${process.env.AITRONOS_TOKEN}` },\n});\nconst { groups } = await response.json();\nconsole.log(groups.map((g) => `${g.name}: ${g.billing_label}${g.reason ? ` (${g.reason})` : \"\"}`));\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":"200 OK","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"title\": \"Bill to\",\n  \"help\": \"Forge spend inside this group's projects is billed to this organization: rented servers and Forge's AI features. Groups inside it follow it unless they choose their own.\",\n  \"unassigned_label\": \"Not billed to an organization\",\n  \"organizations\": [\n    {\n      \"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\",\n      \"name\": \"Acme Engineering\",\n      \"logo_url\": \"https://cdn.example.com/logos/acme.png\",\n      \"selectable\": true,\n      \"reason\": null,\n      \"order\": 0\n    }\n  ],\n  \"groups\": [\n    {\n      \"id\": \"fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c\",\n      \"client_id\": \"grp-clients\",\n      \"name\": \"Clients\",\n      \"parent_id\": null,\n      \"parent_client_id\": null,\n      \"organization\": {\"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\", \"name\": \"Acme Engineering\"},\n      \"own_organization\": {\"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\", \"name\": \"Acme Engineering\"},\n      \"inherited\": false,\n      \"inherited_from\": null,\n      \"billing_label\": \"Billed to Acme Engineering\",\n      \"reason\": null,\n      \"month_to_date_label\": \"CHF 12.40 this month\",\n      \"created_at\": \"2026-10-09T08:12:03.418227Z\",\n      \"updated_at\": \"2026-10-09T08:12:03.418227Z\"\n    },\n    {\n      \"id\": \"fpgrp_9d3a6e1c5b7f4a2e8c0d4b6f1a3e5c7d\",\n      \"client_id\": \"grp-acme-shop\",\n      \"name\": \"Acme Shop\",\n      \"parent_id\": \"fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c\",\n      \"parent_client_id\": \"grp-clients\",\n      \"organization\": {\"id\": \"org_3c1e9a7b5d2f4e8a9b0c6d1e2f3a4b5c\", \"name\": \"Acme Engineering\"},\n      \"own_organization\": null,\n      \"inherited\": true,\n      \"inherited_from\": {\"id\": \"fpgrp_4b9e2c7a1d3f4e8a9c0b6d2e1f3a5b7c\", \"client_id\": \"grp-clients\", \"name\": \"Clients\"},\n      \"billing_label\": \"Billed to Acme Engineering, from Clients\",\n      \"reason\": null,\n      \"month_to_date_label\": \"CHF 3.10 this month\",\n      \"created_at\": \"2026-10-09T08:12:04.902114Z\",\n      \"updated_at\": \"2026-10-09T08:12:04.902114Z\"\n    }\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\": \"API_KEY_PERSON_REQUIRED\",\n    \"message\": \"This API key acts as the organization, not as a person, and this operation needs a person.\",\n    \"system_message\": \"This API key acts as the organization, not as a person, and this operation needs a person.\",\n    \"type\": \"authorization_error\",\n    \"status\": 403,\n    \"details\": {\"reason\": \"api_key_person_required\", \"acts_as\": \"organization\", \"hint\": \"Use a key that acts as a person, or a signed-in user's access token.\"},\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":3},"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"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/assets/assess-git-impact.a7bae1761a3dd82a227de8c76df41608e7e238562f3d2f420b7b3eccb4ee1234.23c4b6e8.md"},"children":["Assess a working tree's impact"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/assets/get-usage-detail-report.45870ea5b94806d0570403fa53ae031e4b48417dddf0f27bd3aa2fc29b7ba55c.49b960d1.md"},"children":["Get usage detail report"]}]}]}]},"headings":[{"value":"List project groups","id":"list-project-groups","depth":1},{"value":"Returns","id":"returns","depth":2},{"value":"Errors","id":"errors","depth":2},{"value":"Related Resources","id":"related-resources","depth":2}],"frontmatter":{"title":"List project groups","keywords":["forge","project groups","billing","organization","bill to","usage"],"seo":{"title":"List project groups"}},"lastModified":"2026-10-26T18:32:31.577Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/api-reference/forge-compute/list-project-groups","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}