Minis Manifest Schema
Loading ....
Raw Schema
{
"$id": "/manifest.schema.json",
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"title": "Shop Mini Manifest",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "The name of the Mini"
},
"handle": {
"type": "string",
"description": "A unique identifier for the Mini",
"pattern": "^(?:@[a-z0-9-*~][a-z0-9-*._~]*/)?[a-z0-9-~][a-z0-9-._~]*$"
},
"description": {
"type": "string",
"description": "The description of the Mini"
},
"contact_email": {
"type": "string",
"description": "An email address for receiving notifications.",
"format": "email"
},
"activation_subpath": {
"type": "string",
"description": "A route on your Mini's Shopify app that will be used to activate (enable entry points) your Mini for the first time. This route path will be appended to the end of the admin URL of the Shopify app. For example, the value 'activate' will correspond to the URL https://admin.shopify.com/store/example-store/apps/my-handle/activate",
"pattern": "^(?:[a-z0-9~-]+/)*[a-z0-9~-]+$"
},
"shopify_apps": {
"type": "object",
"description": "The Shopify apps associated with the Mini",
"properties": {
"production": {
"type": "integer",
"minimum": 1,
"description": "The Shopify app ID for production"
},
"development": {
"type": "array",
"description": "The Shopify app IDs for development",
"uniqueItems": true,
"items": {
"type": "integer",
"minimum": 1
}
}
},
"required": [
"production"
]
},
"notification_topics": {
"type": "array",
"description": "Specifies the reason for communication and the scope for messages. An example of a topic could be live streaming related notifications related to a merchant",
"items": {
"type": "object",
"required": [
"handle",
"description",
"scope"
],
"properties": {
"handle": {
"type": "string",
"description": "Text identifier of the topic"
},
"description": {
"type": "string",
"description": "Reason for the communication using the topic"
},
"scope": {
"type": "string",
"description": "The scope in which messages are processed for the topic. SHOP means each message will be processed in the scope of a specific merchant, PRODUCT means each message will be processed in the scope of a specific product",
"enum": [
"SHOP",
"PRODUCT"
]
}
}
}
},
"notification_templates": {
"type": "array",
"description": "Specify the message which will be sent to subscribers when notification is triggered by the mutation",
"items": {
"type": "object",
"required": [
"handle",
"topic_handle",
"title",
"body",
"cooldown_minutes"
],
"properties": {
"handle": {
"type": "string",
"description": "Text identifier of the template"
},
"topic_handle": {
"type": "string",
"description": "Reference to a notification topic"
},
"title": {
"type": "string",
"description": "Template of notification title, supports interpolation using the Liquid template language"
},
"body": {
"type": "string",
"description": "Template of notification body, supports interpolation using the Liquid template language"
},
"cooldown_minutes": {
"type": "number",
"description": "How often the template allowes to send the exact same message to the same user, in minutes"
}
}
}
},
"entry_points": {
"type": "array",
"description": "A list of entry points that the Mini supports",
"items": {
"type": "object",
"properties": {
"location": {
"type": "string",
"enum": [
"PRODUCT_PAGE",
"STORE_PAGE",
"PRODUCT_PAGE_CONTEXT_MENU",
"STORE_PAGE_CONTEXT_MENU",
"ORDER_CONFIRMATION_PAGE",
"ORDER_MANAGEMENT_PAGE"
]
},
"type": {
"type": "string",
"enum": [
"LINK",
"DEFAULT_CARD",
"IMAGE_COLLECTION",
"VIDEO_COLLECTION",
"EVENT_CARD_V2",
"PRODUCT_OFFER_CARD",
"IMAGE_COLLECTION_V2",
"VIDEO_COLLECTION_V2"
]
}
},
"allOf": [
{
"if": {
"properties": {
"type": {
"const": "LINK"
}
}
},
"then": {
"required": [
"location"
]
}
},
{
"if": {
"properties": {
"type": {
"const": "DEFAULT_CARD"
}
}
},
"then": {
"required": [
"location"
]
}
},
{
"if": {
"properties": {
"type": {
"const": "IMAGE_COLLECTION"
}
}
},
"then": {
"required": [
"location"
]
}
},
{
"if": {
"properties": {
"type": {
"const": "IMAGE_COLLECTION_V2"
}
}
},
"then": {
"required": [
"location"
]
}
},
{
"if": {
"properties": {
"type": {
"const": "VIDEO_COLLECTION"
}
}
},
"then": {
"required": [
"location"
]
}
},
{
"if": {
"properties": {
"type": {
"const": "VIDEO_COLLECTION_V2"
}
}
},
"then": {
"required": [
"location"
]
}
},
{
"if": {
"properties": {
"type": {
"const": "EVENT_CARD_V2"
}
}
},
"then": {
"required": [
"location"
]
}
}
]
}
},
"trusted_domains": {
"type": "array",
"description": "A list of domains that the minis uses to make requests and fetch information. Requests to domains that are not in this list will fail in production.",
"uniqueItems": true,
"items": {
"type": "string"
}
},
"features": {
"type": "array",
"description": "A list of optional features that your mini app has enabled",
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"FULL_BLEED_VIEWER"
]
}
}
},
"required": [
"name",
"handle",
"shopify_apps",
"contact_email"
]
}