# Get project instance logs

## `GET /v1/projects/{projectId}/instances/{instanceName}/logs`

Returns the most recent log lines of one instance of a deployed project, oldest first, without color codes. The org's plan sets the largest `tail`. List the instance names with `GET /v1/projects/{projectId}/instances`.

### Path parameters

- `projectId` (integer, required): The ID of the project
- `instanceName` (string, required): The instance name from `GET /v1/projects/{projectId}/instances`

### Query parameters

- `tail` (integer, optional): How many of the most recent lines to return. Default: `100`. Minimum: `1`.

### 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>/instances/<instanceName>/logs" \
  -H "Authorization: Bearer <token>"
```

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

### Responses

**200 OK**

The instance's most recent log lines

Content type: `application/json`

- `instance` (string, required): The instance name
- `tail` (integer, required): The number of lines asked for
- `lines` (array of string, required): Log lines, oldest first

**400 Bad Request**

Invalid project ID or `tail`

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope (`code` is `insufficient_scope`), or `tail` is larger than the org's plan allows (`code` is `plan_limit`, and `max_tail` is the largest allowed `tail`).

Content type: `application/json`

- `error` (string, required)
- `code` (string, required)
- `max_tail` (integer)

**404 Not Found**

The project was not found, or the instance is not one of the project's instances (`code` is `instance_not_found`).

**409 Conflict**

The logs cannot be read in the project's current state. `code` is `project_not_deployed` when the project was never deployed, `project_paused` when it is paused, or `instance_offline` when the Cloud Connect runtime is offline and does not answer.

Content type: `application/json`

- `error` (string, required)
- `code` (string, required): Allowed values: `project_not_deployed`, `project_paused`, `instance_offline`.

**422 Unprocessable Content**

The project is not fully configured

**500 Internal Server Error**

Internal server error

**503 Service Unavailable**

The project runtime did not answer

## `GET /v1/orgs/{orgId}/projects/{projectId}/instances/{instanceName}/logs`

The org is `orgId` in the path. Returns the most recent log lines of one instance of a deployed project, oldest first, without color codes. The org's plan sets the largest `tail`. List the instance names with `GET /v1/projects/{projectId}/instances`.

### Path parameters

- `orgId` (integer, required): The org id from GET /v1/orgs. Minimum: `1`.
- `projectId` (integer, required): The ID of the project
- `instanceName` (string, required): The instance name from `GET /v1/projects/{projectId}/instances`

### Query parameters

- `tail` (integer, optional): How many of the most recent lines to return. Default: `100`. Minimum: `1`.

### 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>/instances/<instanceName>/logs" \
  -H "Authorization: Bearer <token>"
```

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

### Responses

**200 OK**

The instance's most recent log lines

Content type: `application/json`

- `instance` (string, required): The instance name
- `tail` (integer, required): The number of lines asked for
- `lines` (array of string, required): Log lines, oldest first

**400 Bad Request**

Invalid project ID or `tail`. 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 (`code` is `insufficient_scope`), or `tail` is larger than the org's plan allows (`code` is `plan_limit`, and `max_tail` is the largest allowed `tail`). 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`).

Content type: `application/json`

- `error` (string, required)
- `code` (string, required)
- `max_tail` (integer)

**404 Not Found**

The project was not found, or the instance is not one of the project's instances (`code` is `instance_not_found`).

**409 Conflict**

The logs cannot be read in the project's current state. `code` is `project_not_deployed` when the project was never deployed, `project_paused` when it is paused, or `instance_offline` when the Cloud Connect runtime is offline and does not answer.

Content type: `application/json`

- `error` (string, required)
- `code` (string, required): Allowed values: `project_not_deployed`, `project_paused`, `instance_offline`.

**422 Unprocessable Content**

The project is not fully configured

**500 Internal Server Error**

Internal server error

**503 Service Unavailable**

The project runtime did not answer

## `GET /v1/apps/{appId}/instances/{instanceName}/logs` (deprecated)

Legacy alias of `/v1/projects/{projectId}/instances/{instanceName}/logs` — projects were previously called apps. Returns the most recent log lines of one instance of a deployed project, oldest first, without color codes. The org's plan sets the largest `tail`. List the instance names with `GET /v1/projects/{projectId}/instances`.

### Path parameters

- `appId` (integer, required): The ID of the project
- `instanceName` (string, required): The instance name from `GET /v1/projects/{projectId}/instances`

### Query parameters

- `tail` (integer, optional): How many of the most recent lines to return. Default: `100`. Minimum: `1`.

### 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>/instances/<instanceName>/logs" \
  -H "Authorization: Bearer <token>"
```

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

### Responses

**200 OK**

The instance's most recent log lines

Content type: `application/json`

- `instance` (string, required): The instance name
- `tail` (integer, required): The number of lines asked for
- `lines` (array of string, required): Log lines, oldest first

**400 Bad Request**

Invalid project ID or `tail`

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope (`code` is `insufficient_scope`), or `tail` is larger than the org's plan allows (`code` is `plan_limit`, and `max_tail` is the largest allowed `tail`).

Content type: `application/json`

- `error` (string, required)
- `code` (string, required)
- `max_tail` (integer)

**404 Not Found**

The project was not found, or the instance is not one of the project's instances (`code` is `instance_not_found`).

**409 Conflict**

The logs cannot be read in the project's current state. `code` is `project_not_deployed` when the project was never deployed, `project_paused` when it is paused, or `instance_offline` when the Cloud Connect runtime is offline and does not answer.

Content type: `application/json`

- `error` (string, required)
- `code` (string, required): Allowed values: `project_not_deployed`, `project_paused`, `instance_offline`.

**422 Unprocessable Content**

The project is not fully configured

**500 Internal Server Error**

Internal server error

**503 Service Unavailable**

The project runtime did not answer

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