---
title: "List a project's alerts grouped by rule (or SLO tier)"
description: "The Alerts page. A group is a rule (or an SLO tier) with at least one pending, firing, noData or silenced instance the filters keep; it carries its first 10 instances in the instance order (as GET alerts) and total. Groups are ordered by worstState (firing, noData, pending, silenced), then the latest latestChangeAt first, then owner ID. commonLabels are the labels every instance of the group shares (all of them, not only those returned); each instance's distinctLabels are the rest. The top-level counts are the project's instances by display state under every filter except state, and ruleErrors the rules in rule error. limit is 1-50 groups (default 20). A content read: unrecorded. 404 while alerting isn't offered (the console hides Alerting then)."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.ezghcloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Observability API

`GET /v1/organizations/{orgId}/projects/{projectId}/obs/alerts/groups`

The Alerts page. A group is a rule (or an SLO tier) with at least one pending, firing, noData or silenced instance the filters keep; it carries its first 10 instances in the instance order (as GET alerts) and total. Groups are ordered by worstState (firing, noData, pending, silenced), then the latest latestChangeAt first, then owner ID. commonLabels are the labels every instance of the group shares (all of them, not only those returned); each instance's distinctLabels are the rest. The top-level counts are the project's instances by display state under every filter except state, and ruleErrors the rules in rule error. limit is 1-50 groups (default 20). A content read: unrecorded. 404 while alerting isn't offered (the console hides Alerting then).

## Authentication

Requires one of the following:

- `apiKey`, http, header `Authorization`
- `oauth`, http, header `Authorization`
- `sessionCookie`, apiKey, in cookie

## Path parameters

- `ListAlertGroups.path.orgId` (string, required)
  - format `uuid`
- `ListAlertGroups.path.projectId` (string, required)
  - format `uuid`

## Query parameters

- `ListAlertGroups.query.limit` (integer, optional) — The page size. Out of range is 400, never a clamp.
  - min 1; max 50; default `20`
- `ListAlertGroups.query.cursor` (string, optional) — The previous page's nextCursor. Bound to the organization, the list and its filters.
- `ListAlertGroups.query.state` (array<string>, optional) — Only instances in these display states (repeatable).
- `ListAlertGroups.query.severity` (array<string>, optional) — Only instances whose severity label is one of these (repeatable).
- `ListAlertGroups.query.label` (array<string>, optional) — Only instances whose labels match (repeatable): name=value, name!=value, name=~regex or name!~regex.
- `ListAlertGroups.query.owner` (array<string>, optional) — Only these owners' instances (repeatable): rule:<id> or slo:<id>.
- `ListAlertGroups.query.q` (string, optional) — Only the instances of rules and SLOs whose name contains this (case-insensitive).

## Code samples

### cURL

```curl
curl --request GET \
  --url https://obs.ezghcloud.com/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/obs/alerts/groups \
  --header 'Authorization: Bearer <token>'
```

### TypeScript

```typescript
const url = 'https://obs.ezghcloud.com/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/obs/alerts/groups';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://obs.ezghcloud.com/v1/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/obs/alerts/groups"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
```

## Responses

### 200

A page of groups.

#### Example

```json
{
  "counts": {
    "firing": 0,
    "noData": 0,
    "pending": 0,
    "ruleErrors": 0,
    "silenced": 0
  },
  "groups": [
    {
      "commonLabels": {
        "property1": "string",
        "property2": "string"
      },
      "counts": {
        "firing": 0,
        "noData": 0,
        "pending": 0,
        "silenced": 0
      },
      "degraded": true,
      "instances": [
        {
          "activeAt": "2019-08-24T14:15:22Z",
          "annotations": {
            "property1": "string",
            "property2": "string"
          },
          "distinctLabels": {
            "property1": "string",
            "property2": "string"
          },
          "fingerprint": "string",
          "firedAt": "2019-08-24T14:15:22Z",
          "labels": {
            "property1": "string",
            "property2": "string"
          },
          "lastActiveAt": "2019-08-24T14:15:22Z",
          "owner": {
            "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
            "kind": "string",
            "name": "string",
            "slug": "string"
          },
          "resolvedAt": "2019-08-24T14:15:22Z",
          "silencedBy": [
            "497f6eca-6276-4993-bfeb-53cbbbba6f08"
          ],
          "state": "string",
          "tier": "string",
          "value": 0
        }
      ],
      "latestChangeAt": "2019-08-24T14:15:22Z",
      "owner": {
        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
        "kind": "string",
        "name": "string",
        "slug": "string"
      },
      "tier": "string",
      "total": 0,
      "worstState": "string"
    }
  ],
  "nextCursor": "string",
  "truncated": true
}
```

- `ListAlertGroups.response.200.counts` (object, required) — The project's instances by display state under every filter except state, and its rules in rule error. Lower bounds when truncated.
  - `ListAlertGroups.response.200.counts.firing` (integer, required)
  - `ListAlertGroups.response.200.counts.noData` (integer, required)
  - `ListAlertGroups.response.200.counts.pending` (integer, required)
  - `ListAlertGroups.response.200.counts.ruleErrors` (integer, required)
  - `ListAlertGroups.response.200.counts.silenced` (integer, required)
- `ListAlertGroups.response.200.groups` (array<object>, required)
  - `ListAlertGroups.response.200.groups.commonLabels` (map<string>, required) — The labels every one of its instances has, with the same value.
  - `ListAlertGroups.response.200.groups.counts` (object, required) — Its instances by display state.
    - `ListAlertGroups.response.200.groups.counts.firing` (integer, required)
    - `ListAlertGroups.response.200.groups.counts.noData` (integer, required)
    - `ListAlertGroups.response.200.groups.counts.pending` (integer, required)
    - `ListAlertGroups.response.200.groups.counts.silenced` (integer, required)
  - `ListAlertGroups.response.200.groups.degraded` (boolean, required) — Its evaluations are delayed by an EZGH issue.
  - `ListAlertGroups.response.200.groups.instances` (array<object>, required) — Its first 10 instances in the instance order.
    - `ListAlertGroups.response.200.groups.instances.activeAt` (string, required) — UTC, millisecond precision: 2026-10-02T10:20:00.000Z.
      - format `date-time`
    - `ListAlertGroups.response.200.groups.instances.annotations` (map<string>, required) — Rendered.
    - `ListAlertGroups.response.200.groups.instances.distinctLabels` (map<string>, required) — labels without those every instance of its group (its rule, or SLO tier, under the list's filters) shares.
    - `ListAlertGroups.response.200.groups.instances.fingerprint` (string, required) — 16 hex digits: the hash of the instance's labels.
    - `ListAlertGroups.response.200.groups.instances.firedAt` (string | null, required)
      - format `date-time`
    - `ListAlertGroups.response.200.groups.instances.labels` (map<string>, required)
    - `ListAlertGroups.response.200.groups.instances.lastActiveAt` (string, required) — UTC, millisecond precision: 2026-10-02T10:20:00.000Z.
      - format `date-time`
    - `ListAlertGroups.response.200.groups.instances.owner` (object, required)
      - `ListAlertGroups.response.200.groups.instances.owner.id` (string, required)
        - format `uuid`
      - `ListAlertGroups.response.200.groups.instances.owner.kind` (string, required) — rule or slo.
      - `ListAlertGroups.response.200.groups.instances.owner.name` (string, required)
      - `ListAlertGroups.response.200.groups.instances.owner.slug` (string, required) — alr_… or slo_… (empty in a dry run's instances).
    - `ListAlertGroups.response.200.groups.instances.resolvedAt` (string | null, required)
      - format `date-time`
    - `ListAlertGroups.response.200.groups.instances.silencedBy` (array<string>, required) — The active silences that mute it.
      - format `uuid`
    - `ListAlertGroups.response.200.groups.instances.state` (string, required) — pending, firing, noData or resolved (kept 15 minutes): the underlying state; a silenced one has silencedBy.
    - `ListAlertGroups.response.200.groups.instances.value` (number | null, required)
    - `ListAlertGroups.response.200.groups.instances.tier` (string, optional) — An SLO's tier: page or ticket.
  - `ListAlertGroups.response.200.groups.latestChangeAt` (string, required) — The latest firedAt (or activeAt, when it hasn't fired) of its instances.
    - format `date-time`
  - `ListAlertGroups.response.200.groups.owner` (object, required)
    - `ListAlertGroups.response.200.groups.owner.id` (string, required)
      - format `uuid`
    - `ListAlertGroups.response.200.groups.owner.kind` (string, required) — rule or slo.
    - `ListAlertGroups.response.200.groups.owner.name` (string, required)
    - `ListAlertGroups.response.200.groups.owner.slug` (string, required)
  - `ListAlertGroups.response.200.groups.tier` (string | null, required) — An SLO's tier (page or ticket); null for a rule.
  - `ListAlertGroups.response.200.groups.total` (integer, required) — Its instances the filters keep.
  - `ListAlertGroups.response.200.groups.worstState` (string, required) — firing, noData, pending or silenced. More may be added.
- `ListAlertGroups.response.200.nextCursor` (string | null, required)
- `ListAlertGroups.response.200.truncated` (boolean, required) — True when the filters keep more instances than one request reads (20,000, the most severe state and the newest activeAt first): counts and each group's counts and total are then lower bounds, and groups whose instances all fall past the cap are missing. The filters that narrow the read are owner, severity, q, label name=value and name!=value, and state other than silenced; label regular expressions and state=silenced are applied to the instances read.

### 400

invalid_request (with issues), invalid_cursor, or the endpoint's own 400 codes.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `ListAlertGroups.response.400.error` (object, required)
  - `ListAlertGroups.response.400.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `ListAlertGroups.response.400.error.message` (string, required)
    - maxLength 1024
  - `ListAlertGroups.response.400.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `ListAlertGroups.response.400.error.issues.message` (string, required)
    - `ListAlertGroups.response.400.error.issues.path` (string, required)
  - `ListAlertGroups.response.400.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `ListAlertGroups.response.400.error.quota.id` (string, required)
    - `ListAlertGroups.response.400.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `ListAlertGroups.response.400.error.quota.limit` (integer, required)
      - min 0
    - `ListAlertGroups.response.400.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `ListAlertGroups.response.400.error.quota.inFlight` (integer, optional)
      - min 0
    - `ListAlertGroups.response.400.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.400.error.quota.region` (string, optional)
    - `ListAlertGroups.response.400.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.400.error.quota.scopeResourceName` (string, optional)
    - `ListAlertGroups.response.400.error.quota.used` (integer, optional)
      - min 0
    - `ListAlertGroups.response.400.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 401

unauthenticated: no credential, or one that doesn't check out.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `ListAlertGroups.response.401.error` (object, required)
  - `ListAlertGroups.response.401.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `ListAlertGroups.response.401.error.message` (string, required)
    - maxLength 1024
  - `ListAlertGroups.response.401.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `ListAlertGroups.response.401.error.issues.message` (string, required)
    - `ListAlertGroups.response.401.error.issues.path` (string, required)
  - `ListAlertGroups.response.401.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `ListAlertGroups.response.401.error.quota.id` (string, required)
    - `ListAlertGroups.response.401.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `ListAlertGroups.response.401.error.quota.limit` (integer, required)
      - min 0
    - `ListAlertGroups.response.401.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `ListAlertGroups.response.401.error.quota.inFlight` (integer, optional)
      - min 0
    - `ListAlertGroups.response.401.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.401.error.quota.region` (string, optional)
    - `ListAlertGroups.response.401.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.401.error.quota.scopeResourceName` (string, optional)
    - `ListAlertGroups.response.401.error.quota.used` (integer, optional)
      - min 0
    - `ListAlertGroups.response.401.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 403

access_denied: the caller's policies don't allow the action; forbidden_origin: a cookie-authenticated write from an origin that isn't allowed; spend_limit_reached.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `ListAlertGroups.response.403.error` (object, required)
  - `ListAlertGroups.response.403.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `ListAlertGroups.response.403.error.message` (string, required)
    - maxLength 1024
  - `ListAlertGroups.response.403.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `ListAlertGroups.response.403.error.issues.message` (string, required)
    - `ListAlertGroups.response.403.error.issues.path` (string, required)
  - `ListAlertGroups.response.403.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `ListAlertGroups.response.403.error.quota.id` (string, required)
    - `ListAlertGroups.response.403.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `ListAlertGroups.response.403.error.quota.limit` (integer, required)
      - min 0
    - `ListAlertGroups.response.403.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `ListAlertGroups.response.403.error.quota.inFlight` (integer, optional)
      - min 0
    - `ListAlertGroups.response.403.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.403.error.quota.region` (string, optional)
    - `ListAlertGroups.response.403.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.403.error.quota.scopeResourceName` (string, optional)
    - `ListAlertGroups.response.403.error.quota.used` (integer, optional)
      - min 0
    - `ListAlertGroups.response.403.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 404

not_found: unknown, malformed, or in an organization the caller isn't in.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `ListAlertGroups.response.404.error` (object, required)
  - `ListAlertGroups.response.404.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `ListAlertGroups.response.404.error.message` (string, required)
    - maxLength 1024
  - `ListAlertGroups.response.404.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `ListAlertGroups.response.404.error.issues.message` (string, required)
    - `ListAlertGroups.response.404.error.issues.path` (string, required)
  - `ListAlertGroups.response.404.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `ListAlertGroups.response.404.error.quota.id` (string, required)
    - `ListAlertGroups.response.404.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `ListAlertGroups.response.404.error.quota.limit` (integer, required)
      - min 0
    - `ListAlertGroups.response.404.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `ListAlertGroups.response.404.error.quota.inFlight` (integer, optional)
      - min 0
    - `ListAlertGroups.response.404.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.404.error.quota.region` (string, optional)
    - `ListAlertGroups.response.404.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.404.error.quota.scopeResourceName` (string, optional)
    - `ListAlertGroups.response.404.error.quota.used` (integer, optional)
      - min 0
    - `ListAlertGroups.response.404.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 429

too_many_requests, with Retry-After; or quota_exceeded (a rate, usage or concurrency quota, with quota), never with Retry-After.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `ListAlertGroups.response.429.error` (object, required)
  - `ListAlertGroups.response.429.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `ListAlertGroups.response.429.error.message` (string, required)
    - maxLength 1024
  - `ListAlertGroups.response.429.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `ListAlertGroups.response.429.error.issues.message` (string, required)
    - `ListAlertGroups.response.429.error.issues.path` (string, required)
  - `ListAlertGroups.response.429.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `ListAlertGroups.response.429.error.quota.id` (string, required)
    - `ListAlertGroups.response.429.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `ListAlertGroups.response.429.error.quota.limit` (integer, required)
      - min 0
    - `ListAlertGroups.response.429.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `ListAlertGroups.response.429.error.quota.inFlight` (integer, optional)
      - min 0
    - `ListAlertGroups.response.429.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.429.error.quota.region` (string, optional)
    - `ListAlertGroups.response.429.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.429.error.quota.scopeResourceName` (string, optional)
    - `ListAlertGroups.response.429.error.quota.used` (integer, optional)
      - min 0
    - `ListAlertGroups.response.429.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 500

internal_error: a bug; the details are in the logs, under the request ID.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `ListAlertGroups.response.500.error` (object, required)
  - `ListAlertGroups.response.500.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `ListAlertGroups.response.500.error.message` (string, required)
    - maxLength 1024
  - `ListAlertGroups.response.500.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `ListAlertGroups.response.500.error.issues.message` (string, required)
    - `ListAlertGroups.response.500.error.issues.path` (string, required)
  - `ListAlertGroups.response.500.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `ListAlertGroups.response.500.error.quota.id` (string, required)
    - `ListAlertGroups.response.500.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `ListAlertGroups.response.500.error.quota.limit` (integer, required)
      - min 0
    - `ListAlertGroups.response.500.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `ListAlertGroups.response.500.error.quota.inFlight` (integer, optional)
      - min 0
    - `ListAlertGroups.response.500.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.500.error.quota.region` (string, optional)
    - `ListAlertGroups.response.500.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.500.error.quota.scopeResourceName` (string, optional)
    - `ListAlertGroups.response.500.error.quota.used` (integer, optional)
      - min 0
    - `ListAlertGroups.response.500.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.

### 503

unavailable: a dependency the request needs is down. Retry after Retry-After.

#### Example

```json
{
  "error": {
    "code": "string",
    "issues": [
      {
        "message": "string",
        "path": "string"
      }
    ],
    "message": "string",
    "quota": {
      "id": "string",
      "inFlight": 0,
      "kind": "allocation",
      "limit": 0,
      "periodStart": "2019-08-24T14:15:22Z",
      "region": "string",
      "resetsAt": "2019-08-24T14:15:22Z",
      "scope": "organization",
      "scopeResourceName": "string",
      "used": 0,
      "window": "string"
    }
  }
}
```

- `ListAlertGroups.response.503.error` (object, required)
  - `ListAlertGroups.response.503.error.code` (string, required)
    - maxLength 64; pattern `^[a-z][a-z0-9_]*$`
  - `ListAlertGroups.response.503.error.message` (string, required)
    - maxLength 1024
  - `ListAlertGroups.response.503.error.issues` (array<object>, optional) — invalid_request: one entry per problem, at a dotted path.
    - `ListAlertGroups.response.503.error.issues.message` (string, required)
    - `ListAlertGroups.response.503.error.issues.path` (string, required)
  - `ListAlertGroups.response.503.error.quota` (object, optional) — quota_exceeded: the quota that refused the request. Never with Retry-After.
    - `ListAlertGroups.response.503.error.quota.id` (string, required)
    - `ListAlertGroups.response.503.error.quota.kind` (unknown, required)
      - one of `"allocation"`, `"rate"`, `"usage"`, `"concurrency"`
    - `ListAlertGroups.response.503.error.quota.limit` (integer, required)
      - min 0
    - `ListAlertGroups.response.503.error.quota.scope` (unknown, required)
      - one of `"organization"`, `"project"`, `"resource"`
    - `ListAlertGroups.response.503.error.quota.inFlight` (integer, optional)
      - min 0
    - `ListAlertGroups.response.503.error.quota.periodStart` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.503.error.quota.region` (string, optional)
    - `ListAlertGroups.response.503.error.quota.resetsAt` (string, optional)
      - format `date-time`
    - `ListAlertGroups.response.503.error.quota.scopeResourceName` (string, optional)
    - `ListAlertGroups.response.503.error.quota.used` (integer, optional)
      - min 0
    - `ListAlertGroups.response.503.error.quota.window` (string, optional) — rate only: an ISO 8601 duration, PT1S to PT1H.


Source: https://docs.ezghcloud.com/obs-api/ListAlertGroups/index.md
