openapi: 3.2.0 info: title: Account Management Sleeves API description: Moment's Account Management API allows Clients to manage their accounts and associated data. version: 1.0.0 contact: name: Moment Support email: support@withmoment.com url: https://withmoment.com/support servers: - url: https://live.moment-api.com - url: https://paper.moment-api.com tags: - name: Sleeves paths: /v1/account/{account_id}/sleeve/: parameters: - name: account_id in: path required: true description: Account ID schema: type: string post: tags: - Sleeves summary: Create a sleeve within an account operationId: createSleeve requestBody: description: Initial sleeve parameters content: application/json: schema: properties: name: description: A descriptive name for the sleeve type: string allocation_basis: description: The basis for calculating the allocation of the sleeve. default: weight $ref: '#/components/schemas/AllocationBasis' priority: description: The priority in which cash is allocated to sleeves based on their target allocations. Lower values are allocated first. type: integer default: 0 min_allocation: description: The lowest proportion of the total market value of the account's non-cash holdings we'd like assigned to this sleeve allOf: - $ref: '#/components/schemas/Decimal' target_allocation: description: The desired proportion of the total market value of the account's non-cash holdings we'd like assigned to this sleeve allOf: - $ref: '#/components/schemas/Decimal' max_allocation: description: The highest proportion of the total market value of the account's non-cash holdings we'd like assigned to this sleeve allOf: - $ref: '#/components/schemas/Decimal' required_market_value: description: An optional absolute floor, in account currency (USD), on the sleeve's target market value. When omitted, no market value floor is applied. allOf: - $ref: '#/components/schemas/Decimal' is_managed: description: Whether the advisor manages this sleeve. Managed sleeves are billed, count toward the account's managed value and are optimized; unmanaged sleeves are excluded from all three. Defaults to true. A sleeve created with a model assignment cannot be unmanaged. type: boolean default: true model_assignment: $ref: '#/components/schemas/ModelAssignment' extra: description: Arbitrary user-specified sleeve metadata type: object additionalProperties: type: string client_id: description: An optional caller-supplied external identifier for the sleeve. Must be unique within the account. When omitted, it defaults to the generated sleeve_id. type: string required: - name - min_allocation - target_allocation - max_allocation - extra required: true responses: '201': description: Sleeve created content: application/json: schema: type: object properties: sleeve_id: description: A unique identifier generated by the server type: string client_id: description: The caller-supplied external identifier for the sleeve, or the generated sleeve_id when none was supplied. type: string message: type: string required: - sleeve_id - client_id - message example: sleeve_id: slv_01JBFQZXMWZ08XDMTG08P2Z4XT client_id: slv_01JBFQZXMWZ08XDMTG08P2Z4XT message: Sleeve created. '400': description: Invalid request parameters, or accounts-api refused the sleeve because its target does not fit the account's remaining allocation. On a refusal, error_details.allocation_sum carries the account's AllocationSum as computed before the write, so a caller can show how much room is left. content: application/json: schema: $ref: '#/components/schemas/CreateSleeveError' '409': description: A sleeve with the same client_id or name already exists in the account. content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' /v1/account/{account_id}/sleeve/{sleeve_id}/: parameters: - name: account_id in: path required: true description: Account ID schema: type: string - name: sleeve_id in: path required: true description: Sleeve ID schema: type: string patch: tags: - Sleeves summary: Update a sleeve operationId: updateSleeve requestBody: description: Initial sleeve parameters content: application/json: schema: properties: name: description: A descriptive name for the sleeve type: string allocation_basis: $ref: '#/components/schemas/AllocationBasis' priority: description: The priority in which cash is allocated to sleeves based on their target type: integer min_allocation: description: The lowest proportion of the total market value of the account's non-cash holdings we'd like assigned to this sleeve type: number format: double target_allocation: description: The desired proportion of the total market value of the account's non-cash holdings we'd like assigned to this sleeve type: number format: double max_allocation: description: The highest proportion of the total market value of the account's non-cash holdings we'd like assigned to this sleeve type: number format: double required_market_value: description: An optional absolute floor, in account currency (USD), on the sleeve's target market value. When omitted, no market value floor is applied. type: number format: double is_managed: description: Whether the advisor manages this sleeve. Managed sleeves are billed, count toward the account's managed value and are optimized; unmanaged sleeves are excluded from all three. Left unchanged when omitted. A sleeve holding a strategy cannot be unmanaged, and the funding sleeve is always managed. type: boolean extra: description: Arbitrary user-specified sleeve metadata type: object additionalProperties: type: string required: true responses: '200': description: Sleeve updated content: application/json: schema: type: object properties: message: type: string sleeve_id: type: string required: - message - sleeve_id example: message: Sleeve updated. sleeve_id: slv_123 '400': description: Invalid request parameters content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' '404': description: Account or sleeve not found content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' delete: tags: - Sleeves summary: Delete a sleeve operationId: deleteSleeve responses: '204': description: Sleeve deleted '400': description: Invalid request parameters content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' '404': description: Account or sleeve not found content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' /v1/account/{account_id}/sleeve/{sleeve_id}/assign-lots/: parameters: - name: account_id in: path required: true description: Account ID schema: type: string - name: sleeve_id in: path required: true description: Sleeve ID schema: type: string put: tags: - Sleeves summary: Specify which lots are assigned to a sleeve operationId: assignLotsToSleeve requestBody: description: Lot IDs of lots that are assigned to this sleeve content: application/json: schema: properties: lots: description: Array of lot IDs type: array items: type: string required: - lots responses: '204': description: Lots assigned to sleeve '400': description: Invalid request parameters content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' '404': description: Account or sleeve not found content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' /v1/account/{account_id}/sleeve/{sleeve_id}/model/: parameters: - name: account_id in: path required: true description: Account ID schema: type: string - name: sleeve_id in: path required: true description: Sleeve ID schema: type: string put: tags: - Sleeves summary: Assigns a sleeve to a model operationId: assignSleeveToModel requestBody: description: The model, assignment_date, cashflow_targets, and customizations to assign to the sleeve content: application/json: schema: type: object required: - model_id - assignment_date - customizations properties: model_id: type: string description: The ID of the model to of which the sleeve should be assigned assignment_date: type: string format: date description: Assignment dates are used to align ladders and determine grace periods for the first ladder bucket before dynamic ladder rebalancing kicks in customizations: $ref: '#/components/schemas/Customizations' meta: type: object description: Arbitrary key-value store for additional metadata additionalProperties: true rebalance_strategy: $ref: '#/components/schemas/RebalanceStrategy' cashflow_targets: type: array items: $ref: '#/components/schemas/CashflowTarget' responses: '204': description: Sleeve assigned to model '400': description: Invalid request parameters content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' '404': description: Account or sleeve not found content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' delete: tags: - Sleeves summary: Unassigns a sleeve from a model operationId: unassignSleeveFromModel responses: '204': description: Sleeve unassigned from model '400': description: Invalid request parameters content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' '404': description: Account or sleeve not found content: application/json: schema: $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' components: schemas: RebalanceStrategy: type: string description: 'The rebalance strategy for the sleeve. Determines how and when the sleeve is rebalanced. - unspecified: The rebalance strategy is not set. - never: Disables all rebalancing. - violations_only: Only rebalances when there are violations. - enabled: Enables regular rebalancing.' enum: - unspecified - never - violations_only - enabled AllocationSumBase: type: object properties: managed_target_sum: type: string description: 'The sum of target_allocation over the sleeves in included_sleeve_ids: standard, managed, non-default, non-transitioning, weight-basis sleeves that carry weights.' buffer_cash_target_percent: type: string description: The account's buffer_cash_target_percent setting. Omitted when the account has none. total: type: string description: managed_target_sum plus buffer_cash_target_percent (0 when unset). included_sleeve_ids: type: array items: type: string description: The sleeves summed into managed_target_sum. notional_sleeve_ids: type: array items: type: string description: The market-value-basis sleeves excluded from the sum. notional_total: type: string description: The dollar targets of notional_sleeve_ids summed, in account currency (USD). template_owned: type: boolean description: Whether some sleeve on the account carries a live asset allocation template id (one that is not transitioning). Under-allocation is a violation only on a template-owned account; over-allocation always is. violation: type: boolean description: 'accounts-api''s policy result: over_allocated, or under_allocated on a template-owned account. Render warnings from this flag rather than re-deriving the rule; the guarded sleeve writes refuse on it.' required: - managed_target_sum - total - included_sleeve_ids - notional_sleeve_ids - notional_total - template_owned - violation AllocationSumUnderAllocated: allOf: - $ref: '#/components/schemas/AllocationSumBase' - type: object properties: verdict: type: string enum: - under_allocated remaining: type: string description: How far total falls short of 1. required: - verdict - remaining AllocationSum: description: How an account's managed sleeve targets plus its buffer cash target compare to 100%, as computed by accounts-api. The verdict is balanced when the total is within 1e-6 of 1, under_allocated below that, and over_allocated above it. Fractions are decimals in [0, 1] serialized as strings — e.g. "0.05" means 5%. discriminator: propertyName: verdict mapping: balanced: '#/components/schemas/AllocationSumBalanced' under_allocated: '#/components/schemas/AllocationSumUnderAllocated' over_allocated: '#/components/schemas/AllocationSumOverAllocated' oneOf: - $ref: '#/components/schemas/AllocationSumBalanced' - $ref: '#/components/schemas/AllocationSumUnderAllocated' - $ref: '#/components/schemas/AllocationSumOverAllocated' Customizations: type: object description: 'Sleeve customizations, keyed by asset class. Entries live under an asset-class bucket: fixed-income constraints under `fixed_income`. A bare map of entries at the top level (no asset-class bucket) is a legacy shape that is still accepted but is normalized into `fixed_income` on write; new integrations should send the container shape.' additionalProperties: true x-go-type: json.RawMessage properties: fixed_income: type: object description: Fixed-income constraints, keyed by a caller-supplied entry id (e.g. "allocation_20260609"). Each entry is a universe filter or an allocation target. additionalProperties: true example: fixed_income: universe_example: type: universe filter: maturity_in_years: greater_than_or_equal_to: 0.5 allocation_example: type: allocation filter: maturity_date: less_than: '2030-01-01' min_market_value: 100000 CashflowTarget: type: object properties: amount: type: number description: The amount of cashflow to target per period start_date: type: string format: date description: The date on which the cashflow target starts being applied. This date is inclusive. Must be in the format YYYYMMDD, i.e. 20250101. If not provided, the cashflow target will start on the current date. end_date: type: string format: date description: The date on which the cashflow target stops being applied. This date is exclusive. Must be in the format YYYYMMDD, i.e. 20251231. frequency: type: string description: 'The frequency of the cashflow. * one_time: Cashflow is a one-time payment. * monthly: Cashflow is distributed monthly. * bimonthly: Cashflow is distributed every two months. * quarterly: Cashflow is distributed quarterly. * semiannually: Cashflow is distributed twice per year. * annually: Cashflow is distributed annually.' enum: - one_time - monthly - bimonthly - quarterly - semiannually - annually source: type: string description: 'The source of the cashflow. * coupon: Cashflow is derived from coupon payments. * principal: Cashflow is derived from principal payments. * coupon_and_principal: Cashflow is derived from both coupon and principal payments.' enum: - coupon - principal - coupon_and_principal call_assumption: type: string description: 'The assumption made about when bonds will be called. * maturity_date: Assumes bonds are held until maturity. * workout_date: Assumes bonds are called at the workout date. * next_call_date: Assumes bonds are called at the next call date.' enum: - maturity_date - workout_date - next_call_date overrides: type: object description: 'Custom cashflow amounts to override specific buckets. Keys are bucket date ranges in format "YYYYMMDD_YYYYMMDD" (start_end), values are the override amount. Example: {"20250301_20250401": 13000} overrides the March 2025 bucket for a monthly frequency starting on the 1st.' additionalProperties: true x-go-type: json.RawMessage required: - amount - end_date - frequency - source - call_assumption - overrides CreateSleeveError: allOf: - $ref: '#/paths/~1v1~1account~1document~1/post/responses/403/content/application~1json/schema' - type: object properties: error_details: $ref: '#/components/schemas/CreateSleeveErrorDetails' CreateSleeveErrorDetails: type: object description: Present only when the create was refused because the sleeve's target does not fit the account's remaining allocation. properties: allocation_sum: $ref: '#/components/schemas/AllocationSum' required: - allocation_sum AllocationSumBalanced: allOf: - $ref: '#/components/schemas/AllocationSumBase' - type: object properties: verdict: type: string enum: - balanced required: - verdict Decimal: type: number format: double x-go-type: decimal.Decimal x-go-type-import: path: github.com/shopspring/decimal name: decimal AllocationSumOverAllocated: allOf: - $ref: '#/components/schemas/AllocationSumBase' - type: object properties: verdict: type: string enum: - over_allocated excess: type: string description: How far total exceeds 1. required: - verdict - excess AllocationBasis: type: string title: Allocation Basis description: Specifies how allocation targets and bounds are specified. enum: - weight - market_value ModelAssignment: type: object properties: model_id: type: string description: The ID of the model to of which the sleeve should be assigned model_name: type: string description: The name of the model to which the sleeve is assigned readOnly: true assignment_date: type: string format: date description: Assignment dates are used to align ladders and determine grace periods for the first ladder bucket before dynamic ladder rebalancing kicks in customizations: $ref: '#/components/schemas/Customizations' meta: type: object description: Arbitrary key-value store for additional metadata additionalProperties: type: string rebalance_strategy: $ref: '#/components/schemas/RebalanceStrategy' cashflow_targets: type: array items: $ref: '#/components/schemas/CashflowTarget' required: - model_id - assignment_date - customizations - meta - cashflow_targets x-provenance: method: searched source: https://docs.moment.com/reference harvested: '2026-10-14' tool: harvest-readme-openapi.py note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored. assembled_from: - https://docs.moment.com/reference/accountdetail-1.md - https://docs.moment.com/reference/assignlotstosleeve.md - https://docs.moment.com/reference/assignsleevetomodel.md - https://docs.moment.com/reference/batchgetaccountstatistics.md - https://docs.moment.com/reference/cancelorder.md - https://docs.moment.com/reference/createsleeve.md - https://docs.moment.com/reference/deletesleeve.md - https://docs.moment.com/reference/get_v1-account-account-id-stats-1.md - https://docs.moment.com/reference/get_v1-advisor-advisor-id-stats-1.md - https://docs.moment.com/reference/getaccountlots.md - https://docs.moment.com/reference/getaccountstatistics.md - https://docs.moment.com/reference/placeorder.md - https://docs.moment.com/reference/unassignsleevefrommodel.md - https://docs.moment.com/reference/updateaccountrestrictions.md - https://docs.moment.com/reference/updateaccountsettings.md - https://docs.moment.com/reference/updatecashallocation.md - https://docs.moment.com/reference/updatedonottrade.md - https://docs.moment.com/reference/updatesleeve.md - https://docs.moment.com/reference/uploadaccountdocument.md - https://docs.moment.com/reference/upsertlotoverrides.md merge: pages: 20 deduped: 54 conflicts_kept_first: 0