App Manifests
Manifest Format​
The App Manifest is a JSON payload that describes the application metadata, its permissions, and webhook subscriptions.
See Manifest Object for reference.
Example of a manifest:
{
"id": "example.app.wonderful",
"version": "1.0.0",
"requiredSaleorVersion": "^3.13",
"name": "My Wonderful App",
"author": "My Wonderful Company",
"about": "My Wonderful App is a wonderful App for Saleor.",
"permissions": ["MANAGE_USERS", "MANAGE_STAFF"],
"appUrl": "http://localhost:3001/app",
"configurationUrl": "htpp://localhost:3001/configuration",
"tokenTargetUrl": "http://localhost:3001/register",
"dataPrivacy": "Lorem ipsum",
"dataPrivacyUrl": "http://localhost:3001/app-data-privacy",
"homepageUrl": "http://localhost:3001/homepage",
"supportUrl": "http://localhost:3001/support",
"brand": {
"logo": {
"default": "http://localhost:3001/default-logo.png"
}
},
"extensions": [
{
"label": "Create with Sample app",
"mount": "PRODUCT_OVERVIEW_CREATE",
"target": "POPUP",
"permissions": ["MANAGE_PRODUCTS"],
"url": "https://example.com/extension/"
},
{
"label": "Create with App and redirect",
"mount": "PRODUCT_OVERVIEW_CREATE",
"target": "APP_PAGE",
"permissions": ["MANAGE_PRODUCTS"],
"url": "/extension/redirect"
}
],
"webhooks": [
{
"name": "Order created",
"asyncEvents": ["ORDER_CREATED"],
"query": "subscription { event { ... on OrderCreated { order { id }}}}",
"targetUrl": "https://example.com/api/webhooks/order-created",
"isActive": false
},
{
"name": "Multiple order's events",
"asyncEvents": ["ORDER_CREATED", "ORDER_FULLY_PAID"],
"query": "subscription { event { ... on OrderCreated { order { id }} ... on OrderFullyPaid { order { id }}}}",
"targetUrl": "https://example.com/api/webhooks/order-event",
"isActive": true
}
]
}
From Saleor 3.23.23, each webhook can declare an optional identifier — an app-defined string (max 256 characters, unique per app) that lets the app reference one of its webhooks without storing its Saleor ID. It is exposed on the Webhook type and typed in @saleor/app-sdk 1.13+ as WebhookManifest.identifier.
The tokenTargetUrl field is optional. When omitted, Saleor will not send the auth token to the app during installation.
This is useful for apps that don't need to consume the Saleor protected API, such as static apps that only serve an iframe in the Dashboard.
Apps can be installed via manifest using appFetchManifest mutation.
Typings​
App Manifest is typed in TypeScript in @saleor/app-sdk package.
Use it with
import { AppManifest } from '@saleor/app-sdk/types'