---
title: "Generate a full equity basket index manifest (does not create an index!)"
method: POST
path: "/helper/index-template/multi_eb"
tags: ["helper"]
---

# Generate a full equity basket index manifest (does not create an index!)

`POST /helper/index-template/multi_eb`

## Request

- Base URL: `https://api.merqube.com`
- URL: `https://api.merqube.com/helper/index-template/multi_eb`
- Auth: none declared
- TypeScript: <https://skmtc.dev/merqube/apis/merqube-api/docs/helper/index-template/multi_eb/post.ts> (a function with typed inputs; its response is checked against the schema)

Generate a full equity basket index manifest (does not create an index!)

## Request body

- ClientMultiEBConfig: full config for equity baskets
  - `constituents` DatedValidEquityBasketPosition[], required: The EB portfolio directory
    - union
      - DatedBasketPosition: A general basket portfolio position
        - `amount` number, required
        - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
        - `identifier` string, required
        - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
        - `position_id` string
        - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
        - `price_currency` string: currency of price; must be set together with price
        - `date` string, required
        - `selection_date` string
      - DatedRicEquityPosition: A general basket portfolio position
        - `amount` number, required
        - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
        - `identifier` string, required
        - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
        - `position_id` string
        - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
        - `price_currency` string: currency of price; must be set together with price
        - `date` string, required
        - `selection_date` string
        - `real_time_trade_types` RealTimeTradeType[]
        - `use_primary_listing` boolean: use the security's primary listing rather than the one from the identifier
      - DatedFsymEquityPosition: A general basket portfolio position
        - `amount` number, required
        - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
        - `identifier` string, required
        - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
        - `position_id` string
        - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
        - `price_currency` string: currency of price; must be set together with price
        - `date` string, required
        - `selection_date` string
        - `country_code` string, required: ISO country codes
  - `index_currency` string
  - `unit_of_measure` 'SHARES' | 'WEIGHT': Used to indicate if portfolio amounts are absolute or relative. weight indicates portfolio amounts are relative weights units indicates portfolio amounts are absolute values, e.g. shares or number of contracts
  - `base_date` string, required: the date that the index has level 'base_value'
  - `base_value` number, required: set the index value on base_date to this base_value
  - `corporate_actions` ClientEBCoraxConfig: how to handle corporate actions
    - `deduct_tax` boolean
    - `reinvest_day` 'AT_OPEN' | 'AT_CLOSE'
    - `reinvest_dividend_type` 'INDEX' | 'SECURITY' | 'CASH'
    - `reinvest_dividends` boolean
  - `dissemination_settings` DisseminationSetting[]: array of configurations for setting up identifiers for individual providers
    - `destination` 'BLOOMBERG' | 'REFINITIV' | 'MORNINGSTAR' | 'FACTSET', required
    - `ticker` string, required
  - `level_overrides` LevelOverride[]: optional level overrides for the index on certain days.
    - `comment` string
    - `date` string, required
    - `level` number, required
  - `precision_level` integer: used to set the rounding decimal field when creating identifiers
  - `rebal_freq` 'Annual' | 'Daily' | 'Monthly' | 'Quarterly' | 'Semi-Annual' | 'Weekly' | 'Bi-Monthly' | 'Intraday' | 'None'
  - `return_type_variants` ClientReturnTypeVariants: Names of the return type variants (TR/PR/NTR) of one index that are being created together. Used to link the variants through `freezer_config.primary_index_name`: if a total return variant is present, the price return and net total return variants point at it; otherwise the net total return variant points at the price return variant. The entry for the index's own `return_type` must match its `name`. A linked variant runs 10 minutes after its primary, so the primary's run time must be before 23:50. When POSTing to /index, create the primary first: a linked variant is rejected unless its primary exists with the same currency, spec (other than return type) and timezone, and it runs 10 minutes after it.
    - `net_total_return` string
    - `price_return` string
    - `total_return` string
  - `tick_configuration` TickConfiguration: configuration for intraday index ticking time information
    - `intraday_timezone` string
    - `tick_end_hour` integer: hour the index will end ticking intraday
    - `tick_end_minute` integer: minute the index will end ticking intraday
    - `tick_start_hour` integer: hour the index will start ticking intraday
    - `tick_start_minute` integer: minute the index will start ticking intraday
  - `unified_fee_config` ClientUnifiedFeeConfig
    - `deduction_source` 'ALL_CONSTITUENTS' | 'CASH', required
    - `management_fee` ClientManagementFeeConfig
      - `day_count_convention` 'f250' | 'f252' | 'f360' | 'f365' | 'actual', required
      - `rate` number, required: Management fee percentage as a decimal (e.g. 0.01 for 1%)
    - `performance_fee` ClientPerformanceFeeConfig
      - `high_water_mark` number: Required when hwm_mode is STATIC. Must be omitted when hwm_mode is DYNAMIC.
      - `hwm_mode` 'STATIC' | 'DYNAMIC'
      - `rate` number, required: Performance fee percentage as a decimal (e.g. 0.01 for 1%)
  - `run_hour` integer, required: set to the hour of day to run the index in the index's timezone
  - `run_minute` integer, required: set to the minute of the hour to run the index
  - `timezone` string: set to the timezone of the index
  - `bbg_ticker` string: due to the limitations of the Bloomberg ticker creation process (no API), this must be a pre-created ticker. You can email MerQube a list of tickers to create on your behalf at support@merqube.com. Then, you provide those as input to these indices
  - `description` string, required: set to the description of the index, which will show on merqube.com
  - `email_list` string[]: list of emails to send daily dissemination reports, and the initial backtest reports, to; if not specified, no emails will be sent
  - `name` string, required: set to the name of the index. Commonly people use the ticker as the name, but that is not necessary. Must be globally unique - you will get a 409 if this index name is taken
  - `namespace` string, required: set to the namespace of the index
  - `title` string, required: set to the title of the index that shows up on merqube.com
  - `currency` string: set to the currency of the index
  - `holiday_calendar` union
    - FlatCalendarSchema
      - `calendar_identifiers` string[]
      - `condition` 'any' | 'all' | 'custom'
      - `holidays_to_add` string[]
      - `holidays_to_remove` string[]
      - `swaps_monitor_codes` string[]
      - `weekmask` string[]: weekmask of valid business days
    - NestedCalendarSchema
      - `children` union[], required
        - union
          - CalendarIdentifiers
            - `calendar_identifiers` string[]
          - HolidaysToAdd
            - `holidays_to_add` string[]
          - NestedCalendarSchema (recursive)
      - `operator` 'union' | 'intersection' | 'difference', required
      - `weekmask` string[]
  - `is_intraday` boolean: set to true if the index is to calculate multiple times during the day. This does not pertain to the frequency of rebalancing; see `rebal_freq`. Even though theoretically all index family types can calculate multiple times a day, not all types will support this initially. This parameter is a bit experimental in that sense.

## Response `200`

OK

- ClientTemplateResponse
  - `bbg_ident_template` IdentifierUUIDPost: Identifier for a given provider. Will be referenced via the name field of the Identifier section
    - `display_name` string
    - `index_name` string, required
    - `metric` string
    - `name` string, required: unique name among all other Identifiers of the provider resource type.
    - `namespace` string
    - `num_days` integer: Number of days to disseminate data for
    - `provider_kwargs` union
      - BloombergProviderKwargs: Bloomberg provider custom arguments
        - `post_type` 'EOD' | 'RT' | 'EOD_AND_RT', required: How to post the data to Bloomberg, either the end of day method (EOD), real time method (RT) or both (EOD_AND_RT)
      - ReutersProviderKwargs: Reuters provider custom arguments
        - `post_type` 'EOD' | 'RT' | 'EOD_AND_RT' | 'EOD_AND_RT_COMBINED': How to post the data to Reuters, either the end of day method (EOD), real time method (RT) or both (EOD_AND_RT)
      - SecapiProviderKwargs: Secapi provider custom arguments
        - `metric` string, required
        - `security_name` string, required
        - `security_type` string, required
      - NasdaqProviderKwargs: Nasdaq provider custom arguments
        - `eod_date_delta` integer: How many days to offset the Nasdaq date (T if before 6:30pm EST otherwise T + 1) when getting EOD data from the Index
        - `nasdaq_env` 'testing' | 'production', required: Which Nasdaq environment to send data to
    - `rounding_decimals` integer: If rounding_type=standard, corresponds to number of decimal places to round to. If rounding_type=sigfig, corresponds to number of significant figures to round to.
    - `rounding_type` 'standard' | 'sigfig': Type of rounding to apply to the disseminated data. standard = normal python round(), sigfig = significant figures rounding.
    - `start_date` string, date
    - `ticker` string, required
  - `post_template` IndexDefinitionPost
    - `administrative` Administrative, required
      - `client` object
        - `approved_by` string: if a client requests an index to a finanancial institution, and that instituion approves the index parameters for launch, this holds the oauth email of that approver
        - `owner` string: the idea here is to capture the client at a higher level than the above, e.g., this index is owned by Bank of Greatness.
        - `requested_by` string: this is the actual OAuth token email that originated the POST on index-template (similar to created_by and last_modified_by). Except, this is the user on the templating POST not the actual POST to index because the post to index is going to be a MerQube employee, but we need to capture who originated the templating request aka who called the meta-api. This field is used to put this index on that user's Manage My Indices page.
      - `deadlines` Deadline[]
        - `business_days_prior` integer, required: the amount of days before T to check for data existence
        - `deadline_type` 'calculation' | 'restatement', required
        - `metrics` string[]: the list of metrics to check in the deadline checker script
        - `next_day` boolean, required: set this to true if the index starts running on day T but the deadline does not pass until T+1 in that index timezone
        - `og_priority` 'P1' | 'P2' | 'P3', required
        - `time_of_day` string, required: the time of day of the deadline
      - `role` 'data point' | 'verification' | 'calculation' | 'development' | 'administration', required
    - `base_date` string: the date that the index has level 'base_value'
    - `base_year` integer
    - `benchmark` union
      - IndexBenchmark
        - `benchmark_metric` string: only accepted if the ticker is an MQI. The metric of the benchmark index to compare against; eg can compare to some other metric than price_return of the benchmark
        - `index_metric` string: the metric of this index to compare against the ticker/threshold, eg can compare some other metric of this index than price_return
        - `threshold` number, required: the deviation that triggers an outlier event, IE, the daily difference of the index vs the daily difference of the underlying should not be more than this percent
        - `ticker` string, required: accepts either FSYM_ID, or MQI:XXX to benchmark against another index.
      - IndexBenchmark[]
        - `benchmark_metric` string: only accepted if the ticker is an MQI. The metric of the benchmark index to compare against; eg can compare to some other metric than price_return of the benchmark
        - `index_metric` string: the metric of this index to compare against the ticker/threshold, eg can compare some other metric of this index than price_return
        - `threshold` number, required: the deviation that triggers an outlier event, IE, the daily difference of the index vs the daily difference of the underlying should not be more than this percent
        - `ticker` string, required: accepts either FSYM_ID, or MQI:XXX to benchmark against another index.
    - `calc_freq` 'Daily' | 'Daily, EOD' | 'Daily, Real Time' | 'Intraday'
    - `calculation_check` union[]
      - union
        - object
          - `check_type` 'LEVEL_CHECK', required
          - `alert_type` 'email' | 'slack' | 'opsgenie' | 'fail_computation'
          - `enabled` boolean, required
          - `metric` string, required
          - `params` LevelCheckParams, required
            - `max` number, nullable, required
            - `min` number, nullable, required
        - object
          - `check_type` 'PERCENT_CHANGE_CHECK', required
          - `alert_type` 'email' | 'slack' | 'opsgenie' | 'fail_computation'
          - `enabled` boolean, required
          - `metric` string, required
          - `params` PercentChangeCheckParams, required
            - `max` number, nullable, required
            - `min` number, nullable, required
        - object
          - `check_type` 'HISTORY_CHECK', required
          - `alert_type` 'email' | 'slack' | 'opsgenie' | 'fail_computation'
          - `enabled` boolean, required
          - `metric` string, required
          - `params` HistoryCheckParams, required
            - `days` integer, nullable, required
    - `currency` string
    - `custom_metrics` MetricsSchema[]
      - `data_type` 'string' | 'number64' | 'datetime64' | 'int64' | 'bool' | 'object', required
      - `description` string, required: a description of what this metric represents
      - `name` string, required: metric name
      - `object_schema` object: optional - this supports complex objects, ie you can specify the metric is of this schema. THis allows you to upload a json schema itself of this metric. THis is for downstream users of this metric.
    - `description` string, required
    - `display_month` 'Jan' | 'Feb' | 'Mar' | 'Apr' | 'May' | 'Jun' | 'Jul' | 'Aug' | 'Sep' | 'Oct' | 'Nov' | 'Dec'
    - `documents` object
    - `eod_rt_price_check` boolean
    - `excess_strategy` 'keep_in_cash'
    - `family` string
    - `family_codes` string[]
    - `family_description` string
    - `fill_missing_data` boolean: Controls missing equity price recovery. The API derives this flag from stage and stores true only for backtest; all other stages store false.
    - `first_value_date` string
    - `freezer_config` FreezerConfig
      - `corax` boolean
      - `fx_rates` boolean
      - `prices` boolean
      - `primary_index_name` string: the primary index to use underlying data from
      - `rebalances` boolean
    - `identifiers` IdentifierUUIDRef[]
      - `enabled` boolean: Determines if the index will disseminate data based on this Identifier
      - `name` string, required
      - `provider` 'bloomberg' | 'reuters' | 'morningstar' | 'factset' | 'nasdaq' | 'wind' | 'secapi', required: currently supported providers
    - `intraday` Intraday: Only available for indexes with intraday tick computation
      - `publish_config` IntradayPublishConfig: Mapping of index metric to targets it should be sent to
      - `active_time_ranges` IntradayTickFilter[]
        - `days_of_week` integer[]: Which days of the week to run the index. Each day of the week is denoted by an integer with Monday = 0 and Sunday = 6
        - `end_date` union
          - string, date-time
          - string, date
          - string
        - `end_time` string: Inclusive end time of the day to stop running this intraday index. Format is %H:%M:%S.%f. This should be in the timezone of the index based on tzinfo.
        - `exclude_holidays` boolean: If this is true use the index holiday calendar to decide which days to run the index. It will only run on non-holidays.
        - `start_date` union
          - string, date-time
          - string, date
          - string
        - `start_time` string: Inclusive start time of the day to start running this intraday index. Format is %H:%M:%S.%f. This should be in the timezone of the index based on tzinfo.
      - `alerting` IntradayAlerting: Alerting configuration for intraday ticks
        - `flatline_alerts` IntradayFlatlineAlerts
          - `alert_hours` AlertHours
            - `end` string: Start of the silent hours in HH:MM 24h format. The timezone is based on the intraday.tzinfo
            - `start` string: Start of the silent hours in HH:MM 24h format. The timezone is based on the intraday.tzinfo
          - `alert_type` 'opsgenie' | 'slack'
          - `enabled` boolean: If the flatline alert should be enabled
          - `min_ticks` integer: Minimum number of ticks in the window to be the same to considered a flatline
          - `window_length` integer: window_length in minutes for flatline alert
      - `calculation_max_retry_delay` integer: How many seconds to keep retrying the real time calculation before setting the force flag. Defalts to 0 which means retry forever.
      - `data_refresh_period` integer: After the rtindex refreshes its data this is the number of seconds to wait before refreshing again. 0 means do not refresh. Defaults to 3600 seconds (60min)
      - `enabled` boolean, required: If the intraday process should be run or not
      - `heartbeat_timeout` integer: Max number of seconds between heartbeats before the rtindex pod is considered unhealthy
      - `infra_timed_scaling` IntradayInfraTimedScaling: Describes how to scale up and down based on the active time range.
        - `enabled` boolean: Whether or not the deployment will be scaled up and down.
        - `end_time_buffer` integer: The amount of minutes past the end time after which the deployment is scaled down.
        - `start_time_buffer` integer: The amount of minutes before the start time from which the deployment is scale up.
      - `ohl_enabled` boolean: Should send Open High Low data to providers
      - `opening_tick_time` string: The time of opening tick in index's timezone. The index will send data against this
      - `pre_open_warmup` IntradayPreOpenWarmup: Run the unbounded summaries read before the session opens and keep only the price floor. Off unless enabled. Enabling it requires intraday.active_time_ranges, because that is the session open the lead counts back from. When infra_timed_scaling is enabled, lead_seconds must not exceed start_time_buffer in seconds minus 300, so the pod is running before the warm-up starts.
        - `enabled` boolean: Whether this index seeds a price floor before the open.
        - `lead_seconds` integer: How many seconds before the first active tick the warm-up may start. The attempt window ends halfway through that lead.
      - `range_prefetch` RangePrefetch: Ranged catch-up for a real-time index. Omitted, or enabled false, keeps the single-tick summaries read. There is no lag wait and no minimum tick age.
        - `enabled` boolean: When false, or when range_prefetch is omitted, every tick uses the single-tick summaries read. When true, two or more queued ticks are one ranged read immediately. There is no wait for the lag to reach a threshold. A queue of one tick still uses the single-tick read.
        - `max_batch_ticks` integer: How many leading queued ticks one ranged read covers. Extra queued ticks wait for the next batch. This does not delay the first batch. The first batch starts as soon as a second tick is queued.
        - `max_span_seconds` number: Width, in seconds, of one chunk of the delta between the first and last tick in the batch. The read is split into chunks of this width and still executed. This is not a reason to skip the ranged read or to fall back to one tick at a time.
        - `read_timeout_seconds` number: Statement timeout, in seconds, for each chunk query. A timeout is a failed read for that attempt. It does not disable catch-up on later ticks.
      - `resource_cpu_request` integer: Minimum cpu resources requested in milliCPU
      - `resource_memory_request` integer: Minimum memory resources requested in mebibytes.
      - `security_id` string: Security ID of the intraday_index security where ticker data is served
      - `startup_failure_timeout` integer: Max number of seconds to wait for the first heartbeat from the rtindex pod before considering it a failed startup. By default it will wait 40sec
      - `summaries_read_replica` boolean: When true, the east RT tick reader uses the dedicated summaries read replica (db/db1/summaries_rt). When omitted or false, east keeps the summaryapi path. West ignores this flag.
      - `tick_delay` integer: Number of seconds to delay intraday calculation
      - `ticker_period` number: Duration between ticker datapoints. In seconds
      - `tzinfo` string, required: Timezone of intraday tick timestamp comparisons
    - `launch_date` string, required
    - `methodology` string
    - `month` integer
    - `name` string, required
    - `namespace` string
    - `notify_configuration` NotificationConfig
      - `email_list_uuid` string
      - `emails` string[]
      - `enabled` boolean
    - `plot_metric` string
    - `portfolio_allocation_display` boolean: whether or not portfolio_allocations are shown on the website. false by default
    - `portfolio_display` object
      - `fields` object[]
        - `display_name` string
        - `field_name` string
    - `portfolio_handler_id` string
    - `rebal_freq` 'Annual' | 'Daily' | 'Monthly' | 'Quarterly' | 'Semi-Annual' | 'Weekly' | 'Bi-Monthly' | 'Intraday' | 'None'
    - `related` Related[]
      - `default_display` boolean
      - `id` string, required
      - `metric` string
      - `name` string, required
      - `type` 'security' | 'index', required
    - `run_configuration` RunConfig
      - `airflow_config` AirflowConfig
        - `affinity_match_expression_key` string: the affinity to use in airflow
        - `dag` object: use this to set kwargs for the dag
        - `description` string: A short description related with the generated runner
        - `env` object: use this to set ENV variables in the pod
        - `pod` object: use this to set kwargs for the pod
        - `s3_location` S3Bucket
          - `bucket` string, required
          - `path` string
        - `subpods` SubPod[]
          - `arguments` array[]
            - string[]
          - `command` string, required
          - `env_vars` array[]
            - string[]
          - `pod_kwargs` object
            - `name` string
          - `pod_type` string, required
          - `uuid` string, required
      - `alert_priority` 'P1' | 'P2' | 'P3' | 'P4' | 'P5'
      - `command` string
      - `command_arguments` array[]
        - string[]
      - `day_chunk_size` integer: if set to a number, the index run will be split into chunks of this number of days
      - `dqms` DqmsConfig
        - `enabled` boolean: If true, force-enables DQMS validation for this index
      - `holiday_calendar` union
        - FlatCalendarSchema
          - `calendar_identifiers` string[]
          - `condition` 'any' | 'all' | 'custom'
          - `holidays_to_add` string[]
          - `holidays_to_remove` string[]
          - `swaps_monitor_codes` string[]
          - `weekmask` string[]: weekmask of valid business days
        - NestedCalendarSchema
          - `children` union[], required
            - union
              - …
          - `operator` 'union' | 'intersection' | 'difference', required
          - `weekmask` string[]
      - `index_report_uuids` string[]
      - `index_reports` union
        - string[]
        - IndexReport[]
          - `dissemination_destinations` DisseminationDestinations
            - `email_dissapi_configs` object[]
              - …
            - `s3_dissapi_configs` object[]
              - …
            - `sftp_dissapi_configs` object[]
              - …
          - `program_args` object
          - `task_id` string
          - `uuid` string, required
      - `job_enabled` boolean, required
      - `num_days_to_load` integer, required
      - `pod_image_and_tag` string: overrides the image
      - `schedule` Schedule, required
        - `business_days_prior` integer
        - `event_driven` boolean: if true, there will be no defined schedule for the DAG (as in you could have a created DAG that won't run unless triggered manually)
        - `holiday_calendar` object
          - `cal_type` string
          - `mic` string
        - `retries` integer, required
        - `retry_interval_min` integer, required
        - `schedule_cron` string
        - `schedule_start` string, required
        - `timeout_delta` string
        - `triggers` string[]: the dataset trigger to which the dag subscribes to. This is a list of trigger(s)
      - `state_key` string: ID to use when storing or reading the state of an instance of a dissapi object.
      - `tzinfo` string
    - `run_configurations` RunConfigLabel[]
      - `airflow_config` AirflowConfig
        - `affinity_match_expression_key` string: the affinity to use in airflow
        - `dag` object: use this to set kwargs for the dag
        - `description` string: A short description related with the generated runner
        - `env` object: use this to set ENV variables in the pod
        - `pod` object: use this to set kwargs for the pod
        - `s3_location` S3Bucket
          - `bucket` string, required
          - `path` string
        - `subpods` SubPod[]
          - `arguments` array[]
            - string[]
          - `command` string, required
          - `env_vars` array[]
            - string[]
          - `pod_kwargs` object
            - `name` string
          - `pod_type` string, required
          - `uuid` string, required
      - `alert_priority` 'P1' | 'P2' | 'P3' | 'P4' | 'P5'
      - `command` string
      - `command_arguments` array[]
        - string[]
      - `day_chunk_size` integer: if set to a number, the index run will be split into chunks of this number of days
      - `dqms` DqmsConfig
        - `enabled` boolean: If true, force-enables DQMS validation for this index
      - `holiday_calendar` union
        - FlatCalendarSchema
          - `calendar_identifiers` string[]
          - `condition` 'any' | 'all' | 'custom'
          - `holidays_to_add` string[]
          - `holidays_to_remove` string[]
          - `swaps_monitor_codes` string[]
          - `weekmask` string[]: weekmask of valid business days
        - NestedCalendarSchema
          - `children` union[], required
            - union
              - …
          - `operator` 'union' | 'intersection' | 'difference', required
          - `weekmask` string[]
      - `index_report_uuids` string[]
      - `index_reports` union
        - string[]
        - IndexReport[]
          - `dissemination_destinations` DisseminationDestinations
            - `email_dissapi_configs` object[]
              - …
            - `s3_dissapi_configs` object[]
              - …
            - `sftp_dissapi_configs` object[]
              - …
          - `program_args` object
          - `task_id` string
          - `uuid` string, required
      - `job_enabled` boolean, required
      - `num_days_to_load` integer, required
      - `pod_image_and_tag` string: overrides the image
      - `schedule` Schedule, required
        - `business_days_prior` integer
        - `event_driven` boolean: if true, there will be no defined schedule for the DAG (as in you could have a created DAG that won't run unless triggered manually)
        - `holiday_calendar` object
          - `cal_type` string
          - `mic` string
        - `retries` integer, required
        - `retry_interval_min` integer, required
        - `schedule_cron` string
        - `schedule_start` string, required
        - `timeout_delta` string
        - `triggers` string[]: the dataset trigger to which the dag subscribes to. This is a list of trigger(s)
      - `state_key` string: ID to use when storing or reading the state of an instance of a dissapi object.
      - `tzinfo` string
      - `label` string, required: unique label of this rc
    - `sales_force_deal_id` string: SalesForce Deal ID
    - `spec` IndexSpec
      - `index_class_args` object
      - `index_class_code` string, required
      - `index_variables` object: TODO
      - `version` integer
    - `stage` 'prod' | 'test' | 'development' | 'backtest' | 'inqubator', required
    - `tags` string
    - `title` string, required
    - `webpage` Webpage
      - `custom_charts` CustomCharts[]
        - `chart_type` 'line' | 'spline' | 'area' | 'bar' | 'column'
        - `compare_mode` 'absolute' | 'percent'
        - `constructor_type` 'chart' | 'stockChart'
        - `data` object[]
          - `array_field` string, required
          - `key_field` string, required
          - `url` string, required
          - `values` object[], required
            - `display_name` string, required
            - `path` string, required
        - `name` string, required
        - `size` number
        - `xlabel` string, required
        - `ylabel` string, required
      - `visible` boolean
    - `weighting_method` 'Other' | 'Equal'
  - `target_ports` BasketPortfolioPutIn[], nullable: only returns for indices where the client should post the target portfolios
    - `divisor` number: A scaling factor to apply for the SHARES of the portfolio constituents
    - `external_id` string: An external ID to reference this portfolio with. Must be unique per index.
    - `positions` ValidEquityBasketPosition[], required
      - union
        - BasketPosition: A general basket portfolio position
          - `amount` number, required
          - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
          - `identifier` string, required
          - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
          - `position_id` string
          - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
          - `price_currency` string: currency of price; must be set together with price
        - RicEquityPosition: Equity position, identified by a RIC
          - `amount` number, required
          - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
          - `identifier` string, required
          - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
          - `position_id` string
          - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
          - `price_currency` string: currency of price; must be set together with price
          - `real_time_trade_types` RealTimeTradeType[]
          - `use_primary_listing` boolean: use the security's primary listing rather than the one from the identifier
        - FsymEquityPosition: Equity position, identified by a FSYM + country code
          - `amount` number, required
          - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
          - `identifier` string, required
          - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
          - `position_id` string
          - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
          - `price_currency` string: currency of price; must be set together with price
          - `country_code` string, required: ISO country codes
        - OptionPosition: An Option position
          - `amount` number, required
          - `currency` string, required
          - `delta_hedge_flag` boolean
          - `expiration_date` string, required
          - `expiration_type` 'AM' | 'PM'
          - `identifier` string, required
          - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
          - `lag` string
          - `leg_multiple` number
          - `mic` string
          - `strike` number, required
          - `strike_type` 'PCT_SPOT' | 'DELTA' | 'SPCT_SPOT'
          - `structure_id` number
          - `style` 'AMERICAN' | 'EUROPEAN'
          - `type` 'PUT' | 'CALL', required
          - `underlying` string, required
          - `vol_multiplier` number
          - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
          - `position_id` string
          - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
          - `price_currency` string: currency of price; must be set together with price
        - FuturesPosition: A Futures position
          - `amount` number, required
          - `currency` string, required
          - `expiration_date` string, required
          - `identifier` string, required
          - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
          - `lag` string
          - `underlying` string, required
          - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
          - `position_id` string
          - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
          - `price_currency` string: currency of price; must be set together with price
        - SecapiBasketPosition: A basket position that uses custom metrics from merqube data source
          - `amount` number, required
          - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
          - `identifier` string, required
          - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
          - `position_id` string
          - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
          - `price_currency` string: currency of price; must be set together with price
          - `custom_metric` string
        - MerqubeIndexPosition: A basket position that uses custom metrics from merqube data source
          - `amount` number, required
          - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
          - `identifier` string, required
          - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
          - `position_id` string
          - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
          - `price_currency` string: currency of price; must be set together with price
          - `metric_name` string
        - IsinMicEquityPosition: Equity position, identified by an ISIN and MIC
          - `amount` number, required
          - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
          - `identifier` string, required
          - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
          - `position_id` string
          - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
          - `price_currency` string: currency of price; must be set together with price
          - `mic` string, required
        - MutualFundPosition: Mutual fund position, identified by ISIN (funds have no MIC)
          - `amount` number, required
          - `asset_type` 'CASH' | 'THIRD_PARTY_INDEX' | 'EQUITY' | 'OPTION' | 'FUTURES' | 'MUTUAL_FUND' | 'MERQUBE_INDEX' | 'CUSTOM_SECAPI_INDEX' | 'OTHER', required
          - `identifier` string, required
          - `identifier_type` 'RIC' | 'CURRENCY_CODE' | 'FSYM_ID' | 'TICKER' | 'BBG_TICKER' | 'CUSIP' | 'ISIN', required
          - `position_id` string
          - `price` number: client supplied price for a position we cannot price ourselves; must be set together with price_currency
          - `price_currency` string: currency of price; must be set together with price
    - `share_selection_date` string
    - `target_portfolio_type` 'EOD' | 'INTRADAY': Whether its an end of day portfolio or an intraday portfolio.
    - `timestamp` string, required
    - `unit_of_measure` 'SHARES' | 'WEIGHT', required: Used to indicate if portfolio amounts are absolute or relative. weight indicates portfolio amounts are relative weights units indicates portfolio amounts are absolute values, e.g. shares or number of contracts

## Other responses

- `400`: illegal request body

---

[API](https://skmtc.dev/merqube/apis/merqube-api.md) - [All operations](https://skmtc.dev/merqube/apis/merqube-api/llms.txt) - [OpenAPI document](https://skmtc.dev/merqube/apis/merqube-api/revisions/20f47ca36587?raw)
