# List connected cloud accounts

Lists the cloud provider accounts your organization connected for Forge cloud compute, one per offering, with whether each still works (`status`), when the provider last accepted it and, for tokens that expire, when it will stop working. Use it to show which bring-your-own offerings are ready. The account's secret values are write-only and are never returned, in any form. Requires a bearer token (or API key) whose principal holds the `use_forge` capability in the acting organization; it works while Forge cloud compute is switched off.

This endpoint takes no parameters.

#### Query Parameters

**`organization_id`** string optional

The organization to act in. Defaults to your current organization. You must be an active member of it, or the request is refused with `403 ORGANIZATION_ACCESS_DENIED`.

#### Headers

**`X-Organization-Id`** string optional

The same as `organization_id`, as a header. When both are sent, the query parameter wins.

## Returns

An array, one entry per connected account, ordered by offering. Empty when nothing is connected.

- **`offering_id`** string — the offering the account connects, e.g. `hetzner`. One account is stored per offering and organization.
- **`set`** boolean — always `true`: account details are stored. The values themselves are never returned.
- **`account_label`** string or `null` — a name the provider reports for the account (project, team or user name), or `null` when the provider exposes none.
- **`verified_at`** string or `null` — when the provider last accepted the details (UTC, ISO 8601).
- **`status`** string — `connected` when the account works; `credential_invalid` when the provider has since refused it. [Connect it again](/docs/api-reference/forge-compute/put-credential) to fix it.
- **`inactive_reason`** string or `null` — why the account is `credential_invalid`, as a short machine-readable reason; `null` while it is connected.
- **`expires_at`** string or `null` — when the provider will stop accepting the details (UTC), for providers whose tokens expire; `null` when they do not or the provider does not say.



```json
[
  {
    "offering_id": "hetzner",
    "set": true,
    "account_label": null,
    "verified_at": "2026-09-28T08:12:40Z",
    "status": "connected",
    "inactive_reason": null,
    "expires_at": null
  },
  {
    "offering_id": "upcloud",
    "set": true,
    "account_label": "forge-team",
    "verified_at": "2026-09-20T14:03:11Z",
    "status": "connected",
    "inactive_reason": null,
    "expires_at": "2027-09-20T14:03:11Z"
  }
]
```

## Errors

| Status | Code | When |
|  --- | --- | --- |
| 401 | `AUTHENTICATION_REQUIRED` | No valid credential. |
| 403 | `ORGANIZATION_ACCESS_DENIED` | `organization_id` or `X-Organization-Id` names an organization you are not an active member of. |
| 403 | `INSUFFICIENT_PERMISSIONS` | The caller does not hold `use_forge` in the acting organization. |



```bash cURL
curl "https://api.aitronos.com/v1/forge/compute/credentials" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```


```python Python SDK
# pip install aitronos-sdk
#
# The Python SDK does not expose a typed `forge_compute` namespace yet, so call
# the endpoint directly with the same credential you would pass to `Aitronos(...)`
# — an API key or a bearer token, both sent as `Authorization: Bearer <value>`.
import httpx

API_KEY = "your-api-key"

accounts = httpx.get(
    "https://api.aitronos.com/v1/forge/compute/credentials",
    headers={"Authorization": f"Bearer {API_KEY}"},
).json()
for account in accounts:
    print(account["offering_id"], account["status"], account["expires_at"])
```


```python Python
import os
import requests

token = os.environ["AITRONOS_TOKEN"]
response = requests.get(
    "https://api.aitronos.com/v1/forge/compute/credentials",
    headers={"Authorization": f"Bearer {token}"},
)
connected = {a["offering_id"] for a in response.json() if a["status"] == "connected"}
print(connected)
```


```javascript JavaScript
const response = await fetch(
  "https://api.aitronos.com/v1/forge/compute/credentials",
  { headers: { Authorization: `Bearer ${process.env.AITRONOS_TOKEN}` } },
);
const accounts = await response.json();
console.log(accounts.filter((a) => a.status === "credential_invalid"));
```

**Response:**

200 OK

```json
[
  {
    "offering_id": "hetzner",
    "set": true,
    "account_label": null,
    "verified_at": "2026-09-28T08:12:40Z",
    "status": "credential_invalid",
    "inactive_reason": "provider_rejected_credential",
    "expires_at": null
  }
]
```

403 Forbidden

```json
{
  "success": false,
  "error": {
    "code": "INSUFFICIENT_PERMISSIONS",
    "message": "You don't have permission to perform this action.",
    "system_message": "Missing required capability: use_forge",
    "type": "authorization_error",
    "status": 403,
    "details": {"required_capability": "use_forge"},
    "trace_id": "3f1c9a52-7d4e-4b8a-9c21-6e0d5f7a8b34",
    "timestamp": "2026-09-28T09:00:00Z"
  }
}
```

## Related Resources

- [Forge cloud compute overview](/docs/api-reference/forge-compute/introduction)
- [List billing organizations](/docs/api-reference/forge-compute/list-billing-organizations)
- [Choose the default billing organization](/docs/api-reference/forge-compute/choose-billing-organization)
- [List project groups](/docs/api-reference/forge-compute/list-project-groups)
- [Register or update a project group](/docs/api-reference/forge-compute/put-project-group)
- [Delete a project group](/docs/api-reference/forge-compute/delete-project-group)
- [List compute offerings](/docs/api-reference/forge-compute/list-offerings)
- [Get offering options](/docs/api-reference/forge-compute/get-offering-options)
- [Resolve a free size](/docs/api-reference/forge-compute/resolve-offering-size)
- [List connected accounts](/docs/api-reference/forge-compute/list-credentials)
- [Connect a cloud account](/docs/api-reference/forge-compute/put-credential)
- [Disconnect a cloud account](/docs/api-reference/forge-compute/delete-credential)
- [Create a server](/docs/api-reference/forge-compute/create-host)
- [List servers](/docs/api-reference/forge-compute/list-hosts)
- [List your servers in every organization](/docs/api-reference/forge-compute/list-my-hosts)
- [Get a server](/docs/api-reference/forge-compute/get-host)
- [Get a server's daily cost and uptime](/docs/api-reference/forge-compute/get-host-usage)
- [List a server's running intervals](/docs/api-reference/forge-compute/list-host-intervals)
- [List a server's event history](/docs/api-reference/forge-compute/list-host-events)
- [Report a setup step](/docs/api-reference/forge-compute/report-progress)
- [Report the server's host key](/docs/api-reference/forge-compute/report-host-key)
- [Mark a server ready](/docs/api-reference/forge-compute/report-ready)
- [Report activity](/docs/api-reference/forge-compute/report-activity)
- [Park a server](/docs/api-reference/forge-compute/park-host)
- [Resume a server](/docs/api-reference/forge-compute/resume-host)
- [Delete a server](/docs/api-reference/forge-compute/delete-host)
- [Revoke a server](/docs/api-reference/forge-compute/revoke-host)
- [Get compute settings](/docs/api-reference/forge-compute/get-settings)
- [Update compute settings](/docs/api-reference/forge-compute/update-settings)
- [Get spend limits](/docs/api-reference/forge-compute/get-limits)
- [Change the organization's limits](/docs/api-reference/forge-compute/update-organization-limits)
- [Set your own limit](/docs/api-reference/forge-compute/update-my-limit)
- [List member limits](/docs/api-reference/forge-compute/list-member-limits)
- [Set a member's limit](/docs/api-reference/forge-compute/update-member-limit)
- [Delete a leftover resource](/docs/api-reference/forge-compute/delete-orphan)