Skip to main content

Admin intents

Admin intents let you launch Shopify's native resource editors directly from your app. Instead of building custom forms for creating or editing Shopify resources, you call a single API and Shopify opens the same editors merchants already know. When they're done, they return to your app.

This guide covers how admin intents work, what you can do with them, and where they're available.


Your app calls shopify.intents.invoke() with an action (create or edit) and a type. Shopify opens the native editor as a contextual overlay. The merchant completes their action using the full-featured editor, and control returns to your app with the result.

shopify.intents.invoke('create:shopify/Collection');

Because the editors are built and maintained by Shopify, your app automatically benefits from new fields, validation rules, and UX improvements without any code changes.

Admin intents are available in the following contexts:


You can open the native editor for creating a new resource by specifying the create action and a resource type.

Create a new product

const result = await shopify.intents.invoke('create:shopify/Product');
The native product editor opened from an app using admin intents.

You can open the native editor for an existing resource by specifying the edit action, a resource type, and a resource GID.

Store settings work differently: a settings edit takes a settings type instead of a resource type, and no GID. See Supported resources for the Intents API reference in each context.

Edit an existing discount

const result = await shopify.intents.invoke('edit:shopify/Discount', {
value: 'gid://shopify/DiscountNode/123445',
});
The native discount editor opened from an app using admin intents.

Anchor to Import into Partner appsImport into Partner apps

The create and edit verbs route to Shopify's native editors. Partner apps can register their own import (and import+bulk) intents on shopify/Product, shopify/Customer, and shopify/Order, enabling you to hand a Shopify resource off to a Partner app's import workflow without leaving your flow. See Use extensions to surface app actions for the Partner-side authoring guide.

Pass a single GID in value when you want the Partner app to act on one Shopify resource at a time, for example when the merchant has selected a single product in your app's UI:

Hand a single product GID to a Partner's import handler

const result = await shopify.intents.invoke('import:shopify/Product', {
value: 'gid://shopify/Product/123445',
data: {
// Fields matching the Partner intent's inputSchema.
},
});

Pass an array of GIDs in value for the import+bulk variant when the Partner app should process many resources in a single workflow, for example a multi-select import flow:

Hand an array of product GIDs for bulk import

const result = await shopify.intents.invoke('import+bulk:shopify/Product', {
value: [
'gid://shopify/Product/123445',
'gid://shopify/Product/123446',
],
data: {
// Fields matching the Partner intent's inputSchema.
},
});

Unlike create: and edit:, which always route to Shopify's native editors, import: is fulfilled by Partner apps that have registered a matching intent. Resource type names are case-insensitive. shopify/Product and shopify/product resolve to the same intent.


Admin intents support Shopify resources like products, collections, customers, and discounts, plus edit-only intents for store settings areas. Some resource types require additional data parameters when you invoke them.

For the complete list of supported resource types, including required data parameters, see the Intents API reference for the context you're building in:



Was this page helpful?