> Deprecated: > The creation of new marketing activity app extensions is deprecated. Only existing extensions can still be managed. If you have an existing marketing activity app extension and would like to continue to manage it, please migrate it to CLI following the [migration guide](/docs/apps/build/marketing-analytics/marketing-activities/migrate-extensions). The form that's associated with a marketing activity app extension is generated based on a set of components that you choose when you create it. Components are configurable pieces of UI that you can use to build out the specific functionality that your app requires. Although a form is generated based on the components that you choose, you can't customize its styling, layout, or workflows directly. ## How it works When an app user interacts with your marketing activity, Shopify calls your marketing activity [preload endpoint](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form) to render the field values that your app provides. To do this Shopify uses the components in JSON format, as defined in this document. The JSON format is also used for your app's other endpoints such as [create](/docs/api/marketing-activities/endpoints#create-a-marketing-activity) and [update](/docs/api/marketing-activities/endpoints#update-a-marketing-activity). ### Preload endpoint JSON output schema Responses from your app's [preload endpoint](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form) include the `form_data` at the top level with `field_name` and property key value pairs. ```json { "form_data": { "": { "": "" } } } ``` For the [dynamic standalone endpoint](/docs/api/marketing-activities/endpoints#dynamic-standalone-fields), responses from your app include `component_data` at the top level. Refer to the [typeahead component](/docs/api/marketing-activities/components#typeahead) for more information. ```json { "component_data": { "options": [{"label": "", "value": ""}] } } ``` ### Create or update JSON input schema When a user creates or updates a marketing activity, Shopify calls your app by sending the properties object with the included field names and corresponding values. ```json { ... "properties": { "": "" } } ``` ## Extensions configured with Shopify CLI [Shopify CLI](/docs/apps/build/cli-for-apps) builds and serves app extensions using information defined in a TOML file. Components are specified in the `fields` section of your marketing activity extension's TOML file. The following is an example TOML file:

For every component in `fields`, regardless of the type, the following subfields are mandatory:
Subfield Description
name Required The API identifier. Use snake_case: lowercase letters, numbers, and underscores only.
ui_type Required The type of the field component.
Each type of component requires different additional subfields. For a complete reference, and to determine the `ui_type` of the component you wish to configure, read on. ## Single line of text Use this component to let users provide text input when the expected input is short. ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
disabled Boolean Whether the input is disabled. Default: false.
help_text String The help text that's displayed under the component.
hidden Boolean Whether the component is hidden. Default: false.
max_length Number The maximum number of characters allowed.
min_length Number The minimum number of characters allowed.
placeholder String The hint text to display.
required Boolean Whether the component is marked as required. Default: true.
value String The value of the input.
#### Preload endpoint JSON output example The example JSON below defines the help text and value of the `ad_title` field defined using the Partner Dashboard. ```json { "form_data": { "ad_title": { "help_text": "Think of something creative!", "value": "Welcome to John's apparel store." } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `ad_title` field. ```json { ... "properties": { "ad_title": "Welcome to John's crazy apparel store." } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_type Required Must be one of text-single-line, text-email, text-tel, text-url
label Required String
required Required Boolean
help_text String
placeholder String
min_length Required Number
max_length Required Number
## Multiple lines of text Use this component when the expected input could be more than one line. The component will automatically grow to accommodate additional text. ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
disabled Boolean Whether the input is disabled. Default: false.
help_text String The help text that's displayed under the component.
hidden Boolean Whether the component is hidden. Default: false.
max_length Number The maximum number of characters allowed.
min_length Number The minimum number of characters allowed.
placeholder String The hint text to display.
required Boolean Whether the component is marked as required. Default: true.
value String The value of the input.
#### Preload endpoint JSON output example The example JSON below defines the help text and value of the `ad_body` field defined using the Partner Dashboard. ```json { "form_data": { "ad_body": { "help_text": "Include a lot of information about your product.", "value": "This shirt is the best.\n\nIt's made with high quality materials." } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `ad_body` field. ```json { ... "properties": { "ad_body": "These shorts are the best.\n\nThey're made with quality materials." } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_type Required text-multi-line
label Required String
required Required Boolean
help_text String
placeholder Required String
min_length Required Number
max_length Required Number
## Number Use this component to let users provide number input. ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
disabled Boolean Whether the input is disabled. Default: false.
help_text String The help text that's displayed under the component.
hidden Boolean Whether the component is hidden. Default: false.
max Number The maximum number allowed.
min Number The minimum number allowed.
required Boolean Whether the component is marked as required. Default: true.
step Number The interval between valid values. Default: 1.
value Number The value of the input.
#### Preload endpoint JSON output example The example JSON below defines the value of the `quantity` field defined using the Partner Dashboard. ```json { "form_data": { "quantity": { "value": 1 } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `quantity` field. ```json { ... "properties": { "quantity": 10 } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_type Required Must be one of number-float, number-integer
label Required String
required Required String
help_text String
min Required Number
max Required Number
step Required Number
## Select from choice list Use this component to let users select choices from a list. ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
choices Object[] The list of options to choose from.
disabled Boolean Whether the input is disabled. Default: false.
required Boolean Whether the component is marked as required. Default: true.
selected String[] A collection of selected choices.
hidden Boolean Whether the component is hidden. Default: false.
#### Preload endpoint JSON output example The example JSON below defines the choices and selected values of the `sizes` field defined using the Partner Dashboard. ```json { "form_data": { "sizes": { "choices": [ {"label": "Small", "value": "sm"}, {"label": "Medium", "value": "md", "disabled": true}, {"label": "Large", "value": "lg"} ], "selected": ["sm", "lg"] } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `sizes` field. ```json { ... "properties": { "sizes": ["sm"] } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_typeRequired Must be one of select-single, select-multiple
label Required String
required Required String
help_text String
choices Required Array: each item must contain label: String & value: String
## Budget Use this component to let users set budget amounts. > Note: > The currency property is required on the [preload API call](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
amount Numeric String The budget amount
currency* CurrencyCode The currency to be used for the budget (set by the preload endpoint).
disabled Boolean Whether the input is disabled. Default: false.
help_text String The help text that's displayed under the amount.
max_amount Numeric String The maximum budget amount
min_amount Numeric String The minimum budget amount
required Boolean Whether the component is marked as required. Default: true.
type String The type of budget (daily or lifetime).
use_daily_budget Boolean Whether the user can enter a daily budget. Default: false.
use_lifetime_budget Boolean Whether the user can enter a lifetime budget. Both this and use_daily_budget can be checked, and at least one of them must be checked. Default: false.
use_total_budget(deprecated) Boolean Whether the user can enter a total budget. Both this and use_daily_budget can be checked, and at least one of them must be checked. Default: false.
hidden Boolean Whether the component is hidden. Default: false.
#### Preload endpoint JSON output example The example JSON below defines the amount, currency, help text, range start, range end and scheduling of `budget` the field defined using the Partner Dashboard. ```json { "form_data": { "budget": { "amount": 5, "currency": "CAD", "help_text": "Your shop will perform best with a $20 daily budget." } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `budget` field. ```json { ... "properties": { "budget": { "amount": 20, "currency": "CAD", "type": "daily" } } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_typeRequired budget-schedule
label Required String
required Required String
help_text String
use_scheduling Boolean
use_end_date Boolean
use_daily_budget Required Boolean
use_lifetime_budget Required Boolean
## Schedule Use this component to let users provide a start and end date. ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
disabled Boolean Whether the input is disabled. Default: false.
help_text String The help text that's displayed under the component.
end_time Date The user's selected end date.
start_time Date The user's selected start date.
use_end_date Boolean Whether the user can select an end date (in addition to a start date). Default: false.
required Boolean Whether the component is marked as required. Default: true.
hidden Boolean Whether the component is hidden. Default: false.
#### Preload endpoint JSON output example The example JSON below hides the end date of the `start_at` field defined using the Partner Dashboard. ```json { "form_data": { "start_at": { "range_start": "2019-01-01T00:00:00.000Z", "use_end_date": false } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `start_at` field. ```json { ... "properties": { "start_at": { "start_time": "2019-01-01T00:00:00.000Z", } } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_typeRequired schedule
label Required String
required Required String
help_text String
use_end_date Required Boolean
## Product selection Use this component to let the user select one or more products and product images. ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
disabled Boolean Whether the input is disabled. Default: false.
help_text String The help text that's displayed under the resource picker.
max_resources Number The maximum number of selected resources allowed.
min_resources Number The minimum number of selected resources allowed.
required Boolean Whether the component is marked as required. Default: true.
value Product[] An array of selected resources.
hidden Boolean Whether the component is hidden. Default: false.
#### Product type
Name Type Description
id String The product's ID.
images {src: String; id?: String}[] The product's images.
image_url(deprecated) String The product's image. Note: Use images property to allow users to select product images.
#### Preload endpoint JSON output example The example JSON below defines the help text, maximum selected resources allowed and value of the `products` field defined using the Partner Dashboard. ```json { "form_data": { "products": { "help_text": "Choose products that are featured on your home page.", "max_resources": 3, "value": [ { "id": "gid://shopify/Product/5", "images": [ { "src": "https://shopify.com/images/1" } ] } ] } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `products` field. ```json { ... "properties": { "products": [ { "id": "gid://shopify/Product/5", "image_url": "https://cdn.shopify.com/s/files/1", "title": "Blue swim shorts", }, { "id": "gid://shopify/Product/6", "image_url": null, "title": "Straw hat", } ] } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_typeRequired product-picker
label Required String
required Required Boolean
help_text String
allow_product_image_selection Required Boolean
allow_uploaded_image_as_product_image Required Boolean
allow_free_image_as_product_image Required Boolean
min_resources Number
max_resources Number
min_image_select_per_product Number
max_image_select_per_product Number
## Discount selection Use this component to let the user select one or more discounts. ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
disabled Boolean Whether the input is disabled. Default: false.
help_text String The help text that's displayed under the resource picker.
max_resources Number The maximum number of selected resources allowed.
min_resources Number The minimum number of selected resources allowed.
required Boolean Whether the component is marked as required. Default: true.
value Object[] An array of selected resources.
hidden Boolean Whether the component is hidden. Default: false.
#### Preload endpoint JSON output example The example JSON below hides the end date of the `start_at` field that's defined in your Partner Dashboard. ```json { "form_data": { "discount": { "help_text": "Choose a discount for this activity.", "max_resources": 1, "value": [ { "id": "gid://shopify/PriceRule/1" } ] } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `discount` field. ```json { ... "properties": { "discount": [ { "id": "gid://shopify/PriceRule/1", "title": "BLACKFRIDAY10", "summary": "10% off entire order", "features": [], "status": "ACTIVE" } ] } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_typeRequired discount-picker
label Required String
required Required Boolean
help_text String
min_resources Number
max_resources Number
## Image selection Use this component to let the user either upload images to their shop or select images from their shop. ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
disabled Boolean Whether the input is disabled. Default: false.
help_text String The help text that's displayed under the resource picker.
max_resources Number The maximum number of selected resources allowed.
min_resources Number The minimum number of selected resources allowed.
required Boolean Whether the component is marked as required. Default: true.
value {src: String; id: String, altText: String, originalSrc (deprecated): String}[] An array of selected resources.
hidden Boolean Whether the component is hidden. Default: false.
#### Preload endpoint JSON output example The example JSON below defines the help text, maximum selected resources allowed and value of the `featured_images` field defined using the Partner Dashboard. ```json { "form_data": { "featured_images": { "help_text": "Choose an image for this activity.", "max_resources": 3, "value": [ { "id": "gid://shopify/ShopImage/1", "alt_text": "Blue sweater", "src": "https://cdn.myshopify.io/s/files/1/0000/0001/files/googlee.jpg" }, { "id": "4289", "alt_text": "Black friday!", "src": "https://burst.shopifycdn.com/photos/i-heart-black-friday.jpg" } ] } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `featured_images` field. ```json { ... "properties": { "featured_images": [ { "id":"gid://shopify/ShopImage/1", "src":"https://cdn.shopify.com/s/files/1/1/1/files/blue_shorts.png?v=1517010629", "alt_text":"Blue shorts" }, { "id":"gid://shopify/ShopImage/2", "src":"https://cdn.shopify.com/s/files/1/1/1/files/red_shorts.png?v=1517010629", "alt_text":"Red shorts" } ] } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_typeRequired image-picker
label Required String
required Required Boolean
help_text String
min_resources Number
max_resources Number
allow_free_images Required Number
alt_text_required Required Number
## Typeahead Use this component to allow users to quickly search for items from a list. > Note: > The typeahead component is populated by the [dynamic standalone endpoint](/docs/api/marketing-activities/endpoints#dynamic-standalone-fields) when the user interacts with the component. #### Dynamic standalone endpoint JSON schema ```json { "field_data": { "options": [{"label": "", "value": ""}] } } ``` To learn more about the dynamic standalone endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#dynamic-standalone-fields). ### Endpoint JSON properties The JSON representation of this component, used for marketing activity endpoints, is the following:
Name Type Description
field_name String The name of the field, specified when you create the form.
disabled Boolean Whether the input is disabled. Default: false.
placeholder String The hint text to display.
required Boolean Whether the component is marked as required. Default: true.
value Object[] A collection of selected choices.
hidden Boolean Whether the component is hidden. Default: false.
#### Preload endpoint JSON output example The example JSON below defines the value of the `colours` field defined using the Partner Dashboard. ```json { "form_data": { "colours": { "value": [ {"label": "Red", "value": "red"}, {"label": "Blue", "value": "blue"}, {"label": "Yellow", "value": "yellow"} ] } } } ``` To learn more about the preload endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#preload-a-marketing-activity-form). #### Create or update JSON input example The example below includes Shopify's response to your app with the user-provided value for the `colours` field. ```json { ... "properties": { "colours": [ {"label": "Red", "value": "red"}, {"label": "Blue", "value": "blue"} ] } } } ``` To learn more about the create or update endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#create-a-marketing-activity). #### Dynamic standalone endpoint JSON output example The example JSON below defines the options of the `colours` field defined using the Partner Dashboard. ```json { "field_data": { "options": [ {"label": "Red", "value": "red"}, {"label": "Blue", "value": "blue"}, {"label": "Yellow", "value": "yellow"} ] } } ``` To learn more about the dynamic standalone endpoint, refer to the [marketing activity endpoints](/docs/api/marketing-activities/endpoints#dynamic-standalone-fields). ### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_typeRequired type-ahead
label Required String
required Required Boolean
help_text String
placeholder Required String
## Title and body display text Use this component to provide extra information to the user about the task that they're completing. > Note: > The title and body display text component is configured using the Partner Dashboard. It can't be set on preload and is not included in form submission. ### Component properties
Name Type Description
title String The section title.
body String The section body.
Supports relative or secure HTTPS absolute links using markdown. For example:
Click [here](https://example.com) to set up your account.
or
Read more about [account setup](https://example.com).
hidden Boolean Whether the component is hidden. Default: false.
### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_typeRequired paragraph
heading String
body String
## Divider Use this component to group related components into sections. > Note: > The divider component is configured in the Partner Dashboard by hovering between components and providing a section title. It can't be set on preload and is not included in form submission. ### Component properties
Name Type Description
title String The section title.
hidden Boolean Whether the component is hidden. Default: false.
### CLI configuration To configure this component in your extension TOML, add a `fields` item entry with the following:
Name Type
ui_typeRequired divider
titleRequired String