# v1 · Projects and public discovery

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

[API reference overview](/api-reference/v1/overview/) · [OpenAPI download](/openapi/liquidity-studio.openapi.json)

## Operations on this page

| Method | Path | Operation |
| --- | --- | --- |
| <code>POST</code> | <code>/projects</code> | [postProjects](#postProjects) |
| <code>GET</code> | <code>/projects/{projectId}</code> | [getProjectsByProjectId](#getProjectsByProjectId) |
| <code>POST</code> | <code>/projects/{projectId}/eligibility-assessments</code> | [postProjectsByProjectIdEligibilityAssessments](#postProjectsByProjectIdEligibilityAssessments) |
| <code>POST</code> | <code>/projects/{projectId}/data-room/uploads</code> | [postProjectsByProjectIdDataRoomUploads](#postProjectsByProjectIdDataRoomUploads) |
| <code>POST</code> | <code>/projects/{projectId}/lifecycle-transitions</code> | [postProjectsByProjectIdLifecycleTransitions](#postProjectsByProjectIdLifecycleTransitions) |

<a id="postProjects"></a>

## postProjects

`POST /projects`

Operation ID: <code>postProjects</code>

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

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>Idempotency-Key</code> | header | Yes | <code>string</code> | Min length: <code>8</code>; Max length: <code>163</code> |

### Request body

Required: **yes**.

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

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

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>name</code> | Yes | <code>string</code> | Min length: <code>2</code>; Max length: <code>80</code> |
| <code>projectToken</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>quoteToken</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>quoteProfile</code> | Yes | <code>string</code> | Allowed: <code>USDT</code>, <code>WBOT</code> |
| <code>ownerSafe</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>poolAddress</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>launchContext</code> | Yes | <code>string</code> | Allowed: <code>PRE&#95;TGE</code>, <code>POST&#95;LAUNCH</code> |
| <code>strategy</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>strategy.kind</code> | Yes | <code>string</code> | Allowed: <code>BOOTSTRAP</code>, <code>MAINTAIN</code>, <code>DIVERSIFY</code> |
| <code>strategy.version</code> | Yes | <code>string</code> | Min length: <code>1</code>; Max length: <code>80</code> |
| <code>strategy.targetInventoryPips</code> | Yes | <code>integer</code> | Minimum: <code>0</code>; Maximum: <code>1000000</code> |
| <code>strategy.rebalanceThresholdPips</code> | Yes | <code>integer</code> | Minimum: <code>0</code>; Maximum: <code>1000000</code> |
| <code>strategy.quoteReserveFloor</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>strategy.maxCandidateAmount</code> | Yes | <code>string</code> | Pattern: <code>^&#91;1-9&#93;&#91;0-9&#93;&#42;$</code> |
| <code>strategy.rangeWidthTicks</code> | Yes | <code>integer</code> | Maximum: <code>1774544</code>; Exclusive minimum: <code>0</code> |
| <code>strategy.diversificationTriggerPips</code> | Yes | <code>integer</code> | Minimum: <code>0</code>; Maximum: <code>1000000</code> |
| <code>strategy.diversificationMandate</code> | No | <code>object</code> | Additional properties rejected |
| <code>strategy.diversificationMandate.executionMode</code> | Yes | Constant <code>ISSUER&#95;SAFE&#95;APPROVAL&#95;ONLY</code> | — |
| <code>strategy.diversificationMandate.totalTokenSaleCap</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>strategy.diversificationMandate.dailyTokenSaleCap</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>strategy.diversificationMandate.hourlyTokenSaleCap</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>strategy.diversificationMandate.maximumOrganicVolumeParticipationPips</code> | Yes | <code>integer</code> | Minimum: <code>1</code>; Maximum: <code>1000000</code> |
| <code>strategy.diversificationMandate.minimumSalePriceX18</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>strategy.diversificationMandate.minimumRetainedTokenBalance</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>strategy.diversificationMandate.targetProtectedQuoteReserve</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>strategy.diversificationMandate.validUntil</code> | Yes | <code>string</code> | Format: <code>date-time</code> |
| <code>strategy.diversificationMandate.proceedsRule</code> | Yes | Constant <code>PROTECTED&#95;QUOTE&#95;RESERVE</code> | — |
| <code>strategy.diversificationMandate.repurchaseAllowed</code> | Yes | Constant <code>false</code> | — |
| <code>strategy.diversificationMandate.unlockDisclosureArtifactHash</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{64}$</code> |
| <code>strategy.diversificationMandate.insiderWalletDisclosureArtifactHash</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{64}$</code> |
| <code>strategy.diversificationMandate.publicReportingMode</code> | Yes | <code>string</code> | Allowed: <code>PRIVATE</code>, <code>ISSUER&#95;APPROVED&#95;PUBLIC</code> |
| <code>qualification</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>qualification.legalEntityName</code> | Yes | <code>string</code> | Min length: <code>2</code>; Max length: <code>200</code> |
| <code>qualification.projectName</code> | Yes | <code>string</code> | Min length: <code>2</code>; Max length: <code>160</code> |
| <code>qualification.maximumDeployableTokenAtomic</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>qualification.maximumDeployableQuoteAtomic</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>qualification.protectedQuoteReserveAtomic</code> | Yes | <code>string</code> | Pattern: <code>^&#40;0&#124;&#91;1-9&#93;&#91;0-9&#93;&#42;&#41;$</code> |
| <code>qualification.reserveRationale</code> | Yes | <code>string</code> | Min length: <code>12</code>; Max length: <code>1000</code> |
| <code>qualification.executionRecipientPolicy</code> | Yes | Constant <code>IMMUTABLE&#95;VAULT&#95;ONLY</code> | — |
| <code>qualification.exitRecipient</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{40}$</code> |
| <code>qualification.intendedPolicyTerm</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>qualification.intendedPolicyTerm.validAfter</code> | Yes | <code>string</code> | Format: <code>date-time</code> |
| <code>qualification.intendedPolicyTerm.validUntil</code> | Yes | <code>string</code> | Format: <code>date-time</code> |
| <code>qualification.contacts</code> | Yes | Array of <code>object</code> | Min items: <code>2</code>; Max items: <code>12</code> |
| <code>qualification.contacts&#91;&#93;.kind</code> | Yes | <code>string</code> | Allowed: <code>OPERATIONS</code>, <code>EMERGENCY</code>, <code>GOVERNANCE</code> |
| <code>qualification.contacts&#91;&#93;.name</code> | Yes | <code>string</code> | Min length: <code>2</code>; Max length: <code>120</code> |
| <code>qualification.contacts&#91;&#93;.email</code> | Yes | <code>string</code> | Format: <code>email</code>; Max length: <code>254</code> |
| <code>qualification.contacts&#91;&#93;.responseWindowMinutes</code> | Yes | <code>integer</code> | Minimum: <code>1</code>; Maximum: <code>10080</code> |
| <code>qualification.launch</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>qualification.launch.launchDate</code> | Yes | <code>string</code> | Format: <code>date-time</code> |
| <code>qualification.launch.unlockScheduleArtifactHash</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{64}$</code> |
| <code>qualification.tokenDisclosureArtifactHash</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{64}$</code> |
| <code>qualification.governanceApprovalArtifactHash</code> | Yes | <code>string</code> | Pattern: <code>^0x&#91;0-9a-fA-F&#93;{64}$</code> |
| <code>qualification.dataRoom</code> | Yes | <code>object</code> | Additional properties rejected |
| <code>qualification.dataRoom.termsVersion</code> | Yes | <code>string</code> | Min length: <code>1</code>; Max length: <code>120</code> |
| <code>qualification.dataRoom.termsSource</code> | Yes | <code>string</code> | Min length: <code>3</code>; Max length: <code>500</code> |
| <code>qualification.dataRoom.acceptedAt</code> | Yes | <code>string</code> | Format: <code>date-time</code> |
| <code>qualification.desiredOutcomes</code> | Yes | Array of <code>string</code> | Min items: <code>1</code>; Max items: <code>20</code> |
| <code>qualification.prohibitedBehaviors</code> | Yes | Array of <code>string</code> | Min items: <code>1</code>; Max items: <code>20</code> |
| <code>qualification.referenceVenueIds</code> | Yes | Array of <code>string</code> | Min items: <code>1</code>; Max items: <code>20</code> |
| <code>qualification.oracleSourceAddresses</code> | Yes | Array of <code>string</code> | Min items: <code>2</code>; Max items: <code>2</code> |
| <code>reason</code> | Yes | <code>string</code> | Min length: <code>12</code>; Max length: <code>500</code> |

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

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>201</code> | Successful response | <code>application/json</code>: <code>object</code> |
| <code>default</code> | Structured API error | <code>application/json</code>: [ApiErrorEnvelope](/api-reference/v1/schemas/api-error-envelope/) |

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

<code>object</code>

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | <code>object</code> | The typed runtime domain record returned by this operation. Additional properties allowed |

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

<a id="getProjectsByProjectId"></a>

## getProjectsByProjectId

`GET /projects/{projectId}`

Operation ID: <code>getProjectsByProjectId</code>

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

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>projectId</code> | path | Yes | <code>string</code> | Min length: <code>1</code> |

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Successful response | <code>application/json</code>: <code>object</code> |
| <code>default</code> | Structured API error | <code>application/json</code>: [ApiErrorEnvelope](/api-reference/v1/schemas/api-error-envelope/) |

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

<code>object</code>

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | <code>object</code> | The typed runtime domain record returned by this operation. Additional properties allowed |

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

<a id="postProjectsByProjectIdEligibilityAssessments"></a>

## postProjectsByProjectIdEligibilityAssessments

`POST /projects/{projectId}/eligibility-assessments`

Operation ID: <code>postProjectsByProjectIdEligibilityAssessments</code>

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

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>projectId</code> | path | Yes | <code>string</code> | Min length: <code>1</code> |
| <code>Idempotency-Key</code> | header | Yes | <code>string</code> | Min length: <code>8</code>; Max length: <code>163</code> |

### Request body

Required: **yes**.

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

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

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>reason</code> | Yes | <code>string</code> | Min length: <code>12</code>; Max length: <code>500</code> |

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

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>201</code> | Successful response | <code>application/json</code>: <code>object</code> |
| <code>default</code> | Structured API error | <code>application/json</code>: [ApiErrorEnvelope](/api-reference/v1/schemas/api-error-envelope/) |

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

<code>object</code>

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | <code>object</code> | The typed runtime domain record returned by this operation. Additional properties allowed |

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

<a id="postProjectsByProjectIdDataRoomUploads"></a>

## postProjectsByProjectIdDataRoomUploads

`POST /projects/{projectId}/data-room/uploads`

Operation ID: <code>postProjectsByProjectIdDataRoomUploads</code>

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

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>projectId</code> | path | Yes | <code>string</code> | Min length: <code>1</code> |
| <code>Idempotency-Key</code> | header | Yes | <code>string</code> | Min length: <code>8</code>; Max length: <code>163</code> |

### Request body

Required: **yes**.

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

[DataRoomUploadRequest](/api-reference/v1/schemas/data-room-upload-request/)

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>201</code> | Successful response | <code>application/json</code>: <code>object</code> |
| <code>default</code> | Structured API error | <code>application/json</code>: [ApiErrorEnvelope](/api-reference/v1/schemas/api-error-envelope/) |

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

<code>object</code>

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | [DataRoomUploadResponse](/api-reference/v1/schemas/data-room-upload-response/) | — |

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

<a id="postProjectsByProjectIdLifecycleTransitions"></a>

## postProjectsByProjectIdLifecycleTransitions

`POST /projects/{projectId}/lifecycle-transitions`

Operation ID: <code>postProjectsByProjectIdLifecycleTransitions</code>

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

### Parameters

| Name | Location | Required | Type | Description and constraints |
| --- | --- | --- | --- | --- |
| <code>projectId</code> | path | Yes | <code>string</code> | Min length: <code>1</code> |
| <code>Idempotency-Key</code> | header | Yes | <code>string</code> | Min length: <code>8</code>; Max length: <code>163</code> |
| <code>If-Match</code> | header | Yes | <code>string</code> | One quoted strong entity tag for the exact aggregate version reviewed by the actor. Pattern: <code>^"&#91;^"&#92;&#92;&#92;r&#92;n&#93;+"$</code>; Min length: <code>3</code> |

### Request body

Required: **yes**.

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

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

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>to</code> | Yes | <code>string</code> | Allowed: <code>LEAD</code>, <code>QUALIFIED</code>, <code>DATA&#95;ROOM</code>, <code>SIMULATED</code>, <code>POLICY&#95;DRAFT</code>, <code>TESTNET</code>, <code>SHADOW</code>, <code>FUND&#95;READY</code>, <code>LIVE&#95;CAPPED</code>, <code>LIVE&#95;EXPANDED</code> |
| <code>reason</code> | Yes | <code>string</code> | Min length: <code>3</code>; Max length: <code>500</code> |

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

### Responses

| Status | Description | Content type and schema |
| --- | --- | --- |
| <code>200</code> | Successful response | <code>application/json</code>: <code>object</code> |
| <code>default</code> | Structured API error | <code>application/json</code>: [ApiErrorEnvelope](/api-reference/v1/schemas/api-error-envelope/) |

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

<code>object</code>

| Field | Required at this level | Type | Description and constraints |
| --- | --- | --- | --- |
| <code>data</code> | Yes | <code>object</code> | The typed runtime domain record returned by this operation. Additional properties allowed |

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