# Get project metrics

## `GET /v1/projects/{projectId}/metrics`

Returns current resource utilization metrics (CPU, memory, disk I/O) and data ingestion metrics for a project.

### Path parameters

- `projectId` (integer, required): The ID of the project

### Query parameters

- `window` (string, optional): Prometheus-style duration (e.g. `5m`, `1h`, `30s`). When provided, counter metrics are returned as rates over the window instead of raw cumulative values. For example, `rows_ingested` returns average rows per second with a window, or total cumulative rows without one.

### Header parameters

- `Authorization` (string, required): `Bearer <token>`. [Authentication](https://spice.ai/docs/cloud/api/management#authentication) lists the tokens it accepts.
- `X-Org-Name` (string, optional): The organization to act on, by handle. Omit it to act on the organization the credential is bound to; sending it blank is a 400, not the same as omitting it. A user credential may name any organization its owner belongs to; a machine credential is pinned to its own. A portal session token is bound to none, so it must send this header on every route but `GET /v1/orgs` (400 `org_assertion_required` otherwise). Pattern: `^[A-Za-z0-9._-]{1,255}$`.

### Example request

```bash
curl "https://api.spice.ai/v1/projects/<projectId>/metrics" \
  -H "Authorization: Bearer <token>"
```

```http
GET /v1/projects/<projectId>/metrics HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>
```

### Responses

**200 OK**

Resource and ingestion metrics. Missing fields indicate no data is currently available. Individual metric queries may fail independently; partial results are returned when possible.

Content type: `application/json`

- `ingestion` (object): Aggregated data ingestion metrics
  - `rows_ingested` (number): Total rows ingested (without window) or rows per second (with window)
  - `bytes_ingested` (number): Total bytes ingested (without window) or bytes per second (with window)
- `cluster` (object): Cluster metrics for the project
  - `active_executors_count` (number): Number of active executors registered with the scheduler
- `metrics` (map of object): Resource metrics keyed by pod name
  - `cpu_usage_percent` (number): CPU usage as a percentage (0-100)
  - `memory_usage_bytes` (number): Memory usage in bytes
  - `disk_read_bytes` (number): Disk bytes read per second (with window) or cumulative (without window)
  - `disk_read_operations` (number): Disk read operations per second (with window) or cumulative count (without window)
  - `disk_write_bytes` (number): Disk bytes written per second (with window) or cumulative (without window)
  - `disk_write_operations` (number): Disk write operations per second (with window) or cumulative count (without window)

**400 Bad Request**

Invalid project ID

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope

**404 Not Found**

Project or organization not found

**422 Unprocessable Content**

Organization is not fully configured

**500 Internal Server Error**

Internal server error

**503 Service Unavailable**

Metrics service unavailable

## `GET /v1/orgs/{orgId}/projects/{projectId}/metrics`

The org is `orgId` in the path. Returns current resource utilization metrics (CPU, memory, disk I/O) and data ingestion metrics for a project.

### Path parameters

- `orgId` (integer, required): The org id from GET /v1/orgs. Minimum: `1`.
- `projectId` (integer, required): The ID of the project

### Query parameters

- `window` (string, optional): Prometheus-style duration (e.g. `5m`, `1h`, `30s`). When provided, counter metrics are returned as rates over the window instead of raw cumulative values. For example, `rows_ingested` returns average rows per second with a window, or total cumulative rows without one.

### Header parameters

- `Authorization` (string, required): `Bearer <token>`. [Authentication](https://spice.ai/docs/cloud/api/management#authentication) lists the tokens it accepts.
- `X-Org-Name` (string, optional): When present, X-Org-Name must name the same org as orgId. Otherwise the request returns org\_path\_mismatch (400). Pattern: `^[A-Za-z0-9._-]{1,255}$`.

### Example request

```bash
curl "https://api.spice.ai/v1/orgs/<orgId>/projects/<projectId>/metrics" \
  -H "Authorization: Bearer <token>"
```

```http
GET /v1/orgs/<orgId>/projects/<projectId>/metrics HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>
```

### Responses

**200 OK**

Resource and ingestion metrics. Missing fields indicate no data is currently available. Individual metric queries may fail independently; partial results are returned when possible.

Content type: `application/json`

- `ingestion` (object): Aggregated data ingestion metrics
  - `rows_ingested` (number): Total rows ingested (without window) or rows per second (with window)
  - `bytes_ingested` (number): Total bytes ingested (without window) or bytes per second (with window)
- `cluster` (object): Cluster metrics for the project
  - `active_executors_count` (number): Number of active executors registered with the scheduler
- `metrics` (map of object): Resource metrics keyed by pod name
  - `cpu_usage_percent` (number): CPU usage as a percentage (0-100)
  - `memory_usage_bytes` (number): Memory usage in bytes
  - `disk_read_bytes` (number): Disk bytes read per second (with window) or cumulative (without window)
  - `disk_read_operations` (number): Disk read operations per second (with window) or cumulative count (without window)
  - `disk_write_bytes` (number): Disk bytes written per second (with window) or cumulative (without window)
  - `disk_write_operations` (number): Disk write operations per second (with window) or cumulative count (without window)

**400 Bad Request**

Invalid project ID. orgId is not a valid org id (`invalid_org_id`), or X-Org-Name does not name that org (`org_path_mismatch`).

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope. The caller is not a member of the org (`org_forbidden`). A machine credential named a different org (`org_assertion_mismatch`). The org is deleted (`org_deleted`).

**404 Not Found**

Project or organization not found

**422 Unprocessable Content**

Organization is not fully configured

**500 Internal Server Error**

Internal server error

**503 Service Unavailable**

Metrics service unavailable

## `GET /v1/apps/{appId}/metrics` (deprecated)

Legacy alias of `/v1/projects/{projectId}/metrics` — projects were previously called apps. Returns current resource utilization metrics (CPU, memory, disk I/O) and data ingestion metrics for a project.

### Path parameters

- `appId` (integer, required): The ID of the project

### Query parameters

- `window` (string, optional): Prometheus-style duration (e.g. `5m`, `1h`, `30s`). When provided, counter metrics are returned as rates over the window instead of raw cumulative values. For example, `rows_ingested` returns average rows per second with a window, or total cumulative rows without one.

### Header parameters

- `Authorization` (string, required): `Bearer <token>`. [Authentication](https://spice.ai/docs/cloud/api/management#authentication) lists the tokens it accepts.
- `X-Org-Name` (string, optional): The organization to act on, by handle. Omit it to act on the organization the credential is bound to; sending it blank is a 400, not the same as omitting it. A user credential may name any organization its owner belongs to; a machine credential is pinned to its own. A portal session token is bound to none, so it must send this header on every route but `GET /v1/orgs` (400 `org_assertion_required` otherwise). Pattern: `^[A-Za-z0-9._-]{1,255}$`.

### Example request

```bash
curl "https://api.spice.ai/v1/apps/<appId>/metrics" \
  -H "Authorization: Bearer <token>"
```

```http
GET /v1/apps/<appId>/metrics HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>
```

### Responses

**200 OK**

Resource and ingestion metrics. Missing fields indicate no data is currently available. Individual metric queries may fail independently; partial results are returned when possible.

Content type: `application/json`

- `ingestion` (object): Aggregated data ingestion metrics
  - `rows_ingested` (number): Total rows ingested (without window) or rows per second (with window)
  - `bytes_ingested` (number): Total bytes ingested (without window) or bytes per second (with window)
- `cluster` (object): Cluster metrics for the project
  - `active_executors_count` (number): Number of active executors registered with the scheduler
- `metrics` (map of object): Resource metrics keyed by pod name
  - `cpu_usage_percent` (number): CPU usage as a percentage (0-100)
  - `memory_usage_bytes` (number): Memory usage in bytes
  - `disk_read_bytes` (number): Disk bytes read per second (with window) or cumulative (without window)
  - `disk_read_operations` (number): Disk read operations per second (with window) or cumulative count (without window)
  - `disk_write_bytes` (number): Disk bytes written per second (with window) or cumulative (without window)
  - `disk_write_operations` (number): Disk write operations per second (with window) or cumulative count (without window)

**400 Bad Request**

Invalid project ID

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope

**404 Not Found**

Project or organization not found

**422 Unprocessable Content**

Organization is not fully configured

**500 Internal Server Error**

Internal server error

**503 Service Unavailable**

Metrics service unavailable

OpenAPI: [api.spice.ai/openapi.json](https://api.spice.ai/openapi.json)
