# Read a changelog entry

:::openapi-operation GET /api/v1/workspaces/{workspace}/changelog/{id}
AUTH bearerAuth
:::

Returns one entry with its url. A draft or a scheduled entry needs the changelog.update permission, and for any other key it returns 404.

:::codesamples open Code examples

```bash:curl
curl -X GET "https://contextowl.co/api/v1/workspaces/string/changelog/example-id" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <token>"
```

:::

:::details open Parameters (2)

| NAME | IN | TYPE | REQUIRED | DESCRIPTION |
| --- | --- | --- | --- | --- |
| `workspace` | path | string | yes | Workspace id, or - for the key's bound workspace |
| `id` | path | integer | yes | Changelog entry id |

:::

:::details open Success responses (200)

#### 200

Success

**Content-Type:** `application/json`

| FIELD | TYPE | REQUIRED | DESCRIPTION |
| --- | --- | --- | --- |
| `author` | string | yes | - |
| `createdAt` | string (date-time) | yes | - |
| `id` | integer | yes | - |
| `markdown` | string | yes | - |
| `publishedAt` | string (date-time) | no | - |
| `status` | string | yes | - |
| `tags` | array items: string | yes | - |
| `title` | string | yes | - |
| `updatedAt` | string (date-time) | yes | - |
| `url` | string | yes | - |

```json
{
  "author": "string",
  "createdAt": "string",
  "id": 0,
  "markdown": "string",
  "publishedAt": "string",
  "status": "string",
  "tags": [
    "string"
  ],
  "title": "string",
  "updatedAt": "string",
  "url": "string"
}
```

:::

:::details Error responses (400, 401, 403, 404, 429, 500)

#### 400

invalid_request: a parameter or the body is not valid.

**Content-Type:** `application/json`

| FIELD | TYPE | REQUIRED | DESCRIPTION |
| --- | --- | --- | --- |
| `error` | object | yes | - |

```json
{
  "error": {
    "code": "string",
    "details": null,
    "message": "string",
    "status": 0
  }
}
```

#### 401

unauthorized: the access key is missing, invalid or expired.

**Content-Type:** `application/json`

| FIELD | TYPE | REQUIRED | DESCRIPTION |
| --- | --- | --- | --- |
| `error` | object | yes | - |

```json
{
  "error": {
    "code": "string",
    "details": null,
    "message": "string",
    "status": 0
  }
}
```

#### 403

permission_denied: the key lacks the permission. two_factor_required: the org requires admins to turn on two-factor authentication.

**Content-Type:** `application/json`

| FIELD | TYPE | REQUIRED | DESCRIPTION |
| --- | --- | --- | --- |
| `error` | object | yes | - |

```json
{
  "error": {
    "code": "string",
    "details": null,
    "message": "string",
    "status": 0
  }
}
```

#### 404

not_found: no such workspace or entry. A draft or a scheduled entry needs the changelog.update permission.

**Content-Type:** `application/json`

| FIELD | TYPE | REQUIRED | DESCRIPTION |
| --- | --- | --- | --- |
| `error` | object | yes | - |

```json
{
  "error": {
    "code": "string",
    "details": null,
    "message": "string",
    "status": 0
  }
}
```

#### 429

rate_limited: too many requests. Wait for the time in the Retry-After header.

**Content-Type:** `application/json`

| FIELD | TYPE | REQUIRED | DESCRIPTION |
| --- | --- | --- | --- |
| `error` | object | yes | - |

```json
{
  "error": {
    "code": "string",
    "details": null,
    "message": "string",
    "status": 0
  }
}
```

#### 500

internal: the server failed.

**Content-Type:** `application/json`

| FIELD | TYPE | REQUIRED | DESCRIPTION |
| --- | --- | --- | --- |
| `error` | object | yes | - |

```json
{
  "error": {
    "code": "string",
    "details": null,
    "message": "string",
    "status": 0
  }
}
```

:::
