# Projects and public discovery

Paths on this page are relative to <code>/api/liquidity-studio/v2</code>. Authentication and required headers vary by operation.

[API reference overview](/api-reference/overview/) · [OpenAPI download](/openapi/liquidity-operating-system-v2.openapi.json)

## Operations on this page

| Method | Path | Operation |
| --- | --- | --- |
| <code>POST</code> | <code>/public/projects/resolve</code> | [resolvePublicProject](#resolvePublicProject) |
| <code>POST</code> | <code>/public/projects/investigate</code> | [investigatePublicProjectLiquidity](#investigatePublicProjectLiquidity) |
| <code>GET</code> | <code>/projects</code> | [listSavedProjects](#listSavedProjects) |
| <code>POST</code> | <code>/projects</code> | [savePublicProject](#savePublicProject) |
| <code>GET</code> | <code>/projects/{projectId}</code> | [getSavedProject](#getSavedProject) |
| <code>POST</code> | <code>/projects/{projectId}/refresh</code> | [refreshSavedProject](#refreshSavedProject) |
| <code>GET</code> | <code>/projects/{projectId}/observations</code> | [listSavedProjectObservations](#listSavedProjectObservations) |
| <code>GET</code> | <code>/projects/{projectId}/observations/{version}</code> | [getSavedProjectObservation](#getSavedProjectObservation) |

<a id="resolvePublicProject"></a>

## Inspect a supported project using public market sources without a login, vault or payment

`POST /public/projects/resolve`

Operation ID: <code>resolvePublicProject</code>

**Authentication:** No authentication is required by this operation’s contract.

Bounded public read with no private tenant lookup or issuer ownership assertion. A successful response may be partial and explicitly retains gaps. Observing a pool does not establish graduation, locked liquidity, issuer control or tradability. No saved investigation, entitlement, payment or financial authority is created.

This operation declares no parameters.

### Request body

Required: **yes**.

**<code>application/json</code>**

[PublicProjectResolveRequest](/api-reference/schemas/public-project-resolve-request/)

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Public source observations with explicit limitations. | <code>application/json</code>: <code>object</code> |
| <code>400</code> | Malformed JSON, invalid or unsupported identifier, or extra fields. | <code>application/json</code>: <code>object</code> |
| <code>413</code> | Request exceeds the 2 KiB JSON body limit. | <code>application/json</code>: <code>object</code> |
| <code>429</code> | Client rate or upstream concurrency limit exceeded. | <code>application/json</code>: <code>object</code> |
| <code>503</code> | Public sources are unconfigured, unavailable, unverifiable or timed out. Raw provider errors are not disclosed. | <code>application/json</code>: <code>object</code> |

**<code>200</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |

**<code>200</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | [PublicProjectAnalysis](/api-reference/schemas/public-project-analysis/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>400</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |

**<code>400</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>error.code</code> | Yes | <code>string</code> | Allowed: <code>PUBLIC&#95;PROJECT&#95;INVALID&#95;INPUT</code> |
| <code>error.message</code> | Yes | <code>string</code> | — |
| <code>error.retryable</code> | Yes | Constant <code>false</code> | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>413</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |

**<code>413</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>error.code</code> | Yes | <code>string</code> | Allowed: <code>PUBLIC&#95;PROJECT&#95;INVALID&#95;INPUT</code> |
| <code>error.message</code> | Yes | <code>string</code> | — |
| <code>error.retryable</code> | Yes | Constant <code>false</code> | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>429</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |
| <code>Retry-After</code> | Yes | <code>string</code> | Pattern: <code>^&#91;0-9&#93;+$</code> |

**<code>429</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>error.code</code> | Yes | <code>string</code> | Allowed: <code>PUBLIC&#95;PROJECT&#95;BUSY</code> |
| <code>error.message</code> | Yes | <code>string</code> | — |
| <code>error.retryable</code> | Yes | Constant <code>true</code> | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>503</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |

**<code>503</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>error.code</code> | Yes | <code>string</code> | Allowed: <code>PUBLIC&#95;PROJECT&#95;UNAVAILABLE</code>, <code>PUBLIC&#95;PROJECT&#95;TIMEOUT</code> |
| <code>error.message</code> | Yes | <code>string</code> | — |
| <code>error.retryable</code> | Yes | Constant <code>true</code> | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

<a id="investigatePublicProjectLiquidity"></a>

## Inspect one bounded public reserve-scale liquidity question without a login or payment

`POST /public/projects/investigate`

Operation ID: <code>investigatePublicProjectLiquidity</code>

**Authentication:** No authentication is required by this operation’s contract.

Reads the same public project evidence as project resolution and returns a source-backed VIRTUAL pool reserve-scale finding. This is not a tradability claim, executable quote, slippage estimate, custody instruction, paid job, saved tenant investigation, or financial authority. An unavailable finding preserves the source and explains its evidence gap.

This operation declares no parameters.

### Request body

Required: **yes**.

**<code>application/json</code>**

[PublicLiquidityInvestigationRequest](/api-reference/schemas/public-liquidity-investigation-request/)

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Public source evidence and bounded reserve-scale finding with explicit limitations. | <code>application/json</code>: <code>object</code> |
| <code>400</code> | Malformed JSON, unsupported identifier or question, invalid quote size, or extra fields. | <code>application/json</code>: <code>object</code> |
| <code>413</code> | Request exceeds the 2 KiB JSON body limit. | <code>application/json</code>: <code>object</code> |
| <code>429</code> | Client rate or upstream concurrency limit exceeded. | <code>application/json</code>: <code>object</code> |
| <code>503</code> | Public sources are unconfigured, unavailable, unverifiable or timed out. Raw provider errors are not disclosed. | <code>application/json</code>: <code>object</code> |

**<code>200</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |

**<code>200</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | [PublicLiquidityInvestigation](/api-reference/schemas/public-liquidity-investigation/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>400</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |

**<code>400</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>error.code</code> | Yes | <code>string</code> | Allowed: <code>PUBLIC&#95;INVESTIGATION&#95;INVALID&#95;INPUT</code> |
| <code>error.message</code> | Yes | <code>string</code> | — |
| <code>error.retryable</code> | Yes | Constant <code>false</code> | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>413</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |

**<code>413</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>error.code</code> | Yes | <code>string</code> | Allowed: <code>PUBLIC&#95;INVESTIGATION&#95;INVALID&#95;INPUT</code> |
| <code>error.message</code> | Yes | <code>string</code> | — |
| <code>error.retryable</code> | Yes | Constant <code>false</code> | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>429</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |
| <code>Retry-After</code> | Yes | <code>string</code> | Pattern: <code>^&#91;0-9&#93;+$</code> |

**<code>429</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>error.code</code> | Yes | <code>string</code> | Allowed: <code>PUBLIC&#95;INVESTIGATION&#95;BUSY</code> |
| <code>error.message</code> | Yes | <code>string</code> | — |
| <code>error.retryable</code> | Yes | Constant <code>true</code> | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>503</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>no-store</code> | — |

**<code>503</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>error.code</code> | Yes | <code>string</code> | Allowed: <code>PUBLIC&#95;INVESTIGATION&#95;UNAVAILABLE</code>, <code>PUBLIC&#95;INVESTIGATION&#95;TIMEOUT</code> |
| <code>error.message</code> | Yes | <code>string</code> | — |
| <code>error.retryable</code> | Yes | Constant <code>true</code> | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

<a id="listSavedProjects"></a>

## List saved public-project bookmarks in the current workspace

`GET /projects`

Operation ID: <code>listSavedProjects</code>

**Authentication:** <code>&#95;&#95;Host-klineo&#95;session</code> cookie (<code>sessionCookie</code>)

Requires current interactive workspace membership. Developer service credentials are not accepted. A saved public-project bookmark grants no issuer ownership, treasury access, paid entitlement, financial permission or publication authority. Observations are immutable public snapshots; refreshing appends a new version without rewriting history.

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>x-klineo-organization-id</code> | header | Yes | <code>string</code> | — |
| <code>limit</code> | query | No | <code>integer</code> | Default: <code>20</code>; Minimum: <code>1</code>; Maximum: <code>20</code> |
| <code>cursor</code> | query | No | <code>string</code> | Continuation position returned by this collection. Current tenant authorization is rechecked independently on every request. Pattern: <code>^project&#95;&#91;0-9a-f&#93;{32}$</code> |

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Tenant-authorized saved public-project record. | <code>application/json</code>: <code>object</code> |
| <code>400</code> | Invalid input or collection cursor. | <code>application/json</code>: <code>object</code> |
| <code>401</code> | Interactive session required. | <code>application/json</code>: <code>object</code> |
| <code>403</code> | Current workspace access or requested operation denied. | <code>application/json</code>: <code>object</code> |
| <code>404</code> | Record unavailable in this workspace. | <code>application/json</code>: <code>object</code> |
| <code>429</code> | Request or public-source quota exceeded. | <code>application/json</code>: <code>object</code> |
| <code>503</code> | Saved project storage or public source unavailable. | <code>application/json</code>: <code>object</code> |

**<code>200</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>200</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | [SavedProjectList](/api-reference/schemas/saved-project-list/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>400</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>400</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>401</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>401</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>403</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>403</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>404</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>404</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>429</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>429</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>503</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>503</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

<a id="savePublicProject"></a>

## Save an independently resolved public-project observation

`POST /projects`

Operation ID: <code>savePublicProject</code>

**Authentication:** <code>&#95;&#95;Host-klineo&#95;session</code> cookie (<code>sessionCookie</code>)

Requires current interactive workspace membership. Developer service credentials are not accepted. A saved public-project bookmark grants no issuer ownership, treasury access, paid entitlement, financial permission or publication authority. Observations are immutable public snapshots; refreshing appends a new version without rewriting history.

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>x-klineo-organization-id</code> | header | Yes | <code>string</code> | — |
| <code>Idempotency-Key</code> | header | Yes | <code>string</code> | Min length: <code>8</code>; Max length: <code>200</code> |

### Request body

Required: **yes**.

**<code>application/json</code>**

[PublicProjectResolveRequest](/api-reference/schemas/public-project-resolve-request/)

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Tenant-authorized saved public-project record. | <code>application/json</code>: <code>object</code> |
| <code>400</code> | Invalid input or collection cursor. | <code>application/json</code>: <code>object</code> |
| <code>401</code> | Interactive session required. | <code>application/json</code>: <code>object</code> |
| <code>403</code> | Current workspace access or requested operation denied. | <code>application/json</code>: <code>object</code> |
| <code>404</code> | Record unavailable in this workspace. | <code>application/json</code>: <code>object</code> |
| <code>409</code> | Idempotency identity conflicts or source binding changed. | <code>application/json</code>: <code>object</code> |
| <code>429</code> | Request or public-source quota exceeded. | <code>application/json</code>: <code>object</code> |
| <code>503</code> | Saved project storage or public source unavailable. | <code>application/json</code>: <code>object</code> |

**<code>200</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |
| <code>ETag</code> | Yes | <code>string</code> | Pattern: <code>^"0x&#91;0-9a-f&#93;{64}"$</code> |

**<code>200</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | [SavedProjectWriteReceipt](/api-reference/schemas/saved-project-write-receipt/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>400</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>400</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>401</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>401</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>403</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>403</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>404</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>404</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>409</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>409</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>429</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>429</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>503</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>503</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

<a id="getSavedProject"></a>

## Read a saved public-project bookmark and its latest observation

`GET /projects/{projectId}`

Operation ID: <code>getSavedProject</code>

**Authentication:** <code>&#95;&#95;Host-klineo&#95;session</code> cookie (<code>sessionCookie</code>)

Requires current interactive workspace membership. Developer service credentials are not accepted. A saved public-project bookmark grants no issuer ownership, treasury access, paid entitlement, financial permission or publication authority. Observations are immutable public snapshots; refreshing appends a new version without rewriting history.

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>x-klineo-organization-id</code> | header | Yes | <code>string</code> | — |
| <code>projectId</code> | path | Yes | <code>string</code> | Pattern: <code>^project&#95;&#91;0-9a-f&#93;{32}$</code> |

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Tenant-authorized saved public-project record. | <code>application/json</code>: <code>object</code> |
| <code>400</code> | Invalid input or collection cursor. | <code>application/json</code>: <code>object</code> |
| <code>401</code> | Interactive session required. | <code>application/json</code>: <code>object</code> |
| <code>403</code> | Current workspace access or requested operation denied. | <code>application/json</code>: <code>object</code> |
| <code>404</code> | Record unavailable in this workspace. | <code>application/json</code>: <code>object</code> |
| <code>429</code> | Request or public-source quota exceeded. | <code>application/json</code>: <code>object</code> |
| <code>503</code> | Saved project storage or public source unavailable. | <code>application/json</code>: <code>object</code> |

**<code>200</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |
| <code>ETag</code> | Yes | <code>string</code> | Pattern: <code>^"0x&#91;0-9a-f&#93;{64}"$</code> |

**<code>200</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | [SavedPublicProject](/api-reference/schemas/saved-public-project/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>400</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>400</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>401</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>401</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>403</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>403</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>404</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>404</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>429</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>429</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>503</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>503</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

<a id="refreshSavedProject"></a>

## Append a newly resolved public observation to the exact saved project version

`POST /projects/{projectId}/refresh`

Operation ID: <code>refreshSavedProject</code>

**Authentication:** <code>&#95;&#95;Host-klineo&#95;session</code> cookie (<code>sessionCookie</code>)

Requires current interactive workspace membership. Developer service credentials are not accepted. A saved public-project bookmark grants no issuer ownership, treasury access, paid entitlement, financial permission or publication authority. Observations are immutable public snapshots; refreshing appends a new version without rewriting history.

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>x-klineo-organization-id</code> | header | Yes | <code>string</code> | — |
| <code>projectId</code> | path | Yes | <code>string</code> | Pattern: <code>^project&#95;&#91;0-9a-f&#93;{32}$</code> |
| <code>Idempotency-Key</code> | header | Yes | <code>string</code> | Min length: <code>8</code>; Max length: <code>200</code> |
| <code>If-Match</code> | header | Yes | <code>string</code> | Pattern: <code>^"0x&#91;0-9a-f&#93;{64}"$</code> |

### Request body

Required: **yes**.

**<code>application/json</code>**

<code>object</code> — Max properties: <code>0</code>; Additional properties rejected

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Tenant-authorized saved public-project record. | <code>application/json</code>: <code>object</code> |
| <code>400</code> | Invalid input or collection cursor. | <code>application/json</code>: <code>object</code> |
| <code>401</code> | Interactive session required. | <code>application/json</code>: <code>object</code> |
| <code>403</code> | Current workspace access or requested operation denied. | <code>application/json</code>: <code>object</code> |
| <code>404</code> | Record unavailable in this workspace. | <code>application/json</code>: <code>object</code> |
| <code>409</code> | Idempotency identity conflicts or source binding changed. | <code>application/json</code>: <code>object</code> |
| <code>412</code> | Project version changed; review current evidence before a new refresh. | <code>application/json</code>: <code>object</code> |
| <code>428</code> | Strong current project If-Match required. | <code>application/json</code>: <code>object</code> |
| <code>429</code> | Request or public-source quota exceeded. | <code>application/json</code>: <code>object</code> |
| <code>503</code> | Saved project storage or public source unavailable. | <code>application/json</code>: <code>object</code> |

**<code>200</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |
| <code>ETag</code> | Yes | <code>string</code> | Pattern: <code>^"0x&#91;0-9a-f&#93;{64}"$</code> |

**<code>200</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | [SavedProjectWriteReceipt](/api-reference/schemas/saved-project-write-receipt/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>400</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>400</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>401</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>401</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>403</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>403</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>404</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>404</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>409</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>409</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>412</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>412</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>428</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>428</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>429</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>429</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>503</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>503</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

<a id="listSavedProjectObservations"></a>

## List immutable observation metadata without changing captured evidence

`GET /projects/{projectId}/observations`

Operation ID: <code>listSavedProjectObservations</code>

**Authentication:** <code>&#95;&#95;Host-klineo&#95;session</code> cookie (<code>sessionCookie</code>)

Requires current interactive workspace membership. Developer service credentials are not accepted. A saved public-project bookmark grants no issuer ownership, treasury access, paid entitlement, financial permission or publication authority. Observations are immutable public snapshots; refreshing appends a new version without rewriting history.

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>x-klineo-organization-id</code> | header | Yes | <code>string</code> | — |
| <code>projectId</code> | path | Yes | <code>string</code> | Pattern: <code>^project&#95;&#91;0-9a-f&#93;{32}$</code> |
| <code>limit</code> | query | No | <code>integer</code> | Default: <code>20</code>; Minimum: <code>1</code>; Maximum: <code>20</code> |
| <code>cursor</code> | query | No | <code>string</code> | Continuation position returned by this collection. Current tenant authorization is rechecked independently on every request. Pattern: <code>^&#91;1-9&#93;&#91;0-9&#93;{0,17}$</code> |

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Tenant-authorized saved public-project record. | <code>application/json</code>: <code>object</code> |
| <code>400</code> | Invalid input or collection cursor. | <code>application/json</code>: <code>object</code> |
| <code>401</code> | Interactive session required. | <code>application/json</code>: <code>object</code> |
| <code>403</code> | Current workspace access or requested operation denied. | <code>application/json</code>: <code>object</code> |
| <code>404</code> | Record unavailable in this workspace. | <code>application/json</code>: <code>object</code> |
| <code>429</code> | Request or public-source quota exceeded. | <code>application/json</code>: <code>object</code> |
| <code>503</code> | Saved project storage or public source unavailable. | <code>application/json</code>: <code>object</code> |

**<code>200</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>200</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | [SavedProjectObservationList](/api-reference/schemas/saved-project-observation-list/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>400</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>400</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>401</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>401</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>403</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>403</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>404</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>404</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>429</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>429</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>503</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>503</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

<a id="getSavedProjectObservation"></a>

## Read the exact immutable public observation version

`GET /projects/{projectId}/observations/{version}`

Operation ID: <code>getSavedProjectObservation</code>

**Authentication:** <code>&#95;&#95;Host-klineo&#95;session</code> cookie (<code>sessionCookie</code>)

Requires current interactive workspace membership. Developer service credentials are not accepted. A saved public-project bookmark grants no issuer ownership, treasury access, paid entitlement, financial permission or publication authority. Observations are immutable public snapshots; refreshing appends a new version without rewriting history.

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>x-klineo-organization-id</code> | header | Yes | <code>string</code> | — |
| <code>projectId</code> | path | Yes | <code>string</code> | Pattern: <code>^project&#95;&#91;0-9a-f&#93;{32}$</code> |
| <code>version</code> | path | Yes | <code>string</code> | Pattern: <code>^&#91;1-9&#93;&#91;0-9&#93;{0,17}$</code> |

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Tenant-authorized saved public-project record. | <code>application/json</code>: <code>object</code> |
| <code>400</code> | Invalid input or collection cursor. | <code>application/json</code>: <code>object</code> |
| <code>401</code> | Interactive session required. | <code>application/json</code>: <code>object</code> |
| <code>403</code> | Current workspace access or requested operation denied. | <code>application/json</code>: <code>object</code> |
| <code>404</code> | Record unavailable in this workspace. | <code>application/json</code>: <code>object</code> |
| <code>429</code> | Request or public-source quota exceeded. | <code>application/json</code>: <code>object</code> |
| <code>503</code> | Saved project storage or public source unavailable. | <code>application/json</code>: <code>object</code> |

**<code>200</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |
| <code>ETag</code> | Yes | <code>string</code> | Pattern: <code>^"0x&#91;0-9a-f&#93;{64}"$</code> |

**<code>200</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | [SavedProjectObservation](/api-reference/schemas/saved-project-observation/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>400</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>400</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>401</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>401</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>403</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>403</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>404</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>404</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>429</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>429</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.

**<code>503</code> response headers**

| Header | Required | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>Cache-Control</code> | Yes | Constant <code>private, no-store</code> | — |

**<code>503</code> <code>application/json</code> body**

<code>object</code> — Additional properties rejected

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>error</code> | Yes | [ApiError](/api-reference/schemas/api-error/) | — |

Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.
