---
title: Intents API
description: >-
The Intents API launches Shopify's native admin interfaces for creating and
editing resources. When your extension calls an intent, merchants complete
their changes using the standard Shopify admin UI, and your app receives the
result.
api_name: app-home
source_url:
html: >-
https://shopify.dev/docs/api/app-home/apis/user-interface-and-interactions/intents-api
md: >-
https://shopify.dev/docs/api/app-home/apis/user-interface-and-interactions/intents-api.md
---
# Intents API
The Intents API launches Shopify's native admin interfaces for creating and editing resources. When your extension calls an intent, merchants complete their changes using the standard Shopify admin UI, and your app receives the result. This means you don't need to build custom forms.
Use this API to build workflows like adding products to collections, creating multiple related resources in a sequence (like a product, collection, and discount for a promotion), opening specific resources for editing, or launching discount creation with pre-selected types.
### Use cases
* **Resource creation:** Invoke admin workflows to create products, collections, discounts, or other Shopify resources.
* **Resource editing:** Open existing Shopify resources for editing using their admin workflows.
* **Workflow completion:** Await the result of an intent to determine whether the merchant completed or cancelled the operation.
* **Admin consistency:** Use native Shopify admin workflows instead of building custom forms for resource management.
### invoke method
The `invoke` method launches a Shopify admin workflow for creating or editing resources. The method returns a promise that resolves to an activity handle you can await to get the workflow result.
The method accepts either:
* **String query:** `${action}:${type},${value}` with optional second parameter (`IntentQueryOptions`)
* **Object:** Properties for `action`, `type`, `value`, and `data`
### IntentQueryOptions parameters
Optional parameters for the `invoke` method when using the string query format:
* **`value`** (`string`): The resource identifier for edit operations (for example, `'gid://shopify/Product/123'`). Required when editing existing resources. Omit for create operations.
* **`data`** (`{ [key: string]: unknown }`): Additional context required by specific resource types. For example, discounts require a type, variants require a product ID, and metaobjects require a definition type.
### Supported resources
The following tables show which resource types you can create or edit, and what values you need to pass for `value` and `data` for each operation.
#### Article
[Articles](https://shopify.dev/docs/api/admin-graphql/latest/objects/Article) are blog posts published on the Online Store. Use this to create or edit articles for merchant blogs.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Article` | — | — |
| `edit` | `shopify/Article` | `gid://shopify/Article/{id}` | — |
#### Catalog
[Catalogs](https://shopify.dev/docs/api/admin-graphql/latest/interfaces/Catalog) are product groupings that organize products for different markets or channels. Use this to create or edit catalogs for B2B or multi-market selling.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Catalog` | — | — |
| `edit` | `shopify/Catalog` | `gid://shopify/Catalog/{id}` | — |
#### Collection
[Collections](https://shopify.dev/docs/api/admin-graphql/latest/objects/Collection) are groups of products organized manually or by automated rules. Use this to create or edit product collections.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Collection` | — | — |
| `edit` | `shopify/Collection` | `gid://shopify/Collection/{id}` | — |
#### Customer
[Customers](https://shopify.dev/docs/api/admin-graphql/latest/objects/Customer) are profiles with contact information, order history, and metadata. Use this to create or edit customer accounts.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Customer` | — | — |
| `edit` | `shopify/Customer` | `gid://shopify/Customer/{id}` | — |
#### Discount
[Discounts](https://shopify.dev/docs/api/admin-graphql/latest/objects/DiscountNode) are price reductions applied to products, orders, or shipping. Use this to create or edit discount codes and automatic discounts. Creating discounts requires specifying a discount type.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Discount` | — | `{ type: 'amount-off-product' \| 'amount-off-order' \| 'buy-x-get-y' \| 'free-shipping' }` |
| `edit` | `shopify/Discount` | `gid://shopify/Discount/{id}` | — |
#### Location
[Locations](https://shopify.dev/docs/api/admin-graphql/latest/objects/Location) are physical or virtual places where merchants store inventory and fulfill orders. Use this to create or edit locations for managing stock and fulfillment.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Location` | — | — |
| `edit` | `shopify/Location` | `gid://shopify/Location/{id}` | — |
#### Market
[Markets](https://shopify.dev/docs/api/admin-graphql/latest/objects/Market) are geographic regions with customized pricing, languages, and domains. Use this to create or edit markets for international selling.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Market` | — | — |
| `edit` | `shopify/Market` | `gid://shopify/Market/{id}` | — |
#### Menu
[Menus](https://shopify.dev/docs/api/admin-graphql/latest/objects/Menu) are navigation structures for the Online Store. Use this to create or edit menu structures and links.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Menu` | — | — |
| `edit` | `shopify/Menu` | `gid://shopify/Menu/{id}` | — |
#### Metafield definition
[Metafield definitions](https://shopify.dev/docs/api/admin-graphql/latest/objects/MetafieldDefinition) are schemas that define custom data fields for resources. Use this to create or edit metafield definitions that merchants can use to add structured data to products, customers, and other resources.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/MetafieldDefinition` | — | `{ ownerType: 'Product' }` |
| `edit` | `shopify/MetafieldDefinition` | `gid://shopify/MetafieldDefinition/{id}` | `{ ownerType: 'Product' }` |
#### Metaobject
[Metaobjects](https://shopify.dev/docs/api/admin-graphql/latest/objects/Metaobject) are custom structured data entries based on metaobject definitions. Use this to create or edit metaobject instances that store complex custom data. Requires a definition type.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Metaobject` | — | `{ type: 'shopify--color-pattern' }` |
| `edit` | `shopify/Metaobject` | `gid://shopify/Metaobject/{id}` | `{ type: 'shopify--color-pattern' }` |
#### Metaobject definition
[Metaobject definitions](https://shopify.dev/docs/api/admin-graphql/latest/objects/MetaobjectDefinition) are schemas that define the structure for metaobjects. Use this to create or edit metaobject definitions that determine the fields and data types for custom structured data.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/MetaobjectDefinition` | — | — |
| `edit` | `shopify/MetaobjectDefinition` | — | `{ type: 'my_metaobject_definition_type' }` |
#### Page
[Pages](https://shopify.dev/docs/api/admin-graphql/latest/objects/Page) are static content pages for the Online Store. Use this to create or edit pages like About Us, Contact, or custom informational pages.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Page` | — | — |
| `edit` | `shopify/Page` | `gid://shopify/Page/{id}` | — |
#### Product
[Products](https://shopify.dev/docs/api/admin-graphql/latest/objects/Product) are items sold in the store with pricing, inventory, and variants. Use this to create or edit products.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/Product` | — | — |
| `edit` | `shopify/Product` | `gid://shopify/Product/{id}` | — |
#### Product variant
[Product variants](https://shopify.dev/docs/api/admin-graphql/latest/objects/ProductVariant) are specific combinations of product options like size and color. Use this to create or edit product variants. Creating variants requires a parent product ID.
| Action | Type | Value | Data |
| - | - | - | - |
| `create` | `shopify/ProductVariant` | — | `{ productId: 'gid://shopify/Product/{id}' }` |
| `edit` | `shopify/ProductVariant` | `gid://shopify/ProductVariant/{id}` | `{ productId: 'gid://shopify/Product/{id}' }` |
**Note:** When editing products with variants, query the \\\product.has\Only\Default\Variant\\\ field first. If \true\, then use the \\shopify\/Product\\ edit intent. If \false\, then use the \\shopify\/Product\Variant\\ edit intent for specific variants.
#### Settings
Settings are the configuration options for the store. Use this to invoke and edit settings.
| Action | Type | Value | Data |
| - | - | - | - |
| `edit` | `settings/LocationDefault` | — | — |
| `edit` | `settings/OrderIdFormat` | — | — |
| `edit` | `settings/OrderProcessing` | — | — |
| `edit` | `settings/StoreDefaults` | — | — |
| `edit` | `settings/StoreDetails` | — | — |
* **invoke**
**{ (query: IntentQuery): Promise\; (intentURL: string, options?: IntentQueryOptions): Promise\; }**
Invoke an intent using the object syntax.
Invoke an intent using the URL syntax.
URL format: `action:type[,value][?params]`.
* **response**
**IntentResponseApi**
If in an intent workflow, provides mechanisms to resolve the intent with a given response.
### IntentQuery
* action
```ts
IntentAction
```
* data
Additional data required for certain intent types. For example: - Discount creation requires { type: 'amount-off-product' | 'amount-off-order' | 'buy-x-get-y' | 'free-shipping' } - ProductVariant creation requires { productId: 'gid://shopify/Product/123' } - Metaobject creation requires { type: 'shopify--color-pattern' }
```ts
{ [key: string]: unknown; }
```
* type
```ts
IntentType
```
* value
The resource identifier for edit actions (e.g., 'gid://shopify/Product/123').
```ts
string
```
### IntentAction
Supported actions that can be performed on resources. - \`create\`: Opens a creation workflow for a new resource - \`edit\`: Opens an editing workflow for an existing resource (requires \`value\` parameter)
```ts
'create' | 'edit'
```
### IntentType
Supported resource types that can be targeted by intents.
```ts
'shopify/Article' | 'shopify/Catalog' | 'shopify/Collection' | 'shopify/Customer' | 'shopify/Discount' | 'shopify/Market' | 'shopify/Menu' | 'shopify/MetafieldDefinition' | 'shopify/Metaobject' | 'shopify/MetaobjectDefinition' | 'shopify/Page' | 'shopify/Product' | 'shopify/ProductVariant'
```
### IntentActivity
Activity handle for tracking intent workflow progress.
* complete
A Promise that resolves when the intent workflow completes, returning the response.
```ts
Promise
```
### IntentResponse
Response object returned when the intent workflow completes.
```ts
ClosedIntentResponse | SuccessIntentResponse | ErrorIntentResponse
```
### ClosedIntentResponse
User dismissed or closed the workflow without completing it.
* code
```ts
'closed'
```
### SuccessIntentResponse
Successful intent completion.
* code
```ts
'ok'
```
* data
```ts
{ [key: string]: unknown; }
```
### ErrorIntentResponse
Failed intent completion.
* code
```ts
'error'
```
* issues
```ts
Issue[]
```
* message
```ts
string
```
### IntentQueryOptions
Options for invoking intents when using the query string format.
* data
Additional data required for certain intent types. For example: - Discount creation requires { type: 'amount-off-product' | 'amount-off-order' | 'buy-x-get-y' | 'free-shipping' } - ProductVariant creation requires { productId: 'gid://shopify/Product/123' } - Metaobject creation requires { type: 'shopify--color-pattern' }
```ts
{ [key: string]: unknown; }
```
* value
The resource identifier for edit actions (e.g., 'gid://shopify/Product/123').
```ts
string
```
### IntentResponseApi
* closed
If in an intent workflow, resolves the intent with a closed response.
```ts
() => Promise
```
* error
If in an intent workflow, resolves the intent with an error response and the provided message and issues, if any.
```ts
(message: string, issues?: Issue[]) => Promise
```
* ok
If in an intent workflow, resolves the intent with a success response and the provided data, if any.
```ts
(data?: { [key: string]: unknown; }) => Promise
```
### IntentResponse
The result returned when an intent workflow completes. Check the `code` property to determine the outcome:
* `'ok'`: The merchant completed the workflow successfully.
* `'error'`: The workflow failed due to validation or other errors.
* `'closed'`: The merchant cancelled without completing.
**`ClosedIntentResponse | SuccessIntentResponse | ErrorIntentResponse`**
### ClosedIntentResponse
* **code**
**'closed'**
### ErrorIntentResponse
* **code**
**'error'**
* **issues**
**Issue\[]**
* **message**
**string**
### SuccessIntentResponse
* **code**
**'ok'**
* **data**
**{ \[key: string]: unknown; }**
### ClosedIntentResponse
User dismissed or closed the workflow without completing it.
* code
```ts
'closed'
```
### SuccessIntentResponse
Successful intent completion.
* code
```ts
'ok'
```
* data
```ts
{ [key: string]: unknown; }
```
### ErrorIntentResponse
Failed intent completion.
* code
```ts
'error'
```
* issues
```ts
Issue[]
```
* message
```ts
string
```
Examples
## Preview

### Examples
* ####
##### Description
Launch the collection creation workflow in the Shopify admin. The merchant completes the form using the standard Shopify admin UI, and your app receives the result when the workflow completes.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Collection');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Collection created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the article creation workflow in the Shopify admin. The merchant writes and publishes the article using the standard Shopify admin UI, and your app receives the result when the workflow completes.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Article');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Article created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing article for editing in the Shopify admin. Pass the article's GID (for example, \`gid://shopify/Article/123456789\`) as the value. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Article', {
value: 'gid://shopify/Article/123456789',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Article updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the catalog creation workflow in the Shopify admin. The merchant completes the form using the standard Shopify admin UI, and your app receives the result when the workflow completes.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Catalog');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Catalog created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing catalog for editing in the Shopify admin. Pass the catalog's GID as the value. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Catalog', {
value: 'gid://shopify/Catalog/123456789',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Catalog updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing collection for editing in the Shopify admin. Pass the collection's GID as the value. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Collection', {
value: 'gid://shopify/Collection/987654321',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Collection updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the customer creation workflow in the Shopify admin. The merchant completes the form using the standard Shopify admin UI, and your app receives the result when the workflow completes.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Customer');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Customer created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing customer for editing in the Shopify admin. Pass the customer's GID as the value. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Customer', {
value: 'gid://shopify/Customer/456789123',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Customer updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the discount creation workflow in the Shopify admin. You must specify the discount type in the \`data\` parameter. Valid types are \`'amount-off-product'\`, \`'amount-off-order'\`, \`'buy-x-get-y'\`, and \`'free-shipping'\`. Your app receives the result when the merchant completes the workflow.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Discount', {
data: {type: 'amount-off-product'},
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Discount created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing discount for editing in the Shopify admin. Pass the discount's GID as the value. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Discount', {
value: 'gid://shopify/Discount/123456789',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Discount updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Create a new location. Opens the location creation workflow.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Location');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Location created:', response.data);
}
```
* ####
##### Description
Edit an existing location. Requires a location GID.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Location', {
value: 'gid://shopify/Location/123456789',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Location updated:', response.data);
}
```
* ####
##### Description
Edit the default location.
##### js
```js
const activity = await shopify.intents.invoke('edit:settings/LocationDefault');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Settings updated:', response.data);
}
```
* ####
##### Description
Launch the market creation workflow in the Shopify admin. The merchant completes the form using the standard Shopify admin UI, and your app receives the result when the workflow completes.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Market');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Market created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing market for editing in the Shopify admin. Pass the market's GID as the value. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Market', {
value: 'gid://shopify/Market/123456789',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Market updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the menu creation workflow in the Shopify admin. The merchant completes the form using the standard Shopify admin UI, and your app receives the result when the workflow completes.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Menu');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Menu created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing menu for editing in the Shopify admin. Pass the menu's GID as the value. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Menu', {
value: 'gid://shopify/Menu/123456789',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Menu updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the metafield definition creation workflow in the Shopify admin. You must specify the owner type in the \`data\` parameter (for example, \`'product'\`). Your app receives the result when the merchant completes the workflow.
##### js
```js
const activity = await shopify.intents.invoke(
'create:shopify/MetafieldDefinition',
{data: {ownerType: 'product'}},
);
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Metafield definition created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing metafield definition for editing in the Shopify admin. Pass the metafield definition's GID as the value and the owner type in the \`data\` parameter. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke(
'edit:shopify/MetafieldDefinition',
{
value: 'gid://shopify/MetafieldDefinition/123456789',
data: {ownerType: 'product'},
},
);
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Metafield definition updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the metaobject creation workflow in the Shopify admin. You must specify the metaobject type in the \`data\` parameter (for example, \`'shopify--color-pattern'\`). Your app receives the result when the merchant completes the workflow.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Metaobject', {
data: {type: 'shopify--color-pattern'},
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Metaobject created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing metaobject for editing in the Shopify admin. Pass the metaobject's GID as the value and the metaobject type in the \`data\` parameter. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Metaobject', {
value: 'gid://shopify/Metaobject/123456789',
data: {type: 'shopify--color-pattern'},
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Metaobject updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the metaobject definition creation workflow in the Shopify admin. The merchant completes the form using the standard Shopify admin UI, and your app receives the result when the workflow completes.
##### js
```js
const activity = await shopify.intents.invoke(
'create:shopify/MetaobjectDefinition',
);
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Metaobject definition created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing metaobject definition for editing in the Shopify admin. Pass the metaobject definition type in the \`data\` parameter. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke(
'edit:shopify/MetaobjectDefinition',
{data: {type: 'my_metaobject_definition_type'}},
);
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Metaobject definition updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the page creation workflow in the Shopify admin. The merchant completes the form using the standard Shopify admin UI, and your app receives the result when the workflow completes.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Page');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Page created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing page for editing in the Shopify admin. Pass the page's GID as the value. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Page', {
value: 'gid://shopify/Page/123456789',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Page updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the product creation workflow in the Shopify admin. The merchant completes the form using the standard Shopify admin UI, and your app receives the result when the workflow completes.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/Product');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Product created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing product for editing in the Shopify admin. Pass the product's GID as the value. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/Product', {
value: 'gid://shopify/Product/123456789',
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Product updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Launch the product variant creation workflow in the Shopify admin. You must specify the parent product's GID in the \`data\` parameter. Your app receives the result when the merchant completes the workflow.
##### js
```js
const activity = await shopify.intents.invoke('create:shopify/ProductVariant', {
data: {productId: 'gid://shopify/Product/123456789'},
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Product variant created:', response.data);
} else if (response.code === 'closed') {
console.log('Creation cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Open an existing product variant for editing in the Shopify admin. Pass the variant's GID as the value and the parent product's GID in the \`data\` parameter. Your app receives the updated data when the merchant saves their changes.
##### js
```js
const activity = await shopify.intents.invoke('edit:shopify/ProductVariant', {
value: 'gid://shopify/ProductVariant/123456789',
data: {productId: 'gid://shopify/Product/123456789'},
});
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Product variant updated:', response.data);
} else if (response.code === 'closed') {
console.log('Edit cancelled by user');
} else if (response.code === 'error') {
console.log('Error:', response.message);
}
```
* ####
##### Description
Invoke and edit store details.
##### js
```js
const activity = await shopify.intents.invoke('edit:settings/StoreDetails');
const response = await activity.complete;
if (response.code === 'closed') {
console.log('Settings closed:', response.data);
}
```
* ####
##### Description
Invoke and edit store defaults.
##### js
```js
const activity = await shopify.intents.invoke('edit:settings/StoreDefaults');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Settings updated:', response.data);
}
```
* ####
##### Description
Invoke and edit order ID format.
##### js
```js
const activity = await shopify.intents.invoke('edit:settings/OrderIdFormat');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Settings updated:', response.data);
}
```
* ####
##### Description
Invoke and edit order processing.
##### js
```js
const activity = await shopify.intents.invoke('edit:settings/OrderProcessing');
const response = await activity.complete;
if (response.code === 'ok') {
console.log('Settings updated:', response.data);
}
```
***