# Get the attached OpenAPI spec

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

Returns the stored spec as it was attached or last fetched, with Content-Type application/json or application/yaml. The body is the spec itself, not a JSON object. Returns 404 when no spec is attached.

:::codesamples open Code examples

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

:::

:::details open Parameters (1)

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

:::

:::details open Success responses (200)

#### 200

Success

:::

:::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 no OpenAPI spec is attached to it.

**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
  }
}
```

:::
