object — Additional properties rejected
| Field | Required at this level | Type | Description and constraints |
|---|---|---|---|
schemaVersion |
Yes | Constant research-planning-proposal-v1 |
— |
organizationId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
runId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
contextHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
sourceHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
sourceCutoff |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
subject |
Yes | object |
Additional properties rejected |
subject.issuerIntentId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
subject.expectedResourceVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
question |
Yes | string |
Min length: 3; Max length: 2000 |
status |
Yes | string |
Allowed: NEEDS_INPUT, NEEDS_REVIEW |
candidate |
Yes | object |
Additional properties rejected |
candidate.seed |
No | string |
Min length: 8; Max length: 200 |
candidate.stepCount |
No | integer |
Minimum: 1; Maximum: 365 |
candidate.startingPortfolioQuote |
No | string |
Pattern: ^[1-9][0-9]{0,77}$ |
candidate.startingDepthQuote |
No | string |
Pattern: ^[1-9][0-9]{0,77}$ |
candidate.startingInventoryPips |
No | integer |
Minimum: 0; Maximum: 1000000 |
candidate.objective |
No | object |
Additional properties rejected |
candidate.objective.metric |
Yes | string |
Allowed: ENDING_VALUE_P50, MINIMUM_DEPTH_P5, GAS_COST_P50, DRAWDOWN_P95, RESERVE_BREACH_PROBABILITY |
candidate.objective.direction |
Yes | string |
Allowed: MAXIMIZE, MINIMIZE |
candidate.baselineScenario |
No | object |
Additional properties rejected |
candidate.baselineScenario.id |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
candidate.baselineScenario.name |
Yes | string |
Min length: 3; Max length: 160 |
candidate.baselineScenario.kind |
Yes | string |
Allowed: HISTORICAL_REPLAY, BULL, BEAR, SIDEWAYS, LIQUIDITY_CRISIS, TOKEN_UNLOCK, LARGE_BUYER, LARGE_SELLER, LIQUIDITY_WITHDRAWAL, GAS_SPIKE, ORACLE_OUTAGE, COMBINED |
candidate.baselineScenario.driftPipsPerStep |
Yes | integer |
Minimum: -1000000; Maximum: 1000000 |
candidate.baselineScenario.volatilityPipsPerStep |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.baselineScenario.liquidityWithdrawalPips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.baselineScenario.oneSidedFlowPips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.baselineScenario.gasIncreasePips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.baselineScenario.oracleOutageStep |
No | integer |
Minimum: 0; Maximum: 364 |
candidate.baselineScenario.historicalReturnPips |
No | Array of integer |
Min items: 1; Max items: 365 |
candidate.baselineScenario.protocolFeePips |
No | integer |
Minimum: 0; Maximum: 1000000 |
candidate.baselineScenario.platformFeePips |
No | integer |
Minimum: 0; Maximum: 1000000 |
candidate.baselineScenario.unlocks |
Yes | Array of object |
Max items: 256 |
candidate.baselineScenario.unlocks[].id |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,152}$ |
candidate.baselineScenario.unlocks[].unlocksAt |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
candidate.baselineScenario.unlocks[].tokenAmount |
Yes | string |
Pattern: ^[1-9][0-9]{0,77}$ |
candidate.baselineScenario.unlocks[].recipientCategory |
Yes | string |
Allowed: TEAM, INVESTOR, COMMUNITY, TREASURY, ECOSYSTEM, OTHER |
candidate.baselineScenario.unlocks[].expectedSaleParticipationPips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.baselineScenario.unlocks[].confidencePips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.baselineScenario.unlocks[].correlationGroup |
No | string |
Min length: 1; Max length: 120 |
candidate.baselineScenario.unlocks[].evidenceHash |
No | string |
Pattern: ^0x[0-9a-fA-F]{64}$ |
candidate.alternatives |
Yes | Array of object |
Max items: 3 |
candidate.alternatives[].label |
Yes | string |
Min length: 1; Max length: 120 |
candidate.alternatives[].scenario |
Yes | object |
Additional properties rejected |
candidate.alternatives[].scenario.id |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
candidate.alternatives[].scenario.name |
Yes | string |
Min length: 3; Max length: 160 |
candidate.alternatives[].scenario.kind |
Yes | string |
Allowed: HISTORICAL_REPLAY, BULL, BEAR, SIDEWAYS, LIQUIDITY_CRISIS, TOKEN_UNLOCK, LARGE_BUYER, LARGE_SELLER, LIQUIDITY_WITHDRAWAL, GAS_SPIKE, ORACLE_OUTAGE, COMBINED |
candidate.alternatives[].scenario.driftPipsPerStep |
Yes | integer |
Minimum: -1000000; Maximum: 1000000 |
candidate.alternatives[].scenario.volatilityPipsPerStep |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.alternatives[].scenario.liquidityWithdrawalPips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.alternatives[].scenario.oneSidedFlowPips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.alternatives[].scenario.gasIncreasePips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.alternatives[].scenario.oracleOutageStep |
No | integer |
Minimum: 0; Maximum: 364 |
candidate.alternatives[].scenario.historicalReturnPips |
No | Array of integer |
Min items: 1; Max items: 365 |
candidate.alternatives[].scenario.protocolFeePips |
No | integer |
Minimum: 0; Maximum: 1000000 |
candidate.alternatives[].scenario.platformFeePips |
No | integer |
Minimum: 0; Maximum: 1000000 |
candidate.alternatives[].scenario.unlocks |
Yes | Array of object |
Max items: 256 |
candidate.alternatives[].scenario.unlocks[].id |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,152}$ |
candidate.alternatives[].scenario.unlocks[].unlocksAt |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
candidate.alternatives[].scenario.unlocks[].tokenAmount |
Yes | string |
Pattern: ^[1-9][0-9]{0,77}$ |
candidate.alternatives[].scenario.unlocks[].recipientCategory |
Yes | string |
Allowed: TEAM, INVESTOR, COMMUNITY, TREASURY, ECOSYSTEM, OTHER |
candidate.alternatives[].scenario.unlocks[].expectedSaleParticipationPips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.alternatives[].scenario.unlocks[].confidencePips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.alternatives[].scenario.unlocks[].correlationGroup |
No | string |
Min length: 1; Max length: 120 |
candidate.alternatives[].scenario.unlocks[].evidenceHash |
No | string |
Pattern: ^0x[0-9a-fA-F]{64}$ |
candidate.schemaVersion |
Yes | Constant research-experiment-v1 |
— |
candidate.pathCount |
Yes | Constant 2000 |
— |
candidate.interpretation |
Yes | Constant CURRENT_DATA_HYPOTHETICAL_MODELED_STEPS |
— |
missingInputs |
Yes | Array of string |
Max items: 7 |
validationIssues |
Yes | Array of object |
Max items: 100 |
validationIssues[].path |
Yes | string |
Max length: 300 |
validationIssues[].message |
Yes | string |
Max length: 1000 |
unsupportedRequests |
Yes | Array of string |
Max items: 9 |
provenance |
Yes | Array of object |
Min items: 8; Max items: 8 |
provenance[].field |
Yes | string |
Allowed: objective, baselineScenario, seed, stepCount, startingPortfolioQuote, startingDepthQuote, startingInventoryPips, alternatives |
provenance[].basis |
Yes | string |
Allowed: USER_SUPPLIED_ASSUMPTION, MODEL_PROPOSED_HYPOTHESIS, MISSING |
requiredAcknowledgements |
Yes | Array of string |
Min items: 12; Max items: 12 |
financialAuthority |
Yes | Constant false |
— |
publicationAuthority |
Yes | Constant false |
— |
executionAuthorized |
Yes | Constant false |
— |
proposalHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.
Exact definition: #/components/schemas/ResearchPlanningProposal in the OpenAPI contract.