Moment · Schema
ReplacementCandidatesRequest
CompanyFixed IncomeBondsTradingMarket DataReference DataInvestment ManagementWealth ManagementBrokerageFinancial ServicesFintech
Properties
| Name | Type | Description |
|---|---|---|
| accounts | array | |
| limit | integer | The maximum number of replacement candidates to return. |
| order_id | string | The ID of the order to replace. |
| proposed_orders | array | |
| use_evals_as_orders | boolean | When true, use synthetic eval order book generated from price estimates instead of real market data. |
| account_constraint_relaxation | objectnull | Per-constraint relaxed bounds the solver used to reach the orders being replaced, keyed by the optimization account id (`account:sleeve`) that solved under them. Candidates are evaluated against these |
| valuation_config | object | Valuation configuration the caller resolved for the requesting org. When absent, the replacer falls back to its own org-based resolution. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/moment/main/json-schema/moment-replacement-candidates-request-schema.json",
"title": "ReplacementCandidatesRequest",
"x-generated": "2026-10-14",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/moment-portfolio-optimizer-api-openapi.yml#/components/schemas/ReplacementCandidatesRequest",
"type": "object",
"properties": {
"accounts": {
"type": "array",
"items": {
"$ref": "#/$defs/AccountOptimization"
},
"title": "Accounts"
},
"limit": {
"description": "The maximum number of replacement candidates to return.",
"type": "integer",
"default": 5,
"title": "Limit"
},
"order_id": {
"description": "The ID of the order to replace.",
"type": "string",
"title": "Order ID"
},
"proposed_orders": {
"type": "array",
"items": {
"$ref": "#/$defs/ProposedOrder"
},
"title": "Proposed Orders"
},
"use_evals_as_orders": {
"description": "When true, use synthetic eval order book generated from price estimates instead of real market data.",
"type": "boolean",
"default": false,
"title": "Use Evals As Orders"
},
"account_constraint_relaxation": {
"description": "Per-constraint relaxed bounds the solver used to reach the orders\nbeing replaced, keyed by the optimization account id\n(`account:sleeve`) that solved under them. Candidates are evaluated\nagainst these rather than the originals — the order under\nreplacement does not itself satisfy the original bound, so every\ncandidate would be rejected. Keyed per account because a bound\nrelaxed for one account does not hold for another.",
"type": [
"object",
"null"
],
"additionalProperties": {
"$ref": "#/$defs/ConstraintRelaxation"
}
},
"valuation_config": {
"description": "Valuation configuration the caller resolved for the requesting org.\nWhen absent, the replacer falls back to its own org-based\nresolution.",
"allOf": [
{
"$ref": "#/$defs/ValuationConfig"
}
],
"nullable": true
}
},
"required": [
"order_id",
"accounts",
"proposed_orders"
],
"$defs": {
"AccountOptimization": {
"type": "object",
"properties": {
"account_id": {
"type": "string",
"title": "Account ID"
},
"allow_rebalancing": {
"$ref": "#/$defs/AllowRebalancing",
"x-go-type-skip-optional-pointer": true
},
"allow_sell_universe_constraint_violations": {
"$ref": "#/$defs/AllowSellUniverseConstraintViolations",
"x-go-type-skip-optional-pointer": true
},
"assignment_date": {
"description": "The date on which the strategy was first deployed to the account.\nFor ladder policy constraints, this decides the starting date of the first bucket in the ladder.",
"type": "string",
"format": "date",
"title": "Assignment Date"
},
"blocking_group": {
"description": "Array of blocking group identifiers.",
"type": "array",
"items": {
"type": "string"
},
"default": [],
"title": "Blocking Group",
"x-go-type-skip-optional-pointer": true
},
"buy_objective_terms": {
"description": "The objective terms scoring every trade leg, buy and sell.",
"type": "array",
"items": {
"$ref": "#/$defs/ObjectiveTerm"
},
"default": [],
"x-go-type-skip-optional-pointer": true
},
"cash": {
"description": "Uninvested USD cash in the account. Shorthand for a USD holding of\nthe same quantity: the optimizer folds this amount into `holdings`\nas a USD position before solving. Mutually exclusive with an\nexplicit cash holding — requests that set `cash` and also include\na cash position in `holdings` are rejected.",
"allOf": [
{
"$ref": "#/$defs/Decimal"
}
],
"title": "Cash"
},
"cash_raise_request": {
"$ref": "#/$defs/CashRaiseRequest"
},
"cashflow_targets": {
"description": "The cashflow targets for the account.",
"type": "array",
"items": {
"$ref": "#/$defs/CashflowTarget"
},
"default": [],
"title": "Cashflow Targets",
"x-go-type-skip-optional-pointer": true
},
"cashflow_target_priority": {
"description": "Priority of the account's cashflow target floors. Omitted defaults to 2.",
"allOf": [
{
"$ref": "#/$defs/ConstraintPriority"
}
],
"default": 2
},
"custodian_account_id": {
"description": "The custodian-tracked account number (e.g. the Fidelity account\nnumber). Used to match risk controls whose entity_ids are keyed by\ncustodian account id rather than the Moment account id.",
"type": "string",
"title": "Custodian Account ID"
},
"customizations": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/schemas-Constraint"
},
"x-go-type-skip-optional-pointer": true
},
"desired_market_value": {
"description": "The sleeve target market value (target sleeve MV scaled by the account total MV). Null when DoD sleeve cash is enabled, in which case the consumer falls back to actual holdings + cash balance.",
"allOf": [
{
"$ref": "#/$defs/NullDecimal"
}
],
"title": "Desired Market Value",
"x-go-type-skip-optional-pointer": true
},
"federal_tax_rate": {
"description": "The federal tax rate for the account.",
"allOf": [
{
"$ref": "#/$defs/TaxRate"
}
],
"title": "Federal Tax Rate"
},
"fixed_cost_per_allocation": {
"description": "An optional fixed cost per allocation to apply to the optimization.",
"type": "number",
"minimum": 0,
"default": 0,
"title": "Fixed Cost Per Allocation"
},
"holdings": {
"description": "The holdings in the account.",
"type": "array",
"items": {
"$ref": "#/$defs/Holding"
},
"title": "Holdings"
},
"is_eligible_to_participate_in_block_trades": {
"description": "Whether the account is eligible to participate in block trades.",
"type": "boolean",
"default": true,
"title": "Is Eligible To Participate In Block Trades",
"x-go-type-skip-optional-pointer": true,
"x-omitempty": false
},
"local_tax_rate": {
"description": "The local tax rate for the account.",
"allOf": [
{
"$ref": "#/$defs/TaxRate"
}
],
"title": "Local Tax Rate"
},
"lot_targeting_asset_classes": {
"description": "Asset classes the account's custodian supports tax-lot targeting for. Absent means unknown, and every sell is lot-tagged as before; an empty list means none are supported.",
"type": "array",
"items": {
"$ref": "#/$defs/LotTargetingAssetClass"
},
"title": "Lot Targeting Asset Classes"
},
"max_rebalance_buys": {
"description": "The max number of buys that can occur in a rebalance.",
"type": "integer",
"minimum": 0,
"title": "Max Rebalance Buys"
},
"max_rebalance_market_value_pct_buys": {
"description": "The max percentage of the portfolio market value that can be repurchased in a rebalance, as a decimal fraction in [0,1].",
"type": "number",
"minimum": 0,
"maximum": 1,
"title": "Max Rebalance Market Value Percent Buys"
},
"max_rebalance_market_value_pct_sells": {
"description": "The max share of the portfolio's holdings plus cash that can be sold in a rebalance, as a decimal fraction in [0,1].",
"type": "number",
"minimum": 0,
"maximum": 1,
"title": "Max Rebalance Market Value Percent Sells"
},
"max_rebalance_sells": {
"description": "The max number of sells that can occur in a rebalance.",
"type": "integer",
"minimum": 0,
"title": "Max Rebalance Sells"
},
"minimum_order_increment": {
"description": "Account-level minimum trade quantization in absolute units (face for FI, shares for equity).\nCombined with each instrument's own min_increment via LCM, so the effective per-trade\nincrement is LCM(instrument_min_increment, minimum_order_increment).",
"type": [
"integer",
"null"
],
"minimum": 1,
"title": "Minimum Order Increment"
},
"objective_strategy": {
"description": "The objective strategy for the optimization.",
"allOf": [
{
"$ref": "#/$defs/ObjectiveStrategy"
}
],
"x-go-type-skip-optional-pointer": true
},
"orders": {
"description": "Orders from a prior proposal to preserve. Orders with lock=true will be passed through unchanged; the optimizer adjusts holdings/cash accordingly.",
"type": "array",
"items": {
"$ref": "#/$defs/Order"
},
"default": [],
"title": "Orders",
"x-go-type-skip-optional-pointer": true
},
"overrides": {
"description": "Declarative overrides applied to the account optimization before the solver model is built (e.g. security replacements that rewrite the tracking-error benchmark and the buyable universe). Distinct from `customizations`, which are solver constraints on the built model.\n",
"type": "array",
"items": {
"$ref": "#/$defs/Override"
},
"default": [],
"title": "Overrides",
"x-go-type-skip-optional-pointer": true
},
"proposal_action_targets": {
"description": "Per-lot or per-instrument LP variable targets derived from advisor proposal actions on this sleeve. Propman computes the target quantity per action; suboptimal fixes the corresponding LP variable via an equality constraint.",
"type": "array",
"items": {
"$ref": "#/$defs/ProposalActionTarget"
},
"default": [],
"title": "Proposal Action Targets",
"x-go-type-skip-optional-pointer": true
},
"wash_sale_restrictions": {
"description": "Per-account wash-sale restrictions forwarded from the accounts service. Suboptimal expands each into buy/sell LP constraints at solve time (instrument buy-block; per-lot sell-block for older-than-trigger loss lots). Empty unless the org has wash-sale prevention enabled.",
"type": "array",
"items": {
"$ref": "#/$defs/WashSaleRestriction"
},
"default": [],
"title": "Wash Sale Restrictions",
"x-go-type-skip-optional-pointer": true
},
"short_term_realized_gain_loss": {
"description": "Net short-term realized capital gain/loss YTD in dollars (settled + intraday). The optimizer derives remaining short-term budget from this and short_term_tax_budget.",
"type": "number",
"title": "Short Term Realized Gain Loss"
},
"long_term_realized_gain_loss": {
"description": "Net long-term realized capital gain/loss YTD in dollars (settled + intraday). The optimizer derives remaining long-term budget from this and long_term_tax_budget.",
"type": "number",
"title": "Long Term Realized Gain Loss"
},
"short_term_tax_budget": {
"description": "Advisor-set short-term tax budget in dollars for realized capital gains this year.",
"type": "number",
"title": "Short Term Tax Budget"
},
"long_term_tax_budget": {
"description": "Advisor-set long-term tax budget in dollars for realized capital gains this year.",
"type": "number",
"title": "Long Term Tax Budget"
},
"estimated_tax_bill_budget": {
"description": "Advisor-set estimated tax bill budget in dollars (cap on estimated taxes paid this year, accounting for tax rates and short-term losses offsetting long-term gains).",
"type": "number",
"title": "Estimated Tax Bill Budget"
},
"total_gains_tax_budget": {
"description": "Advisor-set total gain/loss budget in dollars for realized capital gains this year. Independent of the short-term and long-term tax budgets (not their sum) — a single cap on total realized gains.",
"type": "number",
"title": "Total Gains Tax Budget"
},
"tax_sensitivity": {
"description": "Advisor-set tax sensitivity, an integer from 0 (ignore taxes, minimize tracking error) to 100 (fully prioritize taxes). Scales how heavily the optimizer weights tax cost against tracking error.",
"type": "integer",
"minimum": 0,
"maximum": 100,
"title": "Tax Sensitivity"
},
"short_term_tax_rate": {
"description": "Combined effective short-term tax rate (federal + state + local) as a decimal fraction. Used to estimate the tax bill on short-term realized gains.",
"type": "number",
"minimum": 0,
"maximum": 1,
"title": "Short Term Tax Rate"
},
"long_term_tax_rate": {
"description": "Combined effective long-term tax rate (federal + state + local) as a decimal fraction. Used to estimate the tax bill on long-term realized gains.",
"type": "number",
"minimum": 0,
"maximum": 1,
"title": "Long Term Tax Rate"
},
"tax_budget_weight": {
"description": "This account entry's share of the parent account's tax budget, in [0,1]. Sleeves of one account are optimized as independent entries, so each gets a pro-rata slice (by market value) of the account-level tax headroom; the optimizer scales every derived tax-budget cap (short/long-term and estimated-tax-bill) by this weight. Defaults to 1.0 (the whole budget) for single-entry accounts and callers that don't split.",
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 1,
"title": "Tax Budget Weight"
},
"risk_group_id": {
"description": "The account's risk group, selecting its venue connectivity. Optional — omit, null, or empty to fall back to the organization's default risk group.",
"type": "string",
"title": "Risk Group Id",
"x-go-type-skip-optional-pointer": true
},
"state": {
"description": "The 2-letter US state code for the account holder. Optional —\nwhen null/absent, state-based tax math (cross-deductible-state\nlookups, US-territory checks, state-exempt-agency checks)\nfalls through to \"no state benefit\" and bonds are treated as\nfully taxable at the state level.",
"allOf": [
{
"$ref": "#/$defs/State"
}
],
"nullable": true,
"x-go-type-skip-optional-pointer": false
},
"state_tax_rate": {
"description": "The state tax rate for the account.",
"allOf": [
{
"$ref": "#/$defs/TaxRate"
}
],
"title": "State Tax Rate"
},
"strategy": {
"$ref": "#/$defs/StrategyUnion"
},
"tax_profile": {
"description": "Tax profile classification for the account. Defaults to us_taxable.",
"allOf": [
{
"$ref": "#/$defs/TaxProfile"
}
],
"default": "us_taxable",
"x-go-type-skip-optional-pointer": true
},
"custom_income_tax": {
"description": "Custom income tax rate as a decimal between 0 and 1. Only meaningful\nwhen tax_profile is custom_taxable or uk_taxable.",
"allOf": [
{
"$ref": "#/$defs/TaxRate"
}
],
"title": "Custom Income Tax",
"x-go-type-skip-optional-pointer": true
},
"custom_capital_gains_tax": {
"description": "Custom capital gains tax rate as a decimal between 0 and 1. Only\nmeaningful when tax_profile is custom_taxable or uk_taxable. Under\nuk_taxable this rate is overridden to zero for Gilts and QCBs.",
"allOf": [
{
"$ref": "#/$defs/TaxRate"
}
],
"title": "Custom Capital Gains Tax",
"x-go-type-skip-optional-pointer": true
},
"account_total_value": {
"description": "The whole account's value on every basis, with and without cash.\nRead only by validate-accounts, to build a `target` flavor's\ndenominator: `sleeve_target_allocation` times the entry matching\nthe flavor's `weight_basis` and `include_cash`. All three bases are\nrequired together so a flavor never divides a numerator on one\nbasis by a total on another.",
"allOf": [
{
"$ref": "#/$defs/AccountTotalValue"
}
],
"nullable": true,
"title": "Account Total Value"
},
"sleeve_target_allocation": {
"description": "This sleeve's target share of the account, as a fraction in [0,1].\nRead only by validate-accounts, to scale `account_total_value` into\na `target` flavor's denominator.",
"type": [
"number",
"null"
],
"format": "double",
"minimum": 0,
"maximum": 1,
"title": "Sleeve Target Allocation"
}
},
"required": [
"account_id",
"federal_tax_rate",
"state_tax_rate",
"local_tax_rate",
"holdings",
"strategy",
"assignment_date"
],
"title": "AccountOptimization"
},
"AccountTotalValue": {
"description": "An account's total value on each of the three valuation bases. Every\nbasis is required: a `target` flavor divides a numerator valued on its\nown basis by a total on the same basis.",
"type": "object",
"properties": {
"clean": {
"$ref": "#/$defs/BasisTotalValue"
},
"dirty": {
"$ref": "#/$defs/BasisTotalValue"
},
"par": {
"$ref": "#/$defs/BasisTotalValue"
}
},
"required": [
"clean",
"dirty",
"par"
],
"title": "AccountTotalValue"
},
"AllocationConstraint": {
"type": "object",
"properties": {
"id": {
"description": "Unique identifier for this constraint. Must match the `constraint_id` on the enclosing `ConstraintOperation`. Required.",
"type": "string",
"title": "ID"
},
"constraint_priority": {
"$ref": "#/$defs/ConstraintPriority"
},
"filter": {
"$ref": "#/$defs/FilterDictionary"
},
"max_market_value": {
"description": "The maximum market value for the allocation constraint, which can be specified instead of max_weight.",
"type": "number",
"format": "double",
"title": "Max Market Value"
},
"max_weight": {
"description": "The maximum weight for the allocation constraint. Bounded to [0, 1].",
"type": "number",
"format": "double",
"minimum": 0,
"maximum": 1,
"title": "Max Weight"
},
"min_market_value": {
"description": "The minimum market value for the allocation constraint, which can be specified instead of min_weight.",
"type": "number",
"format": "double",
"title": "Min Market Value"
},
"min_weight": {
"description": "The minimum weight for the allocation constraint. Bounded to [0, 1].",
"type": "number",
"format": "double",
"minimum": 0,
"maximum": 1,
"title": "Min Weight"
},
"name": {
"description": "Optional user-supplied display label for the constraint, shown in place of the generated description. Cosmetic only: never read by the solver and never part of the constraint's identity, so distinct constraints may share a name.",
"type": "string",
"maxLength": 200,
"title": "Name"
},
"rel_buffer": {
"description": "Relative buffer applied around the target. Half-open [0, 1).",
"type": "number",
"format": "double",
"minimum": 0,
"exclusiveMaximum": true,
"maximum": 1,
"default": 0.01,
"title": "Rel Buffer"
},
"scope": {
"$ref": "#/$defs/FilterDictionary"
},
"target_market_value": {
"description": "The target market value for the allocation constraint, which can be specified instead of target_weight.",
"type": "number",
"format": "double",
"title": "Target Market Value"
},
"target_weight": {
"description": "The target weight for the allocation constraint. Bounded to [0, 1].",
"type": "number",
"format": "double",
"minimum": 0,
"maximum": 1,
"title": "Target Weight"
},
"type": {
"type": "string",
"enum": [
"allocation"
],
"title": "Type"
}
},
"required": [
"filter",
"type"
],
"title": "AllocationConstraint"
},
"AllowRebalancing": {
"description": "A boolean flag to indicate if rebalancing is allowed in the optimization.",
"type": "boolean",
"default": false,
"title": "Allow Rebalancing"
},
"AllowSellUniverseConstraintViolations": {
"description": "A boolean flag to indicate if sells are allowed in the optimization. This will enable selling of securities that invalidate any `Universe` constraints.",
"type": "boolean",
"default": false,
"title": "Allow Sell Universe Constraint Violations"
},
"ApplicableSide": {
"description": "Which side(s) of a trade a constraint or filter applies to. Distinct from `Side`, which labels real executable order direction (`buy` or `sell` only); `ApplicableSide` adds `both` for cases like a universe filter that restricts buys, sells, or both.",
"type": "string",
"enum": [
"buy",
"sell",
"both"
],
"x-enum-varnames": [
"ApplicableSideBuy",
"ApplicableSideSell",
"ApplicableSideBoth"
],
"title": "ApplicableSide"
},
"AverageValueConstraint": {
"type": "object",
"properties": {
"id": {
"description": "Unique identifier for this constraint. Must match the `constraint_id` on the enclosing `ConstraintOperation`. Required.",
"type": "string",
"title": "ID"
},
"constraint_priority": {
"$ref": "#/$defs/ConstraintPriority"
},
"field": {
"description": "The field to apply the average value constraint to.",
"type": "string",
"title": "Field"
},
"max_average_value": {
"description": "The maximum average value for the field.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
],
"title": "Max Average Value"
},
"min_average_value": {
"description": "The minimum average value for the field.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
],
"title": "Min Average Value"
},
"name": {
"description": "Optional user-supplied display label for the constraint, shown in place of the generated description. Cosmetic only: never read by the solver and never part of the constraint's identity, so distinct constraints may share a name.",
"type": "string",
"maxLength": 200,
"title": "Name"
},
"scope": {
"$ref": "#/$defs/FilterDictionary"
},
"target_average_value": {
"description": "The target average value for the field.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
],
"title": "Target Average Value"
},
"type": {
"type": "string",
"enum": [
"average_value"
],
"title": "Type"
}
},
"required": [
"type",
"field"
],
"title": "AverageValueConstraint"
},
"BasisTotalValue": {
"description": "One valuation basis's total value, split by whether uninvested cash is\ncounted. A dollar of cash is one dollar of par, so only the securities\nterm moves between bases.",
"type": "object",
"properties": {
"with_cash": {
"description": "Total value including uninvested cash.",
"type": "number",
"format": "double",
"title": "With Cash"
},
"without_cash": {
"description": "Total value of held securities alone.",
"type": "number",
"format": "double",
"title": "Without Cash"
}
},
"required": [
"with_cash",
"without_cash"
],
"title": "BasisTotalValue"
},
"BuyUniverseConstraint": {
"description": "The BuyUniverseConstraint is a constraint that specifies the universe of instruments that can be bought in the account. Within the filter field, you can specify filters based on reference data fields and live fields (this includes: `order_price`, `order_ytw`, `tax_effective_limit_ytw`, `post_tax_limit_ytw`, `fixed_transaction_cost_in_yield`, and `fixed_transaction_cost_in_price`).",
"type": "object",
"properties": {
"id": {
"description": "Unique identifier for this constraint. Must match the `constraint_id` on the enclosing `ConstraintOperation`. Required.",
"type": "string",
"title": "ID"
},
"constraint_priority": {
"$ref": "#/$defs/ConstraintPriority"
},
"filter": {
"$ref": "#/$defs/FilterDictionary"
},
"name": {
"description": "Optional user-supplied display label for the constraint, shown in place of the generated description. Cosmetic only: never read by the solver and never part of the constraint's identity, so distinct constraints may share a name.",
"type": "string",
"maxLength": 200,
"title": "Name"
},
"scope": {
"$ref": "#/$defs/FilterDictionary"
},
"type": {
"type": "string",
"enum": [
"buy_universe"
],
"title": "Type"
}
},
"required": [
"type",
"filter"
],
"title": "BuyUniverseConstraint"
},
"CashRaiseRequest": {
"type": "object",
"properties": {
"min_raise_amount": {
"description": "The minimum amount of cash to raise.",
"$ref": "#/$defs/NonNegativeDecimal"
},
"raise_strategy": {
"description": "The strategy to use to raise cash. `maintain_compliance` will raise cash to maintain compliance with the existing constraints.",
"type": "string",
"enum": [
"maintain_compliance"
]
}
},
"required": [
"min_raise_amount",
"raise_strategy"
],
"title": "CashRaiseRequest"
},
"CashflowBandConstraint": {
"description": "Levels the recurring cashflow targets of every account on the strategy:\neach live bucket of a recurring target is held within\n±max_deviation_ratio of that target's post-trade mean bucket cashflow,\nin raw dollars, while the objective is still maximized. Buckets with\nan amount override are left out of the band, as are one_time targets\nand targets with fewer than two remaining buckets. Assigned accounts\ninherit it; per-account customizations may override or remove it by\nid.",
"type": "object",
"properties": {
"id": {
"description": "Unique identifier for this constraint. Must match the `constraint_id` on the enclosing `ConstraintOperation`. Required.",
"type": "string",
"title": "ID"
},
"constraint_priority": {
"description": "Same as ConstraintPriority, but omitted defaults to 1, so the band relaxes before the cashflow floors (tier 2).",
"allOf": [
{
"$ref": "#/$defs/ConstraintPriority"
}
],
"default": 1
},
"max_deviation_ratio": {
"description": "Half-width of the band as a fraction of the target's mean bucket, in (0, 1].",
"type": "number",
"format": "double",
"minimum": 0,
"exclusiveMinimum": true,
"maximum": 1,
"title": "Max Deviation Ratio"
},
"name": {
"description": "Optional user-supplied display label for the constraint, shown in place of the generated description. Cosmetic only: never read by the solver and never part of the constraint's identity, so distinct constraints may share a name.",
"type": "string",
"maxLength": 200,
"title": "Name"
},
"type": {
"type": "string",
"enum": [
"cashflow_band"
],
"title": "Type"
}
},
"required": [
"type",
"max_deviation_ratio"
],
"title": "CashflowBandConstraint"
},
"CashflowTarget": {
"type": "object",
"properties": {
"amount": {
"description": "The amount of cashflow to target for each bucket. Omit for no dollar floor (the maximize_cashflows input).",
"type": "number",
"format": "double",
"minimum": 0,
"title": "Amount"
},
"call_assumption": {
"description": "The call assumption of the cashflow target.",
"type": "string",
"enum": [
"maturity_date",
"next_call_date",
"workout_date"
],
"title": "Call Assumption"
},
"end_date": {
"description": "The end date of the cashflow target.",
"type": "string",
"format": "date",
"title": "End Date"
},
"frequency": {
"description": "The frequency of the cashflow target.",
"type": "string",
"enum": [
"monthly",
"bimonthly",
"quarterly",
"semiannually",
"annually",
"one_time"
],
"title": "Frequency"
},
"granularity": {
"description": "How long each bucket stays open, anchored on each frequency start. Omit for a bucket spanning the whole frequency period. Must not be wider than frequency; not allowed on one_time targets.",
"type": "string",
"enum": [
"monthly",
"bimonthly",
"quarterly",
"semiannually",
"annually"
],
"x-enum-varnames": [
"GranularityMonthly",
"GranularityBimonthly",
"GranularityQuarterly",
"GranularitySemiannually",
"GranularityAnnually"
],
"ti
# --- truncated at 32 KB (103 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/moment/refs/heads/main/json-schema/moment-replacement-candidates-request-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/moment-replacement-candidates-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.