> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.rhombus.community/llms.txt
> Use this file to discover all available pages before exploring further.

# API Regions (US & EU)

> Connect to the right Rhombus API region — US and EU endpoint URLs, region-bound API keys, CLI region configuration, and cross-region troubleshooting.

## One organization, one region

Rhombus operates two independent production regions: **US** and **EU**. Your organization — its users, devices, API keys, and data — lives in exactly one of them. The region determines which hostnames your integration connects to; everything else is identical, including endpoint paths, authentication headers, request and response formats, and [rate limits](/rate-limits).

<Note>
  **API keys are region-bound.** A key generated in the EU Console only works against EU endpoints, and a US key only works against US endpoints. There is no cross-region redirect — see [Troubleshooting](#troubleshooting) below.
</Note>

## Regional endpoints

| Purpose           | US                                                                                    | EU                                                                                       |
| ----------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| API base URL      | `https://api2.rhombussystems.com`                                                     | `https://api2.eu.rhombussystems.com`                                                     |
| Media & streaming | `https://media.rhombussystems.com`                                                    | `https://media.eu.rhombussystems.com`                                                    |
| Rhombus Console   | `https://console.rhombussystems.com`                                                  | `https://console.eu.rhombussystems.com`                                                  |
| OAuth token host  | `https://auth-web.rhombussystems.com`                                                 | `https://auth-web.eu.rhombussystems.com`                                                 |
| WebSocket (STOMP) | `wss://ws.rhombussystems.com:8443/websocket`                                          | `wss://ws.eu.rhombussystems.com:8443/websocket`                                          |
| OpenAPI spec      | [`/api/openapi/public.json`](https://api2.rhombussystems.com/api/openapi/public.json) | [`/api/openapi/public.json`](https://api2.eu.rhombussystems.com/api/openapi/public.json) |

The pattern is consistent across the platform: the EU hostname inserts `.eu.` after the subdomain — `api2.rhombussystems.com` becomes `api2.eu.rhombussystems.com`.

## Which region is your organization in?

Check the address bar when you're signed in to the Rhombus Console:

* `console.rhombussystems.com` — your organization is in the **US** region.
* `console.eu.rhombussystems.com` — your organization is in the **EU** region (the sign-in page is also badged **EU**).

Generate API keys in your own region's console under **Settings → API Management** — for example, EU organizations use [console.eu.rhombussystems.com/settings/api-management](https://console.eu.rhombussystems.com/settings/api-management/).

## Call the API in your region

Set the base URL once and every code sample in these docs works for either region — the paths, headers, and payloads never change.

<CodeGroup>
  ```bash cURL theme={null}
  # US organizations
  BASE_URL="https://api2.rhombussystems.com"
  # EU organizations
  # BASE_URL="https://api2.eu.rhombussystems.com"

  curl -X POST "$BASE_URL/api/org/getOrganization" \
    -H "x-auth-scheme: api-token" \
    -H "x-auth-apikey: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{}'
  ```

  ```python Python theme={null}
  import requests

  # US: "https://api2.rhombussystems.com"
  # EU: "https://api2.eu.rhombussystems.com"
  BASE_URL = "https://api2.rhombussystems.com"

  response = requests.post(
      f"{BASE_URL}/api/org/getOrganization",
      headers={
          "x-auth-scheme": "api-token",
          "x-auth-apikey": "YOUR_API_KEY",
          "Content-Type": "application/json",
      },
      json={},
  )
  response.raise_for_status()
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  // US: "https://api2.rhombussystems.com"
  // EU: "https://api2.eu.rhombussystems.com"
  const BASE_URL = "https://api2.rhombussystems.com";

  const response = await fetch(`${BASE_URL}/api/org/getOrganization`, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-auth-scheme": "api-token",
      "x-auth-apikey": "YOUR_API_KEY",
    },
    body: JSON.stringify({}),
  });

  console.log(await response.json());
  ```
</CodeGroup>

A successful call returns `200 OK` with your organization's details. A `403 Forbidden` with `"Invalid api key"` usually means the key and the base URL belong to different regions — see [Troubleshooting](#troubleshooting).

### Generated SDKs

Each region serves the OpenAPI spec at the same path (`/api/openapi/public.json`). The spec's `servers` entry currently lists only the US base URL, so when you generate a client for an EU organization, override the base URL explicitly:

```bash Generate an EU client theme={null}
openapi-generator-cli generate \
  -i https://api2.eu.rhombussystems.com/api/openapi/public.json \
  -g python \
  -o ./rhombus-python-client

# Then point the generated client at the EU host, e.g.:
# configuration.host = "https://api2.eu.rhombussystems.com"
```

## Rhombus CLI

The [Rhombus CLI](/rhombus-cli) has built-in region support. `rhombus configure` asks which region your organization is in at the `Region (us/eu)` prompt and derives the endpoint URL from your answer, and `rhombus login` automatically uses the matching regional sign-in and token hosts.

You can also point any single command — or your whole environment — at the EU endpoint directly:

```bash CLI region overrides theme={null}
# Per command
rhombus camera get-minimal-camera-state-list \
  --endpoint-url https://api2.eu.rhombussystems.com

# Per shell session
export RHOMBUS_ENDPOINT_URL=https://api2.eu.rhombussystems.com
rhombus camera get-minimal-camera-state-list
```

## OAuth and WebSocket connections

Regional hostnames apply to every part of the platform, not just the REST API:

* **[Sign in with Rhombus (OAuth)](/oauth-authentication)** — the three hosts in the OAuth flow (console, `auth-web`, `api2`) all switch to their `.eu.` counterparts for EU organizations. OAuth applications are region-bound just like API keys: register, authorize, and exchange tokens all in the same region.
* **[WebSocket real-time events](/websocket/overview)** — EU organizations connect to `wss://ws.eu.rhombussystems.com:8443/websocket`. Authentication and the STOMP protocol are identical.

## Data residency

Organizations provisioned in the EU region are hosted in the European Union: their API traffic, video storage, and cloud processing stay in-region.

## Troubleshooting

### `403 Invalid api key` — but the key is correct

A request to the wrong region's endpoint fails with:

```json theme={null}
{
  "msg": "Invalid api key",
  "error": "Forbidden",
  "status": 403
}
```

This response is identical whether the key is genuinely invalid or simply belongs to the other region — there is no region hint in the error. If you're confident the key is correct, check which console it was generated in (`console.` vs `console.eu.`) and make sure your base URL matches.

### OAuth: "This application is not available for your organization"

OAuth `clientId`s are region-bound. If your app was registered in one region and a user tries to authorize it through the other region's console, the consent screen shows **This application is not available for your organization**. Make sure the registration call, the authorization URL, and the token exchange all target the same region as the signing-in user's organization.

## Next steps

<CardGroup cols={2}>
  <Card title="API Reference" icon="square-terminal" href="/api-reference/overview">
    Browse 900+ endpoints — every path works identically in both regions.
  </Card>

  <Card title="Rhombus CLI" icon="terminal" href="/rhombus-cli">
    Configure the CLI for your region and explore the API from your shell.
  </Card>

  <Card title="WebSocket Events" icon="bolt" href="/websocket/overview">
    Stream real-time events from your region's WebSocket endpoint.
  </Card>

  <Card title="Rate Limits" icon="gauge-high" href="/rate-limits">
    The same limits apply in both regions, enforced within your organization's region.
  </Card>
</CardGroup>
