---
title: "Create a new Product."
method: POST
path: "/cm/v1/products"
tags: ["Product"]
---

# Create a new Product.

`POST /cm/v1/products`

Create a new Product of the AdAccount.

## Query parameters

- `ad_account_id` string, required

## Request body

- DspProduct — Product represents an app (per device OS) or a website that an AdAccount want to promote with a Campaign. A Campaign should be associated with a single Product.
  - `id` string — Unique identifier of the Product. Automatically set by server on creation.
  - `ad_account_id` string — The ID of the AdAccount the Product belongs to.
  - `title` string, required — A descriptive name of the Product.
  - `description` string — A short description of the Product.
  - `advertiser_domain` string, required — Advertiser domain (e.g., "ford.com"). Usually the domain of AdAccounts's web page. From v1.7.4, it should be non empty if the value of allow_empty_advertiser_domain is false. If the value is empty, some exchanges may deny campaigns under the product.
  - `allow_empty_advertiser_domain` boolean — A flag to allow empty value of advertiser_domain. Setting this flag to true acknowledges that some exchanges may deny campaigns if the advertiser_domain is empty. From v1.7.4, the value should be true if the value of advertiser_domain is empty.
  - `device_os` 'UNKNOWN_DEVICE_OS' | 'ANDROID' | 'IOS' | 'VERSATILE' | 'MOBILE_WEB' | 'MACOS' | 'WINDOWS' | 'NEXT_VERSATILE' — Enumeration of device OS types supported by Moloco Ads. This value is not part of the specification. - ANDROID: Android device OS. - IOS: iOS device OS. - VERSATILE: Product with multiple OSes. Specifically for CTV. - MOBILE_WEB: OS for mobile web traffic. - MACOS: OS for MacOS traffic. - WINDOWS: OS for Windows traffic. - NEXT_VERSATILE: OS for Next web product.
  - `developer_name` string — The developer name of the Product. Some publishers request the sponsor information for the native Creative. The value of developer_name will be used to fill that information. Please note that this value could be displayed on user's screen. If this field is empty, native Creative's title will be used.
  - `type` 'UNKNOWN_TYPE' | 'APP' | 'WEB', required — Product type. - UNKNOWN_TYPE: This value is not part of the specification. - APP: App type. - WEB: Web type.
  - `app` ProductAppProperties — AppProperties defines the App type Product specific properties. Should contain only one of 'app' or 'web'.
    - `bundle_id` string, required — App bundle ID. Immutable.
    - `category` string — The main IAB content category of the App. This field is now output only and will be removed after v1.10. Before that, it is auto-filled from the categories field. Please use 'categories' field instead. Valid category values can be found in section "5.1 Content Categories" in the [OpenRTB API Specification] (https://github.com/openrtb/OpenRTB/blob/master/OpenRTB-API-Specification-Version-2-3-1-FINAL.pdf).
    - `categories` string[] — The IAB categories of the App. All the categories must be valid IAB categories. On create Product, the system checks the App Metadata Inventory: if the app is found, the Inventory values override user input; otherwise, the API uses the provided input. This field is editable only when the app is not in Inventory, and becomes read-only if the app exists there. Valid category values can be found in section "5.1 Content Categories" in the [OpenRTB API Specification] (https://github.com/openrtb/OpenRTB/blob/master/OpenRTB-API-Specification-Version-2-3-1-FINAL.pdf).
    - `category_readable` string
    - `rating` number, double — App rating in the range of [0, 5].
    - `rating_cnt` string, int64
    - `app_store_url` string — App store URL for Google Play, Apple App Store or Other App Markets.
    - `available_countries` string[] — Country codes where the app is available in the store. The value format is ISO-3166-1 Alpha-2 using uppercase letters only, such as "KR" or "US".
    - `unavailable_countries` string[] — Country codes where the app is unavailable in the store. The value format is ISO-3166-1 Alpha-2 using uppercase letters only, such as "KR" or "US".
    - `rtb_bundle_ids` string[] — RTB bundle names that related to the target app for which a Campaign runs. This field is useful when the target app and/or its family apps send out bid requests to the exchanges: (1) by nature, the Campaign must not deliver ad to the AdAccount's own apps; (2) it's better to ignore such apps for ads serving model training.
    - `postback_integration` DspPostbackIntegration — PostbackIntegration represents the postback integration information.
      - `mmp` 'UNKNOWN_TRACKING_COMPANY' | 'KOCHAVA' | 'ADJUST' | 'MAT' | 'MOLOCO_PIXEL' | 'APPSFLYER' | 'ADBRIX' | 'WEB' | 'GENERIC' | 'TRACKFNT' | 'AIRBRIDGE' | 'MOLOCO_E2E' | 'APSALAR' | 'BRANCH' | 'TENJIN' | 'SINGULAR' | 'ADBRIX_V2' | 'TRAFFICGUARD' | 'GAMELOFT' | 'SKADNETWORK' | 'MYTRACKER' | 'MOLOCO_RMP' | 'MOLOCO_PIXEL_V2' | 'JUSTTRACK' | 'SHOPEE' | 'KOCHAVA_FOR_PUBLISHER' | 'GAMESIGHT' | 'CAULY' | 'HASOFFER' | 'ADACTION' | 'CURATE' — Enumeration for tracking companies supported by Moloco Ads. - WEB: Unnamed trackers - AIRBRIDGE: Moloco's e2e tracker (test purpose only) - KOCHAVA_FOR_PUBLISHER: Kochava's CTV to web event dedicated tracking company.
      - `bundle_id` string — bundle_id to be used in the MMP integration. This corresponds to app_bundle in postback table. We've relied on the identifier sent by the tracker to keep track of events in our internal database. When we want to target to the audience of a Campaign, we need to exactly specify the identifier in the target description. Unfortunately, it depends on tracker's policy especially for iOS app as follows: - Appsflyer: "id" + NUMBER, where NUMBER is app bundle. - Tune: independent string to NUMBER. e.g., memebox is denoted as "com.memebox.ios.memebox" while app bundle is 896990789 - Adjust: same with the app_bundle - trackfnt: same with the app_bundle Note that 'bundle' field will be used as tracking bundle if 'tracking_bundle' is not given. In many case, this field can be filled after we receive the very first event from tracker for an app.
    - `mmp_integration` DspMmpIntegration — MmpIntegration represents the MMP integration information.
      - `id` string — The unique identifier of the MmpIntegration.
      - `mmp_bundle_id` string — Exact key which is used in MMP.
      - `mmp` 'UNKNOWN_TRACKING_COMPANY' | 'KOCHAVA' | 'ADJUST' | 'MAT' | 'MOLOCO_PIXEL' | 'APPSFLYER' | 'ADBRIX' | 'WEB' | 'GENERIC' | 'TRACKFNT' | 'AIRBRIDGE' | 'MOLOCO_E2E' | 'APSALAR' | 'BRANCH' | 'TENJIN' | 'SINGULAR' | 'ADBRIX_V2' | 'TRAFFICGUARD' | 'GAMELOFT' | 'SKADNETWORK' | 'MYTRACKER' | 'MOLOCO_RMP' | 'MOLOCO_PIXEL_V2' | 'JUSTTRACK' | 'SHOPEE' | 'KOCHAVA_FOR_PUBLISHER' | 'GAMESIGHT' | 'CAULY' | 'HASOFFER' | 'ADACTION' | 'CURATE' — Enumeration for tracking companies supported by Moloco Ads. - WEB: Unnamed trackers - AIRBRIDGE: Moloco's e2e tracker (test purpose only) - KOCHAVA_FOR_PUBLISHER: Kochava's CTV to web event dedicated tracking company.
      - `ownership` boolean — Whether the Product's AdAccount has ownership for the MmpIntegration.
      - `status` 'UNKNOWN_STATUS' | 'UNDER_REVIEW' | 'DENIED' | 'ACTIVE'
      - `denied_reason` string — Review denied reason if its status is DENIED.
      - `cv_config_item` MmpIntegrationConversionValueConfigurationItem — Conversion value configuration. Show the valid item among the history in the storage entity. (Most recent item of which the effective date is not later than current date.) Use case in MCP: https://help.moloco.com/hc/en-us/articles/1500012981641-SKAdNetwork-Conversion-Value-Configuration- .
        - `effective_date` string — The start date of the CV configuration in the form of YYYY-MM-DD.
        - `scheme` 'UNKNOWN_CONVERSION_VALUE_SCHEME' | 'CONVERSION_VALUE_SCHEME_SINGLE_EVENT' | 'CONVERSION_VALUE_SCHEME_MULTIPLE_EVENTS' | 'CONVERSION_VALUE_SCHEME_CUSTOM_EVENTS' | 'CONVERSION_VALUE_SCHEME_SKAN_V4_EVENTS'
        - `cv_single` ConversionValueConfigurationItemCvConfigurationForSingleEvent
          - `cv_revenue_events` object — Information on relationships between conversion value and (event name & revenue interval) for single event scheme. The key of this map is the registered conversion value between 1 to 63. The value of this map is a EventInfo message. EventInfo without revenue value should be unique. For the same event name, conversion value should be consecutive. Range min value cannot be smaller than previous range's max value. At least 4 Purchase Value should be registered for each event.
        - `cv_multi` ConversionValueConfigurationItemCvConfigurationForMultipleEvents
          - `cv_events` object — Information on relationships between conversion value and event name for multiple events scheme. The key of this map is the registered conversion value between 0 to 5. The value of this map is the event name.
        - `cv_custom` ConversionValueConfigurationItemCvConfigurationForCustomEvents
          - `cv_events` object — Information on relationships between conversion value and events for custom event scheme. The key of this map is the registered conversion value between 1 to 63. The value of this map is the list of events for each conversion value.
        - `cv_skan_v4` ConversionValueConfigurationItemCvConfigurationForSkanV4Events
          - `postbacks` CvConfigurationForSkanV4EventsPostback[]
            - `postback_sequence_index` integer
            - `measurement_window` integer
            - `coarse_grained_values` object — Information on relationships between coarse-grained conversion value and its detailed events. The possible keys of the map are low, medium or high.
            - `fine_grained_values` object — Information on relationships between fine-grained conversion value and its detailed events. The key of this map is the registered conversion value between 1 to 63.
        - `auto_refresh` ConversionValueConfigurationItemCvConfigurationAutoRefresh — Settings for automatically importing and updating SKAdNetwork conversion value configuration from MMP.
          - `enable_auto_refresh` boolean — Enables automatically importing the latest SKAdNetwork CV configuration from the integrated MMP and updating CV config items.
          - `refresh_result` 'UNKNOWN' | 'OK' | 'ERROR'
          - `refresh_error_message` string — Auto refresh error message in case the refresh request failed.
          - `last_auto_refreshed_at` string, date-time — Timestamp when the last auto SKAdNetwork CV configuration refresh occurred.
      - `mmp_context` MmpIntegrationMmpContext
        - `adjust` MmpContextAdjustContext
          - `url_host_universal_link` string
          - `url_host_branded_link` string
      - `updated_at` string, date-time — Last updated time. Should not modify on the client side.
      - `allow_fingerprinting` boolean — Whether the app owner has allowed the MMP's fingerprinting for attributions.
      - `fingerprinting_last_auto_refreshed_at` string, date-time — Timestamp for last update of "allow_fingerprinting".
    - `skadn_mmp_integration` DspMmpIntegration — MmpIntegration represents the MMP integration information.
      - `id` string — The unique identifier of the MmpIntegration.
      - `mmp_bundle_id` string — Exact key which is used in MMP.
      - `mmp` 'UNKNOWN_TRACKING_COMPANY' | 'KOCHAVA' | 'ADJUST' | 'MAT' | 'MOLOCO_PIXEL' | 'APPSFLYER' | 'ADBRIX' | 'WEB' | 'GENERIC' | 'TRACKFNT' | 'AIRBRIDGE' | 'MOLOCO_E2E' | 'APSALAR' | 'BRANCH' | 'TENJIN' | 'SINGULAR' | 'ADBRIX_V2' | 'TRAFFICGUARD' | 'GAMELOFT' | 'SKADNETWORK' | 'MYTRACKER' | 'MOLOCO_RMP' | 'MOLOCO_PIXEL_V2' | 'JUSTTRACK' | 'SHOPEE' | 'KOCHAVA_FOR_PUBLISHER' | 'GAMESIGHT' | 'CAULY' | 'HASOFFER' | 'ADACTION' | 'CURATE' — Enumeration for tracking companies supported by Moloco Ads. - WEB: Unnamed trackers - AIRBRIDGE: Moloco's e2e tracker (test purpose only) - KOCHAVA_FOR_PUBLISHER: Kochava's CTV to web event dedicated tracking company.
      - `ownership` boolean — Whether the Product's AdAccount has ownership for the MmpIntegration.
      - `status` 'UNKNOWN_STATUS' | 'UNDER_REVIEW' | 'DENIED' | 'ACTIVE'
      - `denied_reason` string — Review denied reason if its status is DENIED.
      - `cv_config_item` MmpIntegrationConversionValueConfigurationItem — Conversion value configuration. Show the valid item among the history in the storage entity. (Most recent item of which the effective date is not later than current date.) Use case in MCP: https://help.moloco.com/hc/en-us/articles/1500012981641-SKAdNetwork-Conversion-Value-Configuration- .
        - `effective_date` string — The start date of the CV configuration in the form of YYYY-MM-DD.
        - `scheme` 'UNKNOWN_CONVERSION_VALUE_SCHEME' | 'CONVERSION_VALUE_SCHEME_SINGLE_EVENT' | 'CONVERSION_VALUE_SCHEME_MULTIPLE_EVENTS' | 'CONVERSION_VALUE_SCHEME_CUSTOM_EVENTS' | 'CONVERSION_VALUE_SCHEME_SKAN_V4_EVENTS'
        - `cv_single` ConversionValueConfigurationItemCvConfigurationForSingleEvent
          - `cv_revenue_events` object — Information on relationships between conversion value and (event name & revenue interval) for single event scheme. The key of this map is the registered conversion value between 1 to 63. The value of this map is a EventInfo message. EventInfo without revenue value should be unique. For the same event name, conversion value should be consecutive. Range min value cannot be smaller than previous range's max value. At least 4 Purchase Value should be registered for each event.
        - `cv_multi` ConversionValueConfigurationItemCvConfigurationForMultipleEvents
          - `cv_events` object — Information on relationships between conversion value and event name for multiple events scheme. The key of this map is the registered conversion value between 0 to 5. The value of this map is the event name.
        - `cv_custom` ConversionValueConfigurationItemCvConfigurationForCustomEvents
          - `cv_events` object — Information on relationships between conversion value and events for custom event scheme. The key of this map is the registered conversion value between 1 to 63. The value of this map is the list of events for each conversion value.
        - `cv_skan_v4` ConversionValueConfigurationItemCvConfigurationForSkanV4Events
          - `postbacks` CvConfigurationForSkanV4EventsPostback[]
            - `postback_sequence_index` integer
            - `measurement_window` integer
            - `coarse_grained_values` object — Information on relationships between coarse-grained conversion value and its detailed events. The possible keys of the map are low, medium or high.
            - `fine_grained_values` object — Information on relationships between fine-grained conversion value and its detailed events. The key of this map is the registered conversion value between 1 to 63.
        - `auto_refresh` ConversionValueConfigurationItemCvConfigurationAutoRefresh — Settings for automatically importing and updating SKAdNetwork conversion value configuration from MMP.
          - `enable_auto_refresh` boolean — Enables automatically importing the latest SKAdNetwork CV configuration from the integrated MMP and updating CV config items.
          - `refresh_result` 'UNKNOWN' | 'OK' | 'ERROR'
          - `refresh_error_message` string — Auto refresh error message in case the refresh request failed.
          - `last_auto_refreshed_at` string, date-time — Timestamp when the last auto SKAdNetwork CV configuration refresh occurred.
      - `mmp_context` MmpIntegrationMmpContext
        - `adjust` MmpContextAdjustContext
          - `url_host_universal_link` string
          - `url_host_branded_link` string
      - `updated_at` string, date-time — Last updated time. Should not modify on the client side.
      - `allow_fingerprinting` boolean — Whether the app owner has allowed the MMP's fingerprinting for attributions.
      - `fingerprinting_last_auto_refreshed_at` string, date-time — Timestamp for last update of "allow_fingerprinting".
    - `content_rating` string — Content rating(App store age information) of the App.
    - `storekit_enabled` boolean — StoreKit can be applied only for iOS app.
    - `autoinline_enabled` boolean — AutoInline can be applied only for Android app.
    - `localized_app_name` object
    - `localized_app_icon_url` object — Field for url of app icon.
    - `localized_app_screenshots` object — App screenshots from the app store.
    - `app_event_types` object — Information on relationships between in-app events and its event type. This field is to categorize in-app events and categorized event types for each in-app event are used to optimize training of ML model.
    - `description` string
    - `short_description` string — Short description (promo text) from the app store.
    - `ios_primary_measurement` 'IOS_PRIMARY_MEASUREMENT_UNKNOWN' | 'IOS_PRIMARY_MEASUREMENT_NONE' | 'IOS_PRIMARY_MEASUREMENT_SKAN' | 'IOS_PRIMARY_MEASUREMENT_MMP' — Primary measurement used for iOS apps. - IOS_PRIMARY_MEASUREMENT_UNKNOWN: Zero value. Every non-iOS app must have this value. - IOS_PRIMARY_MEASUREMENT_NONE: Unset value for iOS app. It means the primary measurement is not decided yet. - IOS_PRIMARY_MEASUREMENT_SKAN: SKAdNetwork (SKAN) - IOS_PRIMARY_MEASUREMENT_MMP: MMP Probabilistic Attribution
    - `ios_secondary_measurement` 'IOS_SECONDARY_MEASUREMENT_UNKNOWN' | 'IOS_SECONDARY_MEASUREMENT_NONE' | 'IOS_SECONDARY_MEASUREMENT_NA' | 'IOS_SECONDARY_MEASUREMENT_SKAN' | 'IOS_SECONDARY_MEASUREMENT_MMP' | 'IOS_SECONDARY_MEASUREMENT_OTHER_MMP' | 'IOS_SECONDARY_MEASUREMENT_OTHER_3P' | 'IOS_SECONDARY_MEASUREMENT_INCREMENTALITY' | 'IOS_SECONDARY_MEASUREMENT_CUSTOM' — Secondary measurement used for iOS apps. - IOS_SECONDARY_MEASUREMENT_UNKNOWN: Zero value. Every non-iOS app must have this value. - IOS_SECONDARY_MEASUREMENT_NONE: Unset value for iOS app. It means the secondary measurement is not decided yet. - IOS_SECONDARY_MEASUREMENT_NA: Not applicable. It means the iOS app does not use any secondary measurement. - IOS_SECONDARY_MEASUREMENT_SKAN: SKAdNetwork (SKAN). SKAN cannot be configured as both the primary and secondary measurement. If a secondary measurement is not required, use 'NA'. - IOS_SECONDARY_MEASUREMENT_MMP: MMP Probabilistic Attribution. MMP cannot be configured as both the primary and secondary measurement. If a secondary measurement is not required, use 'NA'. - IOS_SECONDARY_MEASUREMENT_OTHER_MMP: Other MMP measurements (e.g., unified iOS reporting, AppsFlyer SSOT, etc.) - IOS_SECONDARY_MEASUREMENT_OTHER_3P: Other 3P measurement tool (e.g., some customers are using other BI tools) - IOS_SECONDARY_MEASUREMENT_INCREMENTALITY: Incrementality measurement - IOS_SECONDARY_MEASUREMENT_CUSTOM: Custom measurement
    - `ios_custom_measurement` string
  - `web` ProductWebProperties — WebProperties defines the Web type Product specific properties. Should contain only one of 'app' or 'web'.
    - `category` string — The main IAB content category of the web product. When creating a WEB product, provide exactly one of 'category' or 'categories'; the other field is derived automatically. Providing both is rejected. REQUIRED was dropped to allow 'categories'-only WEB creates; BRAND products reuse this message via 'brand.web' and still require 'category' (enforced at the API layer). Valid category values can be found in section "5.1 Content Categories" in the [OpenRTB API Specification] (https://github.com/openrtb/OpenRTB/blob/master/OpenRTB-API-Specification-Version-2-3-1-FINAL.pdf)
    - `landing_url` string — URL of the final destination page the audience users will be redirected to. Length of the URL should not exceed 10000 characters.
    - `categories` string[] — Multiple IAB categories of the web product. When creating a product, provide exactly one of 'category' or 'categories'; the other field is derived automatically. Providing both is rejected. Valid category values can be found in section "5.1 Content Categories" in the [OpenRTB API Specification] (https://github.com/openrtb/OpenRTB/blob/master/OpenRTB-API-Specification-Version-2-3-1-FINAL.pdf).
  - `dynamic_creative_property` ProductDynamicCreativeProperty — Dynamic Creative specific properties.
    - `permission` boolean — Permission to use dynamic CreativeGroups.
  - `suspension_history` ProductSuspensionAction[] — List of suspension actions. It is sorted by timestamp in descending order, so the first one is the current suspension result.
    - `user_name` string — Name who judges the product to be suspended.
    - `user_email` string — Email who judges the product to be suspended.
    - `reason` string — The reason for the product suspension.
    - `kind` 'UNKNOWN_KIND' | 'CREATE' | 'UPDATE' — The kind to represent whether the current action is newly created, or is for updating the previous action. - CREATE: This suspension action is independently created. - UPDATE: This suspension action is for updating the previous suspension action.
    - `type` 'UNKNOWN_TYPE' | 'SUSPEND_UNTIL' | 'SUSPEND_INDEFINITELY' | 'STOP_SUSPENSION' — The type which the current action achieves. - SUSPEND_UNTIL: The current action is for product suspension until someday. - SUSPEND_INDEFINITELY: The current action is for product suspension indefinitely. - STOP_SUSPENSION: The current action is to stop product suspension.
    - `effective_from` string, date-time — The time from the app suspension will have been effective.
    - `effective_until` string, date-time — The time until the app suspension will have been effective. If the value of Type is set to STOP_SUSPENSION, SUSPEND_INDEFINITELY, there is no need to enter a value and the system automatically enters a value for you.
    - `created_at` string, date-time — The time when the current suspension action is created.
  - `created_at` string, date-time — Created time.
  - `updated_at` string, date-time — Last updated time. Should not modify on the client side.

## Response `200`

A successful response.

- MessagesCreateProductResponse
  - `product` DspProduct — Product represents an app (per device OS) or a website that an AdAccount want to promote with a Campaign. A Campaign should be associated with a single Product.
    - `id` string — Unique identifier of the Product. Automatically set by server on creation.
    - `ad_account_id` string — The ID of the AdAccount the Product belongs to.
    - `title` string, required — A descriptive name of the Product.
    - `description` string — A short description of the Product.
    - `advertiser_domain` string, required — Advertiser domain (e.g., "ford.com"). Usually the domain of AdAccounts's web page. From v1.7.4, it should be non empty if the value of allow_empty_advertiser_domain is false. If the value is empty, some exchanges may deny campaigns under the product.
    - `allow_empty_advertiser_domain` boolean — A flag to allow empty value of advertiser_domain. Setting this flag to true acknowledges that some exchanges may deny campaigns if the advertiser_domain is empty. From v1.7.4, the value should be true if the value of advertiser_domain is empty.
    - `device_os` 'UNKNOWN_DEVICE_OS' | 'ANDROID' | 'IOS' | 'VERSATILE' | 'MOBILE_WEB' | 'MACOS' | 'WINDOWS' | 'NEXT_VERSATILE' — Enumeration of device OS types supported by Moloco Ads. This value is not part of the specification. - ANDROID: Android device OS. - IOS: iOS device OS. - VERSATILE: Product with multiple OSes. Specifically for CTV. - MOBILE_WEB: OS for mobile web traffic. - MACOS: OS for MacOS traffic. - WINDOWS: OS for Windows traffic. - NEXT_VERSATILE: OS for Next web product.
    - `developer_name` string — The developer name of the Product. Some publishers request the sponsor information for the native Creative. The value of developer_name will be used to fill that information. Please note that this value could be displayed on user's screen. If this field is empty, native Creative's title will be used.
    - `type` 'UNKNOWN_TYPE' | 'APP' | 'WEB', required — Product type. - UNKNOWN_TYPE: This value is not part of the specification. - APP: App type. - WEB: Web type.
    - `app` ProductAppProperties — AppProperties defines the App type Product specific properties. Should contain only one of 'app' or 'web'.
      - `bundle_id` string, required — App bundle ID. Immutable.
      - `category` string — The main IAB content category of the App. This field is now output only and will be removed after v1.10. Before that, it is auto-filled from the categories field. Please use 'categories' field instead. Valid category values can be found in section "5.1 Content Categories" in the [OpenRTB API Specification] (https://github.com/openrtb/OpenRTB/blob/master/OpenRTB-API-Specification-Version-2-3-1-FINAL.pdf).
      - `categories` string[] — The IAB categories of the App. All the categories must be valid IAB categories. On create Product, the system checks the App Metadata Inventory: if the app is found, the Inventory values override user input; otherwise, the API uses the provided input. This field is editable only when the app is not in Inventory, and becomes read-only if the app exists there. Valid category values can be found in section "5.1 Content Categories" in the [OpenRTB API Specification] (https://github.com/openrtb/OpenRTB/blob/master/OpenRTB-API-Specification-Version-2-3-1-FINAL.pdf).
      - `category_readable` string
      - `rating` number, double — App rating in the range of [0, 5].
      - `rating_cnt` string, int64
      - `app_store_url` string — App store URL for Google Play, Apple App Store or Other App Markets.
      - `available_countries` string[] — Country codes where the app is available in the store. The value format is ISO-3166-1 Alpha-2 using uppercase letters only, such as "KR" or "US".
      - `unavailable_countries` string[] — Country codes where the app is unavailable in the store. The value format is ISO-3166-1 Alpha-2 using uppercase letters only, such as "KR" or "US".
      - `rtb_bundle_ids` string[] — RTB bundle names that related to the target app for which a Campaign runs. This field is useful when the target app and/or its family apps send out bid requests to the exchanges: (1) by nature, the Campaign must not deliver ad to the AdAccount's own apps; (2) it's better to ignore such apps for ads serving model training.
      - `postback_integration` DspPostbackIntegration — PostbackIntegration represents the postback integration information.
        - `mmp` 'UNKNOWN_TRACKING_COMPANY' | 'KOCHAVA' | 'ADJUST' | 'MAT' | 'MOLOCO_PIXEL' | 'APPSFLYER' | 'ADBRIX' | 'WEB' | 'GENERIC' | 'TRACKFNT' | 'AIRBRIDGE' | 'MOLOCO_E2E' | 'APSALAR' | 'BRANCH' | 'TENJIN' | 'SINGULAR' | 'ADBRIX_V2' | 'TRAFFICGUARD' | 'GAMELOFT' | 'SKADNETWORK' | 'MYTRACKER' | 'MOLOCO_RMP' | 'MOLOCO_PIXEL_V2' | 'JUSTTRACK' | 'SHOPEE' | 'KOCHAVA_FOR_PUBLISHER' | 'GAMESIGHT' | 'CAULY' | 'HASOFFER' | 'ADACTION' | 'CURATE' — Enumeration for tracking companies supported by Moloco Ads. - WEB: Unnamed trackers - AIRBRIDGE: Moloco's e2e tracker (test purpose only) - KOCHAVA_FOR_PUBLISHER: Kochava's CTV to web event dedicated tracking company.
        - `bundle_id` string — bundle_id to be used in the MMP integration. This corresponds to app_bundle in postback table. We've relied on the identifier sent by the tracker to keep track of events in our internal database. When we want to target to the audience of a Campaign, we need to exactly specify the identifier in the target description. Unfortunately, it depends on tracker's policy especially for iOS app as follows: - Appsflyer: "id" + NUMBER, where NUMBER is app bundle. - Tune: independent string to NUMBER. e.g., memebox is denoted as "com.memebox.ios.memebox" while app bundle is 896990789 - Adjust: same with the app_bundle - trackfnt: same with the app_bundle Note that 'bundle' field will be used as tracking bundle if 'tracking_bundle' is not given. In many case, this field can be filled after we receive the very first event from tracker for an app.
      - `mmp_integration` DspMmpIntegration — MmpIntegration represents the MMP integration information.
        - `id` string — The unique identifier of the MmpIntegration.
        - `mmp_bundle_id` string — Exact key which is used in MMP.
        - `mmp` 'UNKNOWN_TRACKING_COMPANY' | 'KOCHAVA' | 'ADJUST' | 'MAT' | 'MOLOCO_PIXEL' | 'APPSFLYER' | 'ADBRIX' | 'WEB' | 'GENERIC' | 'TRACKFNT' | 'AIRBRIDGE' | 'MOLOCO_E2E' | 'APSALAR' | 'BRANCH' | 'TENJIN' | 'SINGULAR' | 'ADBRIX_V2' | 'TRAFFICGUARD' | 'GAMELOFT' | 'SKADNETWORK' | 'MYTRACKER' | 'MOLOCO_RMP' | 'MOLOCO_PIXEL_V2' | 'JUSTTRACK' | 'SHOPEE' | 'KOCHAVA_FOR_PUBLISHER' | 'GAMESIGHT' | 'CAULY' | 'HASOFFER' | 'ADACTION' | 'CURATE' — Enumeration for tracking companies supported by Moloco Ads. - WEB: Unnamed trackers - AIRBRIDGE: Moloco's e2e tracker (test purpose only) - KOCHAVA_FOR_PUBLISHER: Kochava's CTV to web event dedicated tracking company.
        - `ownership` boolean — Whether the Product's AdAccount has ownership for the MmpIntegration.
        - `status` 'UNKNOWN_STATUS' | 'UNDER_REVIEW' | 'DENIED' | 'ACTIVE'
        - `denied_reason` string — Review denied reason if its status is DENIED.
        - `cv_config_item` MmpIntegrationConversionValueConfigurationItem — Conversion value configuration. Show the valid item among the history in the storage entity. (Most recent item of which the effective date is not later than current date.) Use case in MCP: https://help.moloco.com/hc/en-us/articles/1500012981641-SKAdNetwork-Conversion-Value-Configuration- .
          - `effective_date` string — The start date of the CV configuration in the form of YYYY-MM-DD.
          - `scheme` 'UNKNOWN_CONVERSION_VALUE_SCHEME' | 'CONVERSION_VALUE_SCHEME_SINGLE_EVENT' | 'CONVERSION_VALUE_SCHEME_MULTIPLE_EVENTS' | 'CONVERSION_VALUE_SCHEME_CUSTOM_EVENTS' | 'CONVERSION_VALUE_SCHEME_SKAN_V4_EVENTS'
          - `cv_single` ConversionValueConfigurationItemCvConfigurationForSingleEvent
            - `cv_revenue_events` object — Information on relationships between conversion value and (event name & revenue interval) for single event scheme. The key of this map is the registered conversion value between 1 to 63. The value of this map is a EventInfo message. EventInfo without revenue value should be unique. For the same event name, conversion value should be consecutive. Range min value cannot be smaller than previous range's max value. At least 4 Purchase Value should be registered for each event.
          - `cv_multi` ConversionValueConfigurationItemCvConfigurationForMultipleEvents
            - `cv_events` object — Information on relationships between conversion value and event name for multiple events scheme. The key of this map is the registered conversion value between 0 to 5. The value of this map is the event name.
          - `cv_custom` ConversionValueConfigurationItemCvConfigurationForCustomEvents
            - `cv_events` object — Information on relationships between conversion value and events for custom event scheme. The key of this map is the registered conversion value between 1 to 63. The value of this map is the list of events for each conversion value.
          - `cv_skan_v4` ConversionValueConfigurationItemCvConfigurationForSkanV4Events
            - `postbacks` CvConfigurationForSkanV4EventsPostback[]
              - …
          - `auto_refresh` ConversionValueConfigurationItemCvConfigurationAutoRefresh — Settings for automatically importing and updating SKAdNetwork conversion value configuration from MMP.
            - `enable_auto_refresh` boolean — Enables automatically importing the latest SKAdNetwork CV configuration from the integrated MMP and updating CV config items.
            - `refresh_result` 'UNKNOWN' | 'OK' | 'ERROR'
            - `refresh_error_message` string — Auto refresh error message in case the refresh request failed.
            - `last_auto_refreshed_at` string, date-time — Timestamp when the last auto SKAdNetwork CV configuration refresh occurred.
        - `mmp_context` MmpIntegrationMmpContext
          - `adjust` MmpContextAdjustContext
            - `url_host_universal_link` string
            - `url_host_branded_link` string
        - `updated_at` string, date-time — Last updated time. Should not modify on the client side.
        - `allow_fingerprinting` boolean — Whether the app owner has allowed the MMP's fingerprinting for attributions.
        - `fingerprinting_last_auto_refreshed_at` string, date-time — Timestamp for last update of "allow_fingerprinting".
      - `skadn_mmp_integration` DspMmpIntegration — MmpIntegration represents the MMP integration information.
        - `id` string — The unique identifier of the MmpIntegration.
        - `mmp_bundle_id` string — Exact key which is used in MMP.
        - `mmp` 'UNKNOWN_TRACKING_COMPANY' | 'KOCHAVA' | 'ADJUST' | 'MAT' | 'MOLOCO_PIXEL' | 'APPSFLYER' | 'ADBRIX' | 'WEB' | 'GENERIC' | 'TRACKFNT' | 'AIRBRIDGE' | 'MOLOCO_E2E' | 'APSALAR' | 'BRANCH' | 'TENJIN' | 'SINGULAR' | 'ADBRIX_V2' | 'TRAFFICGUARD' | 'GAMELOFT' | 'SKADNETWORK' | 'MYTRACKER' | 'MOLOCO_RMP' | 'MOLOCO_PIXEL_V2' | 'JUSTTRACK' | 'SHOPEE' | 'KOCHAVA_FOR_PUBLISHER' | 'GAMESIGHT' | 'CAULY' | 'HASOFFER' | 'ADACTION' | 'CURATE' — Enumeration for tracking companies supported by Moloco Ads. - WEB: Unnamed trackers - AIRBRIDGE: Moloco's e2e tracker (test purpose only) - KOCHAVA_FOR_PUBLISHER: Kochava's CTV to web event dedicated tracking company.
        - `ownership` boolean — Whether the Product's AdAccount has ownership for the MmpIntegration.
        - `status` 'UNKNOWN_STATUS' | 'UNDER_REVIEW' | 'DENIED' | 'ACTIVE'
        - `denied_reason` string — Review denied reason if its status is DENIED.
        - `cv_config_item` MmpIntegrationConversionValueConfigurationItem — Conversion value configuration. Show the valid item among the history in the storage entity. (Most recent item of which the effective date is not later than current date.) Use case in MCP: https://help.moloco.com/hc/en-us/articles/1500012981641-SKAdNetwork-Conversion-Value-Configuration- .
          - `effective_date` string — The start date of the CV configuration in the form of YYYY-MM-DD.
          - `scheme` 'UNKNOWN_CONVERSION_VALUE_SCHEME' | 'CONVERSION_VALUE_SCHEME_SINGLE_EVENT' | 'CONVERSION_VALUE_SCHEME_MULTIPLE_EVENTS' | 'CONVERSION_VALUE_SCHEME_CUSTOM_EVENTS' | 'CONVERSION_VALUE_SCHEME_SKAN_V4_EVENTS'
          - `cv_single` ConversionValueConfigurationItemCvConfigurationForSingleEvent
            - `cv_revenue_events` object — Information on relationships between conversion value and (event name & revenue interval) for single event scheme. The key of this map is the registered conversion value between 1 to 63. The value of this map is a EventInfo message. EventInfo without revenue value should be unique. For the same event name, conversion value should be consecutive. Range min value cannot be smaller than previous range's max value. At least 4 Purchase Value should be registered for each event.
          - `cv_multi` ConversionValueConfigurationItemCvConfigurationForMultipleEvents
            - `cv_events` object — Information on relationships between conversion value and event name for multiple events scheme. The key of this map is the registered conversion value between 0 to 5. The value of this map is the event name.
          - `cv_custom` ConversionValueConfigurationItemCvConfigurationForCustomEvents
            - `cv_events` object — Information on relationships between conversion value and events for custom event scheme. The key of this map is the registered conversion value between 1 to 63. The value of this map is the list of events for each conversion value.
          - `cv_skan_v4` ConversionValueConfigurationItemCvConfigurationForSkanV4Events
            - `postbacks` CvConfigurationForSkanV4EventsPostback[]
              - …
          - `auto_refresh` ConversionValueConfigurationItemCvConfigurationAutoRefresh — Settings for automatically importing and updating SKAdNetwork conversion value configuration from MMP.
            - `enable_auto_refresh` boolean — Enables automatically importing the latest SKAdNetwork CV configuration from the integrated MMP and updating CV config items.
            - `refresh_result` 'UNKNOWN' | 'OK' | 'ERROR'
            - `refresh_error_message` string — Auto refresh error message in case the refresh request failed.
            - `last_auto_refreshed_at` string, date-time — Timestamp when the last auto SKAdNetwork CV configuration refresh occurred.
        - `mmp_context` MmpIntegrationMmpContext
          - `adjust` MmpContextAdjustContext
            - `url_host_universal_link` string
            - `url_host_branded_link` string
        - `updated_at` string, date-time — Last updated time. Should not modify on the client side.
        - `allow_fingerprinting` boolean — Whether the app owner has allowed the MMP's fingerprinting for attributions.
        - `fingerprinting_last_auto_refreshed_at` string, date-time — Timestamp for last update of "allow_fingerprinting".
      - `content_rating` string — Content rating(App store age information) of the App.
      - `storekit_enabled` boolean — StoreKit can be applied only for iOS app.
      - `autoinline_enabled` boolean — AutoInline can be applied only for Android app.
      - `localized_app_name` object
      - `localized_app_icon_url` object — Field for url of app icon.
      - `localized_app_screenshots` object — App screenshots from the app store.
      - `app_event_types` object — Information on relationships between in-app events and its event type. This field is to categorize in-app events and categorized event types for each in-app event are used to optimize training of ML model.
      - `description` string
      - `short_description` string — Short description (promo text) from the app store.
      - `ios_primary_measurement` 'IOS_PRIMARY_MEASUREMENT_UNKNOWN' | 'IOS_PRIMARY_MEASUREMENT_NONE' | 'IOS_PRIMARY_MEASUREMENT_SKAN' | 'IOS_PRIMARY_MEASUREMENT_MMP' — Primary measurement used for iOS apps. - IOS_PRIMARY_MEASUREMENT_UNKNOWN: Zero value. Every non-iOS app must have this value. - IOS_PRIMARY_MEASUREMENT_NONE: Unset value for iOS app. It means the primary measurement is not decided yet. - IOS_PRIMARY_MEASUREMENT_SKAN: SKAdNetwork (SKAN) - IOS_PRIMARY_MEASUREMENT_MMP: MMP Probabilistic Attribution
      - `ios_secondary_measurement` 'IOS_SECONDARY_MEASUREMENT_UNKNOWN' | 'IOS_SECONDARY_MEASUREMENT_NONE' | 'IOS_SECONDARY_MEASUREMENT_NA' | 'IOS_SECONDARY_MEASUREMENT_SKAN' | 'IOS_SECONDARY_MEASUREMENT_MMP' | 'IOS_SECONDARY_MEASUREMENT_OTHER_MMP' | 'IOS_SECONDARY_MEASUREMENT_OTHER_3P' | 'IOS_SECONDARY_MEASUREMENT_INCREMENTALITY' | 'IOS_SECONDARY_MEASUREMENT_CUSTOM' — Secondary measurement used for iOS apps. - IOS_SECONDARY_MEASUREMENT_UNKNOWN: Zero value. Every non-iOS app must have this value. - IOS_SECONDARY_MEASUREMENT_NONE: Unset value for iOS app. It means the secondary measurement is not decided yet. - IOS_SECONDARY_MEASUREMENT_NA: Not applicable. It means the iOS app does not use any secondary measurement. - IOS_SECONDARY_MEASUREMENT_SKAN: SKAdNetwork (SKAN). SKAN cannot be configured as both the primary and secondary measurement. If a secondary measurement is not required, use 'NA'. - IOS_SECONDARY_MEASUREMENT_MMP: MMP Probabilistic Attribution. MMP cannot be configured as both the primary and secondary measurement. If a secondary measurement is not required, use 'NA'. - IOS_SECONDARY_MEASUREMENT_OTHER_MMP: Other MMP measurements (e.g., unified iOS reporting, AppsFlyer SSOT, etc.) - IOS_SECONDARY_MEASUREMENT_OTHER_3P: Other 3P measurement tool (e.g., some customers are using other BI tools) - IOS_SECONDARY_MEASUREMENT_INCREMENTALITY: Incrementality measurement - IOS_SECONDARY_MEASUREMENT_CUSTOM: Custom measurement
      - `ios_custom_measurement` string
    - `web` ProductWebProperties — WebProperties defines the Web type Product specific properties. Should contain only one of 'app' or 'web'.
      - `category` string — The main IAB content category of the web product. When creating a WEB product, provide exactly one of 'category' or 'categories'; the other field is derived automatically. Providing both is rejected. REQUIRED was dropped to allow 'categories'-only WEB creates; BRAND products reuse this message via 'brand.web' and still require 'category' (enforced at the API layer). Valid category values can be found in section "5.1 Content Categories" in the [OpenRTB API Specification] (https://github.com/openrtb/OpenRTB/blob/master/OpenRTB-API-Specification-Version-2-3-1-FINAL.pdf)
      - `landing_url` string — URL of the final destination page the audience users will be redirected to. Length of the URL should not exceed 10000 characters.
      - `categories` string[] — Multiple IAB categories of the web product. When creating a product, provide exactly one of 'category' or 'categories'; the other field is derived automatically. Providing both is rejected. Valid category values can be found in section "5.1 Content Categories" in the [OpenRTB API Specification] (https://github.com/openrtb/OpenRTB/blob/master/OpenRTB-API-Specification-Version-2-3-1-FINAL.pdf).
    - `dynamic_creative_property` ProductDynamicCreativeProperty — Dynamic Creative specific properties.
      - `permission` boolean — Permission to use dynamic CreativeGroups.
    - `suspension_history` ProductSuspensionAction[] — List of suspension actions. It is sorted by timestamp in descending order, so the first one is the current suspension result.
      - `user_name` string — Name who judges the product to be suspended.
      - `user_email` string — Email who judges the product to be suspended.
      - `reason` string — The reason for the product suspension.
      - `kind` 'UNKNOWN_KIND' | 'CREATE' | 'UPDATE' — The kind to represent whether the current action is newly created, or is for updating the previous action. - CREATE: This suspension action is independently created. - UPDATE: This suspension action is for updating the previous suspension action.
      - `type` 'UNKNOWN_TYPE' | 'SUSPEND_UNTIL' | 'SUSPEND_INDEFINITELY' | 'STOP_SUSPENSION' — The type which the current action achieves. - SUSPEND_UNTIL: The current action is for product suspension until someday. - SUSPEND_INDEFINITELY: The current action is for product suspension indefinitely. - STOP_SUSPENSION: The current action is to stop product suspension.
      - `effective_from` string, date-time — The time from the app suspension will have been effective.
      - `effective_until` string, date-time — The time until the app suspension will have been effective. If the value of Type is set to STOP_SUSPENSION, SUSPEND_INDEFINITELY, there is no need to enter a value and the system automatically enters a value for you.
      - `created_at` string, date-time — The time when the current suspension action is created.
    - `created_at` string, date-time — Created time.
    - `updated_at` string, date-time — Last updated time. Should not modify on the client side.
  - `postback_integration_statuses` DspPostbackIntegrationStatus[] — The postback integration status.
    - `device_os` 'UNKNOWN_DEVICE_OS' | 'ANDROID' | 'IOS' | 'VERSATILE' | 'MOBILE_WEB' | 'MACOS' | 'WINDOWS' | 'NEXT_VERSATILE' — Enumeration of device OS types supported by Moloco Ads. This value is not part of the specification. - ANDROID: Android device OS. - IOS: iOS device OS. - VERSATILE: Product with multiple OSes. Specifically for CTV. - MOBILE_WEB: OS for mobile web traffic. - MACOS: OS for MacOS traffic. - WINDOWS: OS for Windows traffic. - NEXT_VERSATILE: OS for Next web product.
    - `country` string — Country to which the postback is integrated with. The field should conform to [ISO-3166-1 Alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) format e.g. "KOR", "USA". It is used for filtering bid requests by country name.
    - `complete_percentage` number, double — Integration completion percentage per each country.
    - `integration_success` boolean — The flag that specifies the integration is completed in any country.

## Other responses

- `default` — Error. Detailed cause can be found in the `details` field.

---

[API](https://skmtc.net/moloco/apis/moloco-ads-campaign-management-api.md) · [All operations](https://skmtc.net/moloco/apis/moloco-ads-campaign-management-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/moloco/moloco-ads-campaign-management-api/versions/5c85d0910ac0/schema)
