Klineo/Docs
Open app ↗

API schemas

SavedResearchResult

All API schemas

object — Additional properties rejected

Field Required at this level Type Description and constraints
schemaVersion Yes Constant saved-research-result-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}$
resultVersion Yes string Pattern: ^0x[0-9a-f]{64}$
completedAt 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)))$
protocolHash Yes string Pattern: ^0x[0-9a-f]{64}$
report Yes object Additional properties rejected
report.schemaVersion Yes Constant agent-research-report-v1 —
report.organizationId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
report.runId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
report.protocolHash Yes string Pattern: ^0x[0-9a-f]{64}$
report.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)))$
report.status Yes string Allowed: ABSTAINED, PARTIAL, COMPLETED
report.comparison Yes object Additional properties rejected
report.comparison.schemaVersion Yes Constant research-comparison-v1 —
report.comparison.baselineTrialId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{0,159}$
report.comparison.objective Yes object Additional properties rejected
report.comparison.objective.metric Yes string Allowed: ENDING_VALUE_P50, MINIMUM_DEPTH_P5, GAS_COST_P50, DRAWDOWN_P95, RESERVE_BREACH_PROBABILITY
report.comparison.objective.direction Yes string Allowed: MAXIMIZE, MINIMIZE
report.comparison.context Yes At least one of: object; null —
report.comparison.context.anyOf[1].organizationId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
report.comparison.context.anyOf[1].issuerIntentId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
report.comparison.context.anyOf[1].issuerIntentResourceVersion Yes string Pattern: ^0x[0-9a-f]{64}$
report.comparison.context.anyOf[1].issuerIntentArtifactHash Yes string Pattern: ^0x[0-9a-f]{64}$
report.comparison.context.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)))$
report.comparison.context.anyOf[1].quoteSymbol Yes string Min length: 1; Max length: 256
report.comparison.context.anyOf[1].quoteAssetId Yes At least one of: string; null —
report.comparison.context.anyOf[1].quoteDecimals Yes At least one of: integer; null —
report.comparison.context.anyOf[1].seedPolicyVersion Yes string Min length: 1; Max length: 256
report.comparison.context.anyOf[1].horizonUnit Yes string Allowed: MODELED_STEPS, CALIBRATED_STEPS
report.comparison.context.anyOf[1].stepDurationSeconds Yes At least one of: integer; null —
report.comparison.context.anyOf[1].analysisBasis Yes string Allowed: CURRENT_DATA_HYPOTHETICAL, HISTORICAL_POINT_IN_TIME
report.comparison.context.anyOf[1].historicalAvailabilityEvidenceHash Yes At least one of: string; null —
report.comparison.status Yes string Allowed: BASELINE_UNAVAILABLE, COMPLETE, PARTIAL
report.comparison.eligibilityRule Yes Constant ADMITTED_INTENT_CONSTRAINTS_AND_RESERVE_BREACH_AT_MOST_100000_PIPS —
report.comparison.rankingScope Yes Constant WITHIN_SCENARIO_VARIANTS —
report.comparison.limitations Yes Array of string Min items: 6; Max items: 6
report.comparison.trials Yes Array of object Min items: 1; Max items: 4
report.comparison.trials[].trialId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{0,159}$
report.comparison.trials[].label Yes string Min length: 1; Max length: 160
report.comparison.trials[].state Yes string Allowed: QUEUED, RUNNING, COMPLETED, FAILED, CANCELLED
report.comparison.trials[].failureCode Yes At least one of: string; null —
report.comparison.trials[].admittedInputHash Yes At least one of: string; null —
report.comparison.trials[].resultArtifactHash Yes At least one of: string; null —
report.comparison.trials[].context Yes At least one of: object; null —
report.comparison.trials[].context.anyOf[1].organizationId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
report.comparison.trials[].context.anyOf[1].issuerIntentId Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
report.comparison.trials[].context.anyOf[1].issuerIntentResourceVersion Yes string Pattern: ^0x[0-9a-f]{64}$
report.comparison.trials[].context.anyOf[1].issuerIntentArtifactHash Yes string Pattern: ^0x[0-9a-f]{64}$
report.comparison.trials[].context.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)))$
report.comparison.trials[].context.anyOf[1].quoteSymbol Yes string Min length: 1; Max length: 256
report.comparison.trials[].context.anyOf[1].quoteAssetId Yes At least one of: string; null —
report.comparison.trials[].context.anyOf[1].quoteDecimals Yes At least one of: integer; null —
report.comparison.trials[].context.anyOf[1].seedPolicyVersion Yes string Min length: 1; Max length: 256
report.comparison.trials[].context.anyOf[1].horizonUnit Yes string Allowed: MODELED_STEPS, CALIBRATED_STEPS
report.comparison.trials[].context.anyOf[1].stepDurationSeconds Yes At least one of: integer; null —
report.comparison.trials[].context.anyOf[1].analysisBasis Yes string Allowed: CURRENT_DATA_HYPOTHETICAL, HISTORICAL_POINT_IN_TIME
report.comparison.trials[].context.anyOf[1].historicalAvailabilityEvidenceHash Yes At least one of: string; null —
report.comparison.trials[].admittedInput Yes At least one of: object; null —
report.comparison.trials[].admittedInput.anyOf[1].schemaVersion Yes Constant simulation-study-input-snapshot-v1 —
report.comparison.trials[].admittedInput.anyOf[1].engineVersion Yes Constant digital-twin-pcg64-fixed-v2 —
report.comparison.trials[].admittedInput.anyOf[1].seed Yes string Min length: 1; Max length: 256
report.comparison.trials[].admittedInput.anyOf[1].pathCount Yes At least one of: Constant 2000; Constant 10000 —
report.comparison.trials[].admittedInput.anyOf[1].stepCount Yes integer Minimum: 1; Maximum: 365
report.comparison.trials[].admittedInput.anyOf[1].targetTradeSizeQuote Yes string Pattern: ^[1-9][0-9]*$
report.comparison.trials[].admittedInput.anyOf[1].startingPortfolioQuote Yes string Pattern: ^[1-9][0-9]*$
report.comparison.trials[].admittedInput.anyOf[1].startingDepthQuote Yes string Pattern: ^[1-9][0-9]*$
report.comparison.trials[].admittedInput.anyOf[1].startingInventoryPips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario Yes object Additional properties rejected
report.comparison.trials[].admittedInput.anyOf[1].scenario.id Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$
report.comparison.trials[].admittedInput.anyOf[1].scenario.name Yes string Min length: 3; Max length: 160
report.comparison.trials[].admittedInput.anyOf[1].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
report.comparison.trials[].admittedInput.anyOf[1].scenario.driftPipsPerStep Yes integer Minimum: -1000000; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario.volatilityPipsPerStep Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario.liquidityWithdrawalPips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario.oneSidedFlowPips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario.gasIncreasePips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario.oracleOutageStep No integer Minimum: 0; Maximum: 364
report.comparison.trials[].admittedInput.anyOf[1].scenario.historicalReturnPips No Array of integer Min items: 1; Max items: 365
report.comparison.trials[].admittedInput.anyOf[1].scenario.protocolFeePips No integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario.platformFeePips No integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario.unlocks Yes Array of object Max items: 256
report.comparison.trials[].admittedInput.anyOf[1].scenario.unlocks[].id Yes string Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,152}$
report.comparison.trials[].admittedInput.anyOf[1].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)))$
report.comparison.trials[].admittedInput.anyOf[1].scenario.unlocks[].tokenAmount Yes string Pattern: ^[1-9][0-9]*$
report.comparison.trials[].admittedInput.anyOf[1].scenario.unlocks[].recipientCategory Yes string Allowed: TEAM, INVESTOR, COMMUNITY, TREASURY, ECOSYSTEM, OTHER
report.comparison.trials[].admittedInput.anyOf[1].scenario.unlocks[].expectedSaleParticipationPips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario.unlocks[].confidencePips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].scenario.unlocks[].correlationGroup No string Min length: 1; Max length: 120
report.comparison.trials[].admittedInput.anyOf[1].scenario.unlocks[].evidenceHash No string Pattern: ^0x[0-9a-fA-F]{64}$
report.comparison.trials[].admittedInput.anyOf[1].variants Yes Array of object Min items: 5; Max items: 5
report.comparison.trials[].admittedInput.anyOf[1].variants[].kind Yes string Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY
report.comparison.trials[].admittedInput.anyOf[1].variants[].requiredCapitalQuote Yes string Pattern: ^(0|[1-9][0-9]*)$
report.comparison.trials[].admittedInput.anyOf[1].variants[].deployableCapitalQuote Yes string Pattern: ^(0|[1-9][0-9]*)$
report.comparison.trials[].admittedInput.anyOf[1].variants[].stableReserveQuote Yes string Pattern: ^(0|[1-9][0-9]*)$
report.comparison.trials[].admittedInput.anyOf[1].variants[].emergencyReserveQuote Yes string Pattern: ^(0|[1-9][0-9]*)$
report.comparison.trials[].admittedInput.anyOf[1].variants[].rangeWidthPips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].variants[].expectedSlippagePips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].variants[].expectedFeeIncomeLowQuote Yes string Pattern: ^(0|[1-9][0-9]*)$
report.comparison.trials[].admittedInput.anyOf[1].variants[].expectedFeeIncomeHighQuote Yes string Pattern: ^(0|[1-9][0-9]*)$
report.comparison.trials[].admittedInput.anyOf[1].variants[].inventoryExposurePips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].variants[].maximumDailyTurnoverPips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].admittedInput.anyOf[1].variants[].satisfiesIntent Yes boolean —
report.comparison.trials[].admittedInput.anyOf[1].variants[].reasons Yes Array of string Max items: 64
report.comparison.trials[].status Yes string Allowed: PENDING, FAILED, CANCELLED, INVALID, INCOMPATIBLE, BASELINE_UNAVAILABLE, COMPARABLE
report.comparison.trials[].reasons Yes Array of string Max items: 16
report.comparison.trials[].warnings Yes Array of string Max items: 64
report.comparison.trials[].variants Yes Array of object Max items: 5
report.comparison.trials[].variants[].variant Yes string Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY
report.comparison.trials[].variants[].capitalPlan Yes object Additional properties rejected
report.comparison.trials[].variants[].capitalPlan.kind Yes string Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY
report.comparison.trials[].variants[].capitalPlan.requiredCapitalQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].capitalPlan.deployableCapitalQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].capitalPlan.stableReserveQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].capitalPlan.emergencyReserveQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].capitalPlan.rangeWidthPips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].capitalPlan.expectedSlippagePips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].capitalPlan.expectedFeeIncomeLowQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].capitalPlan.expectedFeeIncomeHighQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].capitalPlan.inventoryExposurePips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].capitalPlan.maximumDailyTurnoverPips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].capitalPlan.satisfiesIntent Yes boolean —
report.comparison.trials[].variants[].capitalPlan.reasons Yes Array of string Max items: 64
report.comparison.trials[].variants[].outcomes Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.variant Yes string Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY
report.comparison.trials[].variants[].outcomes.endingValueQuote Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.endingValueQuote.p5 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.endingValueQuote.p25 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.endingValueQuote.p50 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.endingValueQuote.p75 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.endingValueQuote.p95 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.turnoverQuote Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.turnoverQuote.p5 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.turnoverQuote.p25 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.turnoverQuote.p50 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.turnoverQuote.p75 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.turnoverQuote.p95 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.gasCostQuote Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.gasCostQuote.p5 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.gasCostQuote.p25 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.gasCostQuote.p50 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.gasCostQuote.p75 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.gasCostQuote.p95 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.feeIncomeQuote Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.feeIncomeQuote.p5 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.feeIncomeQuote.p25 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.feeIncomeQuote.p50 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.feeIncomeQuote.p75 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.feeIncomeQuote.p95 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.protocolFeesQuote Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.protocolFeesQuote.p5 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.protocolFeesQuote.p25 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.protocolFeesQuote.p50 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.protocolFeesQuote.p75 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.protocolFeesQuote.p95 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.platformFeesQuote Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.platformFeesQuote.p5 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.platformFeesQuote.p25 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.platformFeesQuote.p50 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.platformFeesQuote.p75 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.platformFeesQuote.p95 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.minimumDepthQuote Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.minimumDepthQuote.p5 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.minimumDepthQuote.p25 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.minimumDepthQuote.p50 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.minimumDepthQuote.p75 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.minimumDepthQuote.p95 Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.slippagePips Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.slippagePips.p5 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.slippagePips.p25 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.slippagePips.p50 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.slippagePips.p75 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.slippagePips.p95 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.drawdownPips Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.drawdownPips.p5 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.drawdownPips.p25 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.drawdownPips.p50 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.drawdownPips.p75 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.drawdownPips.p95 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.inventoryPips Yes object Additional properties rejected
report.comparison.trials[].variants[].outcomes.inventoryPips.p5 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.inventoryPips.p25 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.inventoryPips.p50 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.inventoryPips.p75 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.inventoryPips.p95 Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.reserveBreachProbabilityPips Yes integer Minimum: 0; Maximum: 1000000
report.comparison.trials[].variants[].outcomes.drivers Yes Array of object Max items: 7
report.comparison.trials[].variants[].outcomes.drivers[].driver Yes string Allowed: PRICE_PATH, VOLATILITY, FLOW, LIQUIDITY, UNLOCK, GAS, RESERVE
report.comparison.trials[].variants[].outcomes.drivers[].impactQuote Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].outcomes.drivers[].evidence Yes string Max length: 1200
report.comparison.trials[].variants[].outcomes.drivers[].method Yes Constant DETERMINISTIC_COUNTERFACTUAL_DELTA_V1 —
report.comparison.trials[].variants[].eligible Yes boolean —
report.comparison.trials[].variants[].ineligibilityReasons Yes Array of string Max items: 4
report.comparison.trials[].variants[].differences Yes Array of object Max items: 51
report.comparison.trials[].variants[].differences[].metric Yes string Allowed: endingValueQuote, turnoverQuote, gasCostQuote, feeIncomeQuote, protocolFeesQuote, platformFeesQuote, minimumDepthQuote, slippagePips, drawdownPips, inventoryPips, reserveBreachProbabilityPips
report.comparison.trials[].variants[].differences[].percentile Yes At least one of: string; null —
report.comparison.trials[].variants[].differences[].unit Yes string Allowed: VERIFIED_QUOTE_ASSET_ATOMIC, ISSUER_INTENT_QUOTE_ATOMIC, PIPS_POINT_DIFFERENCE
report.comparison.trials[].variants[].differences[].baseline Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].differences[].scenario Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.comparison.trials[].variants[].differences[].delta Yes string Pattern: ^-?(0|[1-9][0-9]{0,78})$
report.comparison.trials[].variants[].differences[].interpretation Yes string Allowed: DIFFERENCE_OF_MARGINAL_PERCENTILES, DIFFERENCE_OF_PROBABILITIES
report.comparison.trials[].ranking Yes object Additional properties rejected
report.comparison.trials[].ranking.status Yes string Allowed: BLOCKED, NO_ELIGIBLE_RECOMMENDATION, RANKED
report.comparison.trials[].ranking.reason Yes At least one of: string; null —
report.comparison.trials[].ranking.entries Yes Array of object Max items: 5
report.comparison.trials[].ranking.entries[].variant Yes string Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY
report.comparison.trials[].ranking.entries[].rank Yes integer Minimum: 1; Maximum: 5
report.comparison.trials[].ranking.entries[].objectiveValue Yes string Pattern: ^-?(0|[1-9][0-9]{0,77})$
report.findings Yes Array of object Max items: 32
report.findings[].id Yes string Pattern: ^finding-[a-z0-9-]+$; Max length: 120
report.findings[].kind Yes string Allowed: SCOPE, ANALYSIS_BASIS, DISPOSITION, TRIAL, ELIGIBILITY, ADVERSE_OUTCOME, LIMITATION, METRIC_EXPLANATION
report.findings[].mandatory Yes boolean —
report.findings[].severity Yes string Allowed: INFO, WARNING
report.findings[].summary Yes string Min length: 1; Max length: 1200
report.findings[].trialId Yes At least one of: string; null —
report.nextChecks Yes Array of string Max items: 5
report.financialAuthority Yes Constant false —
report.publicationAuthority Yes Constant false —
applicability Yes object Additional properties rejected
applicability.scope Yes Constant ISSUER_INTENT_VERSION_ONLY —
applicability.status Yes string Allowed: SAME_SUBJECT_VERSION, SUBJECT_CHANGED, SUBJECT_UNAVAILABLE
applicability.checkedAt 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)))$
applicability.savedSubjectVersion Yes string Pattern: ^0x[0-9a-f]{64}$
applicability.currentSubjectVersion Yes At least one of: string; null —

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