Klineo/Docs
Open app ↗

API schemas

ResearchCandidateDecisionPack

All API schemas

object — Additional properties rejected

Field Required at this level Type Description and constraints
schemaVersion Yes Constant decision-pack-v2 —
organizationId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
packId Yes string Pattern: ^decisionpack_[a-f0-9]{32}$
sequence Yes string Pattern: ^[1-9][0-9]{0,17}$
resourceVersion Yes string Pattern: ^0x[0-9a-f]{64}$
createdAt 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)))$
recordedAt 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)))$
state Yes string Allowed: DRAFT, READY_FOR_REVIEW, DECISION_RECORDED, FOLLOW_UP_DUE, CLOSED, SUPERSEDED
scope Yes Constant RESEARCH_CANDIDATE_REVIEW —
coverage Yes Constant PARTIAL —
question Yes string Min length: 3; Max length: 2000
project Yes object Additional properties rejected
project.projectId Yes string Pattern: ^project_[0-9a-f]{32}$
project.observationSequence Yes string Pattern: ^[1-9][0-9]{0,17}$
project.resourceVersion Yes string Pattern: ^0x[0-9a-f]{64}$
healthReport Yes At least one of: object; null —
healthReport.anyOf[1].question Yes string Min length: 3; Max length: 2000
healthReport.anyOf[1].relation Yes Constant SUPPORTING_EVIDENCE_ONLY —
healthReport.anyOf[1].runId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
healthReport.anyOf[1].resultVersion Yes string Pattern: ^0x[0-9a-f]{64}$
healthReport.anyOf[1].captureHash Yes string Pattern: ^0x[0-9a-f]{64}$
healthReport.anyOf[1].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)))$
healthReport.anyOf[1].status Yes string Allowed: PARTIAL, ABSTAINED
assumptions Yes object Additional properties rejected
assumptions.version Yes string Pattern: ^0x[0-9a-f]{64}$
assumptions.items Yes Array of string Max items: 10
references Yes object Additional properties rejected
references.baselineStudy Yes object Additional properties rejected
references.baselineStudy.kind Yes Constant RESEARCH_TRIAL —
references.baselineStudy.runId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
references.baselineStudy.protocolHash Yes string Pattern: ^0x[0-9a-f]{64}$
references.baselineStudy.trialKey Yes string Allowed: baseline, alternative-1, alternative-2, alternative-3
references.baselineStudy.inputHash Yes string Pattern: ^0x[0-9a-f]{64}$
references.baselineStudy.artifactHash Yes At least one of: string; null —
references.baselineStudy.state Yes string Allowed: QUEUED, RUNNING, COMPLETED, FAILED, CANCELLED
references.baselineStudy.recordedAt Yes At least one of: string; null —
references.baselineStudy.failureCode Yes At least one of: string; null —
references.alternativeStudies Yes Array of object Max items: 3
references.alternativeStudies[].kind Yes Constant RESEARCH_TRIAL —
references.alternativeStudies[].runId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
references.alternativeStudies[].protocolHash Yes string Pattern: ^0x[0-9a-f]{64}$
references.alternativeStudies[].trialKey Yes string Allowed: baseline, alternative-1, alternative-2, alternative-3
references.alternativeStudies[].inputHash Yes string Pattern: ^0x[0-9a-f]{64}$
references.alternativeStudies[].artifactHash Yes At least one of: string; null —
references.alternativeStudies[].state Yes string Allowed: QUEUED, RUNNING, COMPLETED, FAILED, CANCELLED
references.alternativeStudies[].recordedAt Yes At least one of: string; null —
references.alternativeStudies[].failureCode Yes At least one of: string; null —
references.proposalReview Yes At least one of: object; null —
references.proposalReview.anyOf[1].kind Yes Constant CANDIDATE_REVIEW —
references.proposalReview.anyOf[1].runId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
references.proposalReview.anyOf[1].resultVersion Yes string Pattern: ^0x[0-9a-f]{64}$
references.proposalReview.anyOf[1].captureHash Yes string Pattern: ^0x[0-9a-f]{64}$
references.proposalReview.anyOf[1].contentHash Yes string Pattern: ^0x[0-9a-f]{64}$
references.proposalReview.anyOf[1].reviewedPackResourceVersion Yes string Pattern: ^0x[0-9a-f]{64}$
references.proposalReview.anyOf[1].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)))$
references.proposalReview.anyOf[1].status Yes Constant PARTIAL —
references.proposalReview.anyOf[1].relation Yes Constant ANALYSIS_REVIEW_ONLY —
references.treasuryProjection Yes null —
references.commercialOrder Yes null —
unsupportedReferences Yes At least one of: Array of No value allowed; Array of No value allowed —
decision Yes At least one of: object; null —
decision.anyOf[1].choice Yes string Allowed: DO_NOTHING, REQUEST_MORE_EVIDENCE, TAKE_TO_SEPARATE_APPROVAL
decision.anyOf[1].rationale Yes string Min length: 1; Max length: 4000
decision.anyOf[1].recordedBy Yes string Format: uuid; Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
decision.anyOf[1].recordedAt 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)))$
decision.anyOf[1].followUpAt Yes At least one of: string; null —
closure Yes At least one of: object; null —
closure.anyOf[1].note Yes string Min length: 1; Max length: 4000
closure.anyOf[1].recordedBy Yes string Format: uuid; Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
closure.anyOf[1].recordedAt 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)))$
supersededBy Yes At least one of: string; null —
financialAuthority Yes Constant false —
publicationAuthority Yes Constant false —
contentHash Yes string Pattern: ^0x[0-9a-f]{64}$
sourceAssociation Yes object Additional properties rejected
sourceAssociation.relation Yes Constant USER_SELECTED_RESEARCH_CONTEXT —
sourceAssociation.assertedBy Yes string Format: uuid; Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
sourceAssociation.assertedAt 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)))$
sourceAssociation.ownershipVerified Yes Constant false —
sourceAssociation.quoteUnitsVerified Yes Constant false —
research Yes object Additional properties rejected
research.runId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
research.resultVersion Yes string Pattern: ^0x[0-9a-f]{64}$
research.protocolHash Yes string Pattern: ^0x[0-9a-f]{64}$
research.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)))$
research.issuerIntent Yes object Additional properties rejected
research.issuerIntent.id Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
research.issuerIntent.resourceVersion Yes string Pattern: ^0x[0-9a-f]{64}$
research.issuerIntent.artifactHash Yes string Pattern: ^0x[0-9a-f]{64}$
research.question Yes string Min length: 3; Max length: 2000
research.relation Yes Constant SUPPORTING_EVIDENCE_ONLY —
research.objective Yes object Additional properties rejected
research.objective.metric Yes string Allowed: ENDING_VALUE_P50, MINIMUM_DEPTH_P5, GAS_COST_P50, DRAWDOWN_P95, RESERVE_BREACH_PROBABILITY
research.objective.direction Yes string Allowed: MAXIMIZE, MINIMIZE
research.comparisonStatus Yes string Allowed: BASELINE_UNAVAILABLE, COMPLETE, PARTIAL
research.quote Yes object Additional properties rejected
research.quote.symbol Yes string Max length: 256
research.quote.assetId Yes null —
research.quote.decimals Yes null —
research.quote.unit Yes Constant ISSUER_INTENT_QUOTE_ATOMIC —
research.limitations Yes Array of string Min items: 6; Max items: 6
research.trials Yes Array of object Min items: 1; Max items: 4
research.trials[].reference Yes object Additional properties rejected
research.trials[].reference.kind Yes Constant RESEARCH_TRIAL —
research.trials[].reference.runId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
research.trials[].reference.protocolHash Yes string Pattern: ^0x[0-9a-f]{64}$
research.trials[].reference.trialKey Yes string Allowed: baseline, alternative-1, alternative-2, alternative-3
research.trials[].reference.inputHash Yes string Pattern: ^0x[0-9a-f]{64}$
research.trials[].reference.artifactHash Yes At least one of: string; null —
research.trials[].reference.state Yes string Allowed: QUEUED, RUNNING, COMPLETED, FAILED, CANCELLED
research.trials[].reference.recordedAt Yes At least one of: string; null —
research.trials[].reference.failureCode Yes At least one of: string; null —
research.trials[].label Yes string Min length: 1; Max length: 160
research.trials[].comparisonStatus Yes string Allowed: PENDING, FAILED, CANCELLED, INVALID, INCOMPATIBLE, BASELINE_UNAVAILABLE, COMPARABLE
research.trials[].reasons Yes Array of string Max items: 16
research.trials[].warningCount Yes integer Minimum: 0; Maximum: 64
research.trials[].selected Yes At least one of: object; null —
research.trials[].selected.anyOf[1].variant Yes string Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY
research.trials[].selected.anyOf[1].eligible Yes boolean —
research.trials[].selected.anyOf[1].ineligibilityReasons Yes Array of string Max items: 4
candidate Yes object Additional properties rejected
candidate.selectedVariant Yes string Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY
candidate.capitalPlan Yes object Additional properties rejected
candidate.capitalPlan.kind Yes string Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY
candidate.capitalPlan.requiredCapitalQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
candidate.capitalPlan.deployableCapitalQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
candidate.capitalPlan.stableReserveQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
candidate.capitalPlan.emergencyReserveQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
candidate.capitalPlan.rangeWidthPips Yes integer Minimum: 0; Maximum: 1000000
candidate.capitalPlan.expectedSlippagePips Yes integer Minimum: 0; Maximum: 1000000
candidate.capitalPlan.expectedFeeIncomeLowQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
candidate.capitalPlan.expectedFeeIncomeHighQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
candidate.capitalPlan.inventoryExposurePips Yes integer Minimum: 0; Maximum: 1000000
candidate.capitalPlan.maximumDailyTurnoverPips Yes integer Minimum: 0; Maximum: 1000000
candidate.capitalPlan.satisfiesIntent Yes boolean —
candidate.capitalPlan.reasons Yes Array of string Max items: 64
candidate.baselineEligible Yes boolean —
candidate.status Yes string Allowed: BLOCKED_BASELINE_UNAVAILABLE, BLOCKED_BASELINE_INELIGIBLE, INCOMPLETE_ALTERNATIVES, INELIGIBLE_IN_ALTERNATIVES, ELIGIBLE_IN_CAPTURED_SCENARIOS
candidate.rankingScope Yes Constant WITHIN_SCENARIO_VARIANTS —

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/ResearchCandidateDecisionPack in the OpenAPI contract.