# Read build steps or one page of step output

`GET https://api.instacloud.com/projects/{id}/builds/{source}/{buildId}/logs`

**Token scope:** `account` · `org` · `project` — read-only tokens allowed.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `step` | query | `string` | no |  |
| `cursor` | query | `string` | no |  |
| `id` | path | `string` | yes |  |
| `source` | path | `"github" \| "archive"` | yes |  |
| `buildId` | path | `string` | yes |  |

## Response 200

Default Response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `state` | `"ready" \| "pending" \| "unsupported" \| "unavailable"` | yes |  |
| `buildState` | `string` | yes |  |
| `error` | `string` | no |  |
| `steps` | `object[]` | yes |  |
| `steps.digest` | `string` | yes |  |
| `steps.name` | `string` | yes |  |
| `steps.cached` | `boolean` | yes |  |
| `steps.hasLogs` | `boolean` | yes |  |
| `steps.startedAt` | `string` | no |  |
| `steps.completedAt` | `string` | no |  |
| `steps.error` | `string` | no |  |
| `entries` | `object[]` | yes |  |
| `entries.timestamp` | `string` | yes |  |
| `entries.message` | `string` | yes |  |
| `nextCursor` | `string` | no | Opaque pagination cursor. No cursor means the current page is the tail, not that a running build has finished logging. |
