# PublicProjectAnalysis

[All API schemas](/api-reference/schemas/)

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

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>schemaVersion</code> | Yes | Constant <code>public-project-analysis-v1</code> | — |
| <code>chainId</code> | Yes | Constant <code>8453</code> | — |
| <code>identifier</code> | Yes | <code>string</code> | Max length: <code>512</code> |
| <code>token</code> | Yes | At least one of: <code>object</code>; <code>null</code> | — |
| <code>token.anyOf&#91;1&#93;.address</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>token.anyOf&#91;1&#93;.name</code> | Yes | At least one of: <code>string</code>; <code>null</code> | — |
| <code>token.anyOf&#91;1&#93;.symbol</code> | Yes | At least one of: <code>string</code>; <code>null</code> | — |
| <code>token.anyOf&#91;1&#93;.decimals</code> | Yes | At least one of: <code>integer</code>; <code>null</code> | — |
| <code>project</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>project.virtualsProjectId</code> | Yes | At least one of: <code>string</code>; <code>null</code> | — |
| <code>project.url</code> | Yes | At least one of: <code>string</code>; <code>null</code> | — |
| <code>project.relationship</code> | Yes | Constant <code>PUBLIC&#95;IDENTIFIER&#95;ONLY</code> | — |
| <code>launchStage</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>launchStage.status</code> | Yes | <code>string</code> | Allowed: <code>UNKNOWN</code>, <code>POOL&#95;OBSERVED</code> |
| <code>launchStage.explanation</code> | Yes | <code>string</code> | Max length: <code>1000</code> |
| <code>observation</code> | Yes | At least one of: <code>object</code>; <code>null</code> | — |
| <code>observation.anyOf&#91;1&#93;.blockNumber</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code>; Max length: <code>78</code> |
| <code>observation.anyOf&#91;1&#93;.blockHash</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{64}$</code> |
| <code>observation.anyOf&#91;1&#93;.blockTimestamp</code> | Yes | <code>string</code> | Format: <code>date-time</code> |
| <code>observation.anyOf&#91;1&#93;.observedAt</code> | Yes | <code>string</code> | Read time, equal to readAt; not a durable recorded observation time. Format: <code>date-time</code> |
| <code>observation.anyOf&#91;1&#93;.readAt</code> | Yes | <code>string</code> | Format: <code>date-time</code> |
| <code>observation.anyOf&#91;1&#93;.recordedAt</code> | Yes | <code>null</code> | — |
| <code>observation.anyOf&#91;1&#93;.providerId</code> | Yes | <code>string</code> | Pattern: <code>^&#91;a-zA-Z0-9:&#95;-&#93;{1,120}$</code> |
| <code>observation.anyOf&#91;1&#93;.providerGeneration</code> | Yes | <code>string</code> | Pattern: <code>^&#91;a-zA-Z0-9:&#95;-&#93;{1,120}$</code> |
| <code>observation.anyOf&#91;1&#93;.finality</code> | Yes | Constant <code>FINALIZED</code> | — |
| <code>observation.anyOf&#91;1&#93;.finalityVerification</code> | Yes | Constant <code>SINGLE&#95;RPC&#95;ASSERTION</code> | — |
| <code>pools</code> | Yes | Array of <code>object</code> | Max items: <code>1</code> |
| <code>pools&#91;&#93;.address</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>pools&#91;&#93;.factory</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>pools&#91;&#93;.token0</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>pools&#91;&#93;.token1</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>pools&#91;&#93;.reserve0Atomic</code> | Yes | <code>string</code> | Exact unsigned uint112 reserve in native atomic units. Never coerce to a JavaScript number or assume decimal metadata is available. Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;{0,33}&#41;$</code> |
| <code>pools&#91;&#93;.reserve1Atomic</code> | Yes | <code>string</code> | Exact unsigned uint112 reserve in native atomic units. Never coerce to a JavaScript number or assume decimal metadata is available. Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;{0,33}&#41;$</code> |
| <code>pools&#91;&#93;.reserve0Decimals</code> | Yes | At least one of: <code>integer</code>; <code>null</code> | — |
| <code>pools&#91;&#93;.reserve1Decimals</code> | Yes | At least one of: <code>integer</code>; <code>null</code> | — |
| <code>pools&#91;&#93;.verification</code> | Yes | Constant <code>CANONICAL&#95;FACTORY&#95;AND&#95;PAIR&#95;AT&#95;BLOCK</code> | — |
| <code>pools&#91;&#93;.quoteStatus</code> | Yes | Constant <code>UNAVAILABLE&#95;TRANSFER&#95;BEHAVIOR</code> | — |
| <code>gaps</code> | Yes | Array of <code>string</code> | Max items: <code>20</code> |
| <code>financialAuthority</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.

Exact definition: <code>#/components/schemas/PublicProjectAnalysis</code> in the [OpenAPI contract](/openapi/liquidity-operating-system-v2.openapi.json).