[System] You are a VTEX documentation expert. You provide accurate, detailed information about VTEX platform, APIs, apps, and Store Framework development.

[User] Provide a guide on guides vtex io documentation engineering guidelines in VTEX.

[Assistant]
Documentation

[Feedback](https://read.calvincode.net/reader?url=https://docs.google.com/forms/d/e/1FAIpQLSfmnotPvPjw-SjiE7lt2Nt3RQgNUe10ixXZmuO2v9enOJReoQ/viewform?entry.1972292648=developers.vtex.com%26entry.1799503232=)

[GuidesLearn how to use our APIs and extend the VTEX platform.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides)

[API ReferenceExplore detailed information about our endpoints.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/api-reference)

[App DevelopmentLearn how to build cloud-based apps and integrations.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/app-development)

[Storefront DevelopmentExpress your brand identity creating unique storefronts.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/storefront-development)

[VTEX IO AppsFind pre-built solutions to grow your business.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/vtex-io-apps)

[TroubleshootingFind practical solutions to common development issues.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/troubleshooting)

[Release NotesStay up to date with our latest releases and bug fixes.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/updates/release-notes)

App Development

[What is VTEX IO](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-what-is-vtex-io)

---

[What is a VTEX App](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-what-is-a-vtex-app)

---

[Governance and shared security in VTEX IO apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/governance-and-shared-security-in-vtex-io-apps)

---

[Code samples and templates](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/code-samples)

---

[Getting Started](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-getting-started)

---

Project structure

---

[VTEX IO CLI](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-vtex-io-cli-installation-and-command-reference)

---

[Workspace](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-workspace)

---

Managing apps

---

Development guides

---

[Node apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/app-development-guides)

---

[GraphQL in VTEX IO](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/graphql-in-vtex-io)

---

[Policies and permissions](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-policies)

---

[A/B tests](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/ab-tests)

---

[Deployment](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-making-your-new-app-version-publicly-available)

---

[VTEX App Store](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-app-store)

[Becoming a registered VTEX App Store developer](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-becoming-a-registered-vtex-app-store-developer)

[Developing an app](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-developing-an-app)

[Setting your app's billing model](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-setting-your-apps-billing-model)

[Preparing your app for distribution](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-preparing-your-app-distribution)

[Submitting your app to the VTEX App Store](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-submitting-your-app-in-the-vtex-app-store)

[Using the Docs builder to publish app documentation](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/using-the-docs-builder-to-publish-app-documentation)

[App Store Guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-homologation-requirements-for-vtex-app-store)

[App monetization](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-business-guidelines-app-monetization)

[Marketing guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-business-guidelines-marketing-assets)

[User Experience guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-design-guidelines)

[Engineering guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines)

[Documentation guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-docs-guidelines)

---

[Edition Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/managing-edition-apps)

---

[Frequently asked questions](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-frequently-asked-questions)

---

[Guides](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides)

[API Reference](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/api-reference)

[App Development](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/app-development)

[Storefront Development](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/storefront-development)

[VTEX IO Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/vtex-io-apps)

[Troubleshooting](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/troubleshooting)

---

[Release Notes](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/updates/release-notes)

App Development

[What is VTEX IO](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-what-is-vtex-io)

---

[What is a VTEX App](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-what-is-a-vtex-app)

---

[Governance and shared security in VTEX IO apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/governance-and-shared-security-in-vtex-io-apps)

---

[Code samples and templates](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/code-samples)

---

[Getting Started](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-getting-started)

---

Project structure

---

[VTEX IO CLI](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-vtex-io-cli-installation-and-command-reference)

---

[Workspace](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-workspace)

---

Managing apps

---

Development guides

---

[Node apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/app-development-guides)

---

[GraphQL in VTEX IO](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/graphql-in-vtex-io)

---

[Policies and permissions](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-policies)

---

[A/B tests](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/ab-tests)

---

[Deployment](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-making-your-new-app-version-publicly-available)

---

[VTEX App Store](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-app-store)

[Becoming a registered VTEX App Store developer](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-becoming-a-registered-vtex-app-store-developer)

[Developing an app](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-developing-an-app)

[Setting your app's billing model](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-setting-your-apps-billing-model)

[Preparing your app for distribution](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-preparing-your-app-distribution)

[Submitting your app to the VTEX App Store](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-submitting-your-app-in-the-vtex-app-store)

[Using the Docs builder to publish app documentation](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/using-the-docs-builder-to-publish-app-documentation)

[App Store Guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-homologation-requirements-for-vtex-app-store)

[App monetization](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-business-guidelines-app-monetization)

[Marketing guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-business-guidelines-marketing-assets)

[User Experience guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-design-guidelines)

[Engineering guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines)

[Documentation guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-docs-guidelines)

---

[Edition Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/managing-edition-apps)

---

[Frequently asked questions](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-frequently-asked-questions)

---

[App Development](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/app-development)

[VTEX App Store](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-app-store)

[App Store Guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-homologation-requirements-for-vtex-app-store)

[Engineering guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines)

Engineering best practices

Refer to the following guidelines to guarantee the quality and usability of your VTEX IO app during development.

> Notice that you must respect these guidelines if you aim to publish your app at the VTEX App Store.

## Scalability and performance

Use the [VTEX IO](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-what-is-vtex-io) infrastructure to build and deploy your extensions. The VTEX IO development platform uses cloud computing to ensure that your app runs without bottlenecks 24/7.

### Using APIs efficiently

Efficiently utilizing APIs is paramount for optimal performance in your application. Whenever possible, leverage our pre-built [VTEX IO Clients](https://read.calvincode.net/reader?url=https://github.com/vtex/io-clients) to harness the following advantages:

* **Standardized code:** VTEX IO Clients streamline interfacing with various services, providing standardized code across all applications.
* **Automatic updates:** VTEX consistently updates VTEX IO Clients, delivering new features, resolving bugs, and ensuring compatibility with the latest technologies.
* **Simplified maintenance:** By relying on VTEX IO Clients, you eliminate the need for extensive code maintenance.

Avoid unnecessary or excessive API calls and ensure they are fast and scalable. Excessive API calls can degrade your app's performance, increasing response times. Unnecessary API calls or lack of proper use of our Clients can lead to security issues. For more information, see our [Clients](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-how-to-create-and-use-clients) documentation.

> **Performance of external systems**
>
> When you offer your app on the VTEX App Store, your app may become available to brands of all sizes across different time zones and business calendars. In this context, relying on a manual system with on-demand scalability can become a huge risk in terms of performance.

### Using the latest builders

[Builders](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-builders) work as an API responsible for configuring other IO services in your app. For developing and publishing apps for the VTEX App Store, the following builders must be up-to-date in your app's code:

* Node builder - version 7.x.
* React builder - version 3.x.
* Admin builder - version 1.x.
* Messages builder - version 1.x.
* Docs builder- version 0.x.
* Graphql builder -version 1.x.

## Versioning

When releasing a new version of your app, it's crucial to adhere to best practices. There are various types of versions to consider, including major, minor, and patch, as well as stable and beta releases. Select the appropriate version type based on the nature of the implemented changes. Special attention is required for breaking changes, which should always result in a new major version.

For more information, refer to the [SemVer standard](https://read.calvincode.net/reader?url=https://semver.org/) and our guide on [Releasing a new app version](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-releasing-a-new-app-version).

## Security

To ensure that all points of contact between our retailers, their customers, and other parts of the ecosystem are protected and secure, we test if your app respects regulations on data traffic, usage, and storage worldwide.

### Handling security breaches

Nevertheless, if you identify any security breaches after publishing your app, take the following measures:

1. [Open a ticket](https://read.calvincode.net/reader?url=https://help.vtex.com/en/tutorial/opening-tickets-to-vtex-support--16yOEqpO32UQYygSmMSSAM) requesting to remove your app from the VTEX App Store and avoid further installations of the unstable version.
2. [Open a support ticket](https://read.calvincode.net/reader?url=https://help.vtex.com/en/tutorial/opening-tickets-to-vtex-support--16yOEqpO32UQYygSmMSSAM) and notify us of the issue so that we can support retailers operating with this version and guide them on removing it from their stores.
3. Fix the security flaw and resubmit your application for homologation.

Once the new version is approved, the app will be available again in the VTEX App Store.

### Hardcoding VTEX appKey/appToken

Having an appKey/appToken exposed in your code can cause serious security issues, like unwanted access. Instead of using a VTEX appKey/appToken pair, apps should use the existing tokens (`ctx.authToken`, `ctx.vtex.storeUserAuthToken` or `ctx.vtex.adminUserAuthToken`). For more information, see [Connecting to VTEX Core Commerce APIs](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/how-to-connect-with-vtex-core-commerce-apis-using-vtex-io%23steps).

### Using an app token for a user-initiated action

For user-initiated actions, apps should use either `ctx.vtex.storeUserAuthToken` or `ctx.vtex.adminUserAuthToken` (as opposed to `ctx.authToken`). For more information, see [Connecting to VTEX Core Commerce APIs](https://read.calvincode.net/reader?url=https://developers.vtex.com/vtex-developer-docs/docs/how-to-connect-with-vtex-core-commerce-apis-using-vtex-io%23steps).

### Declaring broad policies

Outbound access policies (`outbound-access`) to VTEX resources should follow the [principle of least privilege](https://read.calvincode.net/reader?url=https://en.wikipedia.org/wiki/Principle%5Fof%5Fleast%5Fprivilege). In short, you only give access to what is really needed. For instance, the `path` should not be configured as `*`. See an example [here](https://read.calvincode.net/reader?url=https://github.com/vtex-apps/store-graphql/blob/684dcbbbd6e9cdbd121afd7802200856cb952d2b/manifest.json%23L107-L112) of how it should be done.

### Do not expose private information through public routes

As the name suggests, public routes do not require authentication when accessed from the frontend. Consequently, they should never reveal data sourced from private APIs, such as displaying a list of orders directly to the frontend. In this sense, a common mistake is failing to restrict routes intended exclusively for Admin usage. Additionally, keep in mind that GraphQL APIs are public by default, necessitating cautious schema design to avoid queries that inadvertently expose confidential information.

Access to REST APIs should be restricted using [policies](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-policies%23resource-based-policies). Access to GraphQL APIs should be restricted using directives, either [@auth](https://read.calvincode.net/reader?url=https://github.com/vtex/node-vtex-api/blob/08ea11d380997f5abf02455487b342caa74b2001/src/service/worker/runtime/graphql/schema/schemaDirectives/Auth.ts%23L66-L75) or a custom-made one.

### Isolate data between tenants

Single-tenant external systems should be used carefully. Data from one tenant must always be isolated from data from another tenant to prevent leakage and unwanted access. The isolation method will depend on the external system. One possible solution is to use the name (or other identifier) of the tenant in routes or as a parameter for access control or to define how the data is managed.

## Data privacy

### Persisting PII within VTEX

If using Master Data or VBase to store Personal Identifiable Information (PII), a mechanism must be in place to ensure compliance with the [Right to be Forgotten](https://read.calvincode.net/reader?url=https://en.wikipedia.org/wiki/Right%5Fto%5Fbe%5Fforgotten) or other similar data-protection practices. Possible solutions are to provide an option or endpoint in the app that erases the data, for instance, by using a delete operation with our Clients ([Master Data](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/create-master-data-crud-app%23delete), [VBase](https://read.calvincode.net/reader?url=https://github.com/vtex/node-vtex-api/blob/1b3c54976aa974619d0728fae4ed2fe076dbb551/src/clients/infra/VBase.ts%23L178)) or through the API ([Master Data v1](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/api-reference/masterdata-api%23delete-/api/dataentities/-acronym-/documents/-id-), [Master Data v2](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/api-reference/master-data-api-v2%23delete-/api/dataentities/-dataEntityName-/documents/-id-)).

### Sending PII to external service

We should ensure that all PII being shared externally is strictly necessary for the app to work. If you have any questions, reach out to us [via ticket](https://read.calvincode.net/reader?url=https://help.vtex.com/en/tutorial/opening-tickets-to-vtex-support--16yOEqpO32UQYygSmMSSAM).

## Usability

### Implementing internationalization (i18n) correctly

Ensure that all messages are [internationalized](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-multi-language-stores%23storefront-content-internationalization) using the `messages` builder. Also, i18n keys should start with the domain (`store/` for storefront and `admin/` for Admin) where they are used. Otherwise, they will not render properly. For more information, see our [reference](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-8-translating-the-component) for translating components.

### Avoid declaring routes with collision-prone paths

When declaring [routes](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-routes), generic paths (e.g., `/_v/orders/`, `/_v/settings`) should be avoided to reduce chances of collision with other apps.

To mitigate this risk, consider adopting a naming convention that includes a distinctive prefix, typically the name of your app, when defining routes. This simple practice effectively reduces the chances of conflicts and ensures that your app's routes remain uniquely identifiable and isolated from others.

### Creating custom Admin settings form

Our primary recommendation for defining the Admin settings form of your app is to leverage the [settingsSchema](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-manifest%23settingsschema) structure, as it caters to the majority of use cases effectively.

However, for more specific cases where the schema is insufficient, you can create your form as a page of an [Admin app](https://read.calvincode.net/reader?url=https://learn.vtex.com/docs/course-admin-lang-en). In such cases, our team will evaluate your requirements during the homologation process.

## Plug&Play

For homologation approval, your app must be plug-and-play. Those interested in your app should:

* Be able to install and configure it using only the VTEX Admin panel.
* Not considered external assistance to support the app implementation process.

## Support channel

Every app in the VTEX App Store must:

* Provide a direct support channel for retailers who install it, such as email, phone, ticketing tool, or a combination of these options.
* Have the first response time up to eight business hours in the developer's time zone. This requirement aims to ensure that store operations will not be affected by errors in third-party applications.

## Documentation

While [developing your app](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-developing-an-app) and [preparing the app for distribution](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-preparing-your-app-distribution), make sure to provide official documentation that supports future users in implementing and understanding your app.

The app documentation should include:

* Technical and commercial requirements for the app's operation.
* Installation and configuration guides.
* Answers to frequently asked questions.

For more information on the best practices for creating documentation, refer to [Documentation guidelines](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-docs-guidelines).

Contributors

2

[![Photo of the contributor](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/_next/image?url=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F7026595%3Fv%3D4%26w=64%26q=75)](https://github.com/henriquessb)

[![Photo of the contributor](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/_next/image?url=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F60782333%3Fv%3D4%26w=64%26q=75)](https://github.com/carolinamenezes)

Was this helpful?

Yes

No

[Suggest Edits (GitHub)](https://read.calvincode.net/reader?url=https://github.com/vtexdocs/dev-portal-content/edit/main/docs/guides/vtex-io/Perks/vtex-io-documentation-homologation-requirements-for-vtex-app-store/vtex-io-documentation-engineering-guidelines.md)

[User Experience guidelines« Previous](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines//docs/guides/vtex-io-documentation-design-guidelines)[Documentation guidelinesNext »](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines//docs/guides/vtex-io-documentation-docs-guidelines)

Contributors

2

[![Photo of the contributor](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/_next/image?url=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F7026595%3Fv%3D4%26w=64%26q=75)](https://github.com/henriquessb)

[![Photo of the contributor](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/_next/image?url=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F60782333%3Fv%3D4%26w=64%26q=75)](https://github.com/carolinamenezes)

ON THIS PAGE

[Scalability and performance](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23scalability-and-performance)

[Using APIs efficiently](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23using-apis-efficiently)[Using the latest builders](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23using-the-latest-builders)

[Versioning](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23versioning)

[Security](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23security)

[Handling security breaches](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23handling-security-breaches)[Hardcoding VTEX appKey/appToken](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23hardcoding-vtex-appkeyapptoken)[Using an app token for a user-initiated action](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23using-an-app-token-for-a-user-initiated-action)[Declaring broad policies](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23declaring-broad-policies)[Do not expose private information through public routes](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23do-not-expose-private-information-through-public-routes)[Isolate data between tenants](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23isolate-data-between-tenants)

[Data privacy](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23data-privacy)

[Persisting PII within VTEX](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23persisting-pii-within-vtex)[Sending PII to external service](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23sending-pii-to-external-service)

[Usability](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23usability)

[Implementing internationalization (i18n) correctly](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23implementing-internationalization-i18n-correctly)[Avoid declaring routes with collision-prone paths](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23avoid-declaring-routes-with-collision-prone-paths)[Creating custom Admin settings form](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23creating-custom-admin-settings-form)

[Plug&Play](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23plugplay)

[Support channel](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23support-channel)

[Documentation](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23documentation)

Was this helpful?

 Send feedback

[Suggest edits (GitHub)](https://read.calvincode.net/reader?url=https://github.com/vtexdocs/dev-portal-content/edit/main/docs/guides/vtex-io/Perks/vtex-io-documentation-homologation-requirements-for-vtex-app-store/vtex-io-documentation-engineering-guidelines.md)

Copy page

On this page

ON THIS PAGE

[Scalability and performance](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23scalability-and-performance)

[Using APIs efficiently](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23using-apis-efficiently)[Using the latest builders](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23using-the-latest-builders)

[Versioning](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23versioning)

[Security](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23security)

[Handling security breaches](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23handling-security-breaches)[Hardcoding VTEX appKey/appToken](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23hardcoding-vtex-appkeyapptoken)[Using an app token for a user-initiated action](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23using-an-app-token-for-a-user-initiated-action)[Declaring broad policies](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23declaring-broad-policies)[Do not expose private information through public routes](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23do-not-expose-private-information-through-public-routes)[Isolate data between tenants](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23isolate-data-between-tenants)

[Data privacy](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23data-privacy)

[Persisting PII within VTEX](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23persisting-pii-within-vtex)[Sending PII to external service](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23sending-pii-to-external-service)

[Usability](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23usability)

[Implementing internationalization (i18n) correctly](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23implementing-internationalization-i18n-correctly)[Avoid declaring routes with collision-prone paths](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23avoid-declaring-routes-with-collision-prone-paths)[Creating custom Admin settings form](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23creating-custom-admin-settings-form)

[Plug&Play](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23plugplay)

[Support channel](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23support-channel)

[Documentation](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-engineering-guidelines/docs/guides/vtex-io-documentation-engineering-guidelines%23documentation)

On this page

[Github](https://read.calvincode.net/reader?url=https://github.com/vtex-apps)[Help Center](https://read.calvincode.net/reader?url=https://help.vtex.com/)[Community](https://read.calvincode.net/reader?url=https://community.vtex.com/?%5Fga=2.198523433.743584735.1647618303-1974737580.1645714642)[Feedback](https://read.calvincode.net/reader?url=https://docs.google.com/forms/d/e/1FAIpQLSfmnotPvPjw-SjiE7lt2Nt3RQgNUe10ixXZmuO2v9enOJReoQ/viewform?entry.1972292648=developers.vtex.com%26entry.1799503232=)


[System] You are a VTEX documentation expert. You provide accurate, detailed information about VTEX platform, APIs, apps, and Store Framework development.

[User] Provide a guide on guides rewriter in VTEX.

[Assistant]
Documentation

[Feedback](https://read.calvincode.net/reader?url=https://docs.google.com/forms/d/e/1FAIpQLSfmnotPvPjw-SjiE7lt2Nt3RQgNUe10ixXZmuO2v9enOJReoQ/viewform?entry.1972292648=developers.vtex.com%26entry.1799503232=)

[GuidesLearn how to use our APIs and extend the VTEX platform.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides)

[API ReferenceExplore detailed information about our endpoints.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/api-reference)

[App DevelopmentLearn how to build cloud-based apps and integrations.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/app-development)

[Storefront DevelopmentExpress your brand identity creating unique storefronts.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/storefront-development)

[VTEX IO AppsFind pre-built solutions to grow your business.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/vtex-io-apps)

[TroubleshootingFind practical solutions to common development issues.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/troubleshooting)

[Release NotesStay up to date with our latest releases and bug fixes.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/updates/release-notes)

[Guides](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides)

[API Reference](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/api-reference)

[App Development](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/app-development)

[Storefront Development](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/storefront-development)

[VTEX IO Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/vtex-io-apps)

[Troubleshooting](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/troubleshooting)

---

[Release Notes](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/updates/release-notes)

Rewriter

Rewriter is the VTEX IO app responsible for managing the following three main types of [routes](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/vtex-io-documentation-routes): product, search, and navigation routes.

The first two are first-class entities in Rewriter, meaning Rewriter identifies these routes and directly forwards them to the rendering pipeline.

Navigation routes, in turn, are client-side defined routes related to custom paths and VTEX IO pre-defined templates, such as department, brand, and category routes. These routes can have a canonical path and a search query string.

In Rewriter, navigation routes are identified by the **internal** type, and routes used to redirect a route from one path to another are identified by the **redirect** type.

Rewriter includes functionalities to:

* Create an internal route.
* Create a canonical path related to an internal route.
* Create a redirect route.
* Delete a canonical path related to an internal route.
* Delete an internal route.
* Delete a redirect route.
* Create translated URLs for cross-border stores.

# Schema overview

## Query

 Query  version: String [ redirect: ](#redirect) [ QueryRedirect!](#queryredirect) [internal:](#internal) [QueryInternal!](#queryinternal)  QueryRedirect  get(path:String!, locator:[RouteLocator](#routelocator)): [Redirect](#redirect)  listRedirects(limit:Int, next:String): [ListRedirectsResponse!](#listredirectsresponse)  Query: redirect  QueryInternal  get(path:String!, locator:[RouteLocator](#routelocator)): [Internal](#internal)  listInternals(limit:Int, next:String): [ListInternalsResponse!](#listinternalsresponse)  routes(locator:[EntityLocator](#entitylocator)): [\[RoutesByBinding!\]](#routesbybinding)  Query: internal  Redirect  from: String!  to: String!  endDate: String  type: [RedirectTypes!](#redirecttypes)  binding: String!  origin: String  QueryRedirect: get  ListRedirectsResponse  routes: [\[Redirect!\]](#redirect)  next: String  QueryRedirect: listRedirects  Internal  from: String!  declarer: String!  type: String!  id: String!  query: JSON  binding: String!  endDate: String  imagePath: String  imageTitle: String  routesVersion: Float  resolveAs: String  origin: String  disableSitemapEntry: Boolean  QueryInternal: get  ListInternalsResponse  routes: [\[Internal!\]](#internal)  next: String  QueryInternal: listInternals  RoutesByBinding  binding: String!  route: String!  QueryInternal: routes  ListRedirectsResponse: routes  ListInternalsResponse: routes

| Field        | Type                             | Description                                                                                |
| ------------ | -------------------------------- | ------------------------------------------------------------------------------------------------------ |
| **redirect** | [QueryRedirect](#queryredirect)! | Provides _redirect_ routes data.Redirect routes are used to redirect a route from one path to another. |
| **internal** | [QueryInternal](#queryinternal)! | Provides _internal_ routes data.Internal routes are navigation routes.                                 |

## Mutation

Mutation  Mutation [redirect](#redirect) [ MutateRedirect!](#mutateredirect) [internal:](#internal) [ MutateInternal!](#mutateinternal) MutateRedirect  MutateRedirect  save(route: [RedirectInput](#redirectinput)!): [Redirect](#redirect)  saveMany(routes: \[[RedirectInput](#redirectinput)!\]!): Boolean!  delete(path: String! locator: [RouteLocator](#routelocator)): [Redirect](#redirect) deleteMany(paths: \[String!\]! locators: \[[RouteLocator](#routelocator)!\]): Boolean! Mutation:redirectport->MutateRedirect Mutation: redirect MutateInternal  MutateInternal save(route: [InternalInput](#internalinput)!): [Internal](#internal) saveMany(routes: \[[InternalInput](#internalinput)!\]!): Boolean! delete(path: String! locator: [RouteLocator](#routelocator)): [Internal](#internal) deleteMany(paths: \[String!\]! locators: \[[RouteLocator](#routelocator)!\]): Boolean! Mutation:internalport->MutateInternal Mutation: internal  Redirect  from: String!  to: String!  endDate: String  type: [RedirectTypes!](#redirecttypes)  binding: String!  origin: String MutateRedirect:deleteport-Redirect MutateRedirect: delete  Internal  from: String!  declarer: String!  type: String!  id: String!  query: JSON  binding: String!  endDate: String  imagePath: String  imageTitle: String  routesVersion: Float  resolveAs: String  origin: String  disableSitemapEntry: Boolean MutateInternal:saveport-Internal MutateInternal: save MutateInternal:deleteport-Internal MutateInternal: delete MutateRedirect:saveport-Redirect MutateRedirect: save

| Field        | Type                               | Description                                                                                |
| ------------ | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **redirect** | [MutateRedirect](#mutateredirect)! | Updates or deletes _redirect_ routes data according to the provided arguments.Redirect routes are used to redirect a route from one path to another. |
| **internal** | [MutateInternal](#mutateinternal)! | Updates or deletes _internal_ routes data according to the provided arguments.Internal routes are navigation routes.                                 |

# Schema description

> Arguments must be provided by the user. The exclamation mark `!` indicates that a type cannot be nullable.

## QueryRedirect

| Field             | (argument)                                       | Type                                                                                | Description |
| ----------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- |
| **get**           | [Redirect](#redirect)                            | Returns information regarding a specific redirect route, given its related _path_ and _locator_.                                                                                |             |
| path              | **String!**                                      | The path of the desired route to fetch data.                                                                                |             |
| locator           | [RouteLocator](#routelocator)                    | The _RouteLocator_ object, containing information about the store locale and route origin.                                                                                |             |
| **listRedirects** | [ListRedirectsResponse](#listredirectsresponse)! | Lists all redirect routes.                                                                                |             |
| limit             | Int                                              | The number of _ListRedirectsResponse_ objects to be displayed at once.                                                                                |             |
| next              | String                                           | The argument used to fetch more internal routes from _ListRedirectsResponse_.It must be empty in the first query and, in the following, filled in with the string previously obtained from the _ListRedirectsResponse_ object. |             |

[Query](#query) 🔼

## QueryInternal

| Field             | (argument)                                       | Type                                                                                | Description |
| ----------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- |
| **get**           | [Internal](#internal)                            | Returns information regarding a specific internal route, given its related _path_ and _locator_                                                                                |             |
| path              | String!                                          | The path of the desired route to fetch data.                                                                                |             |
| locator           | [RouteLocator](#routelocator)                    | The _RouteLocator_ object, containing information about the store locale and route origin.                                                                                |             |
| **listInternals** | [ListInternalsResponse](#listinternalsresponse)! | Lists all internal routes.                                                                                |             |
| limit             | Int                                              | The number of _ListInternalsResponse_ objects to be displayed at once.                                                                                |             |
| next              | String                                           | The argument used to fetch more internal routes from _ListInternalsResponse_.It must be empty in the first query and, in the following, filled in with the string previously obtained from the _ListInternalsResponse_ object. |             |
| **routes**        | \[[RoutesByBinding](#routesbybinding)!\]         | Lists all internal routes of a specific type (e.g. deparment routes, category routes, etc.) and its related _binding_, which is an identifier for each store locale.                                                           |             |
| locator           | [EntityLocator](#entitylocator)                  | The _EntityLocator_ object, containing information about the entity type of the routes to be listed.                                                                                |             |

[Query](#query) 🔼

## MutateRedirect

| Field          | (argument)                            | Type                                                                                | Description |
| -------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------ | ----------- |
| **save**       | [Redirect](#redirect)                 | Creates or updates a redirect route according to the provided arguments.                               |             |
| route          | [RedirectInput](#redirectinput)!      | The data regarding the redirect route to be created or updated.                                        |             |
| **saveMany**   | Boolean!                              | Creates or updates many redirect routes according to the provided arguments.                           |             |
| routes         | \[[RedirectInput](#redirectinput)!\]! | The data regarding the redirect routes to be created or updated.                                       |             |
| **delete**     | [Redirect](#redirect)                 | Deletes a redirect route according to the provided arguments.                                          |             |
| path           | String!                               | The path of the route to be deleted.                                                                   |             |
| locator        | [RouteLocator](#routelocator)         | The _EntityLocator_ object, containing information about the entity type of the route to be deleted.   |             |
| **deleteMany** | Boolean!                              | Deletes many redirect route according to the provided arguments.                                       |             |
| paths          | \[String!\]!                          | The paths of the routes to be deleted.                                                                 |             |
| locators       | \[[RouteLocator](#routelocator)!\]    | The _EntityLocator_ objects, containing information about the entity type of the routes to be deleted. |             |

[Mutation](#mutation) 🔼

## MutateInternal

| Field          | (argument)                            | Type                                                                                | Description |
| -------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------ | ----------- |
| **save**       | [Internal](#internal)                 | Creates or updates an internal route according to the provided arguments.                              |             |
| route          | [InternalInput](#internalinput)!      | The data regarding the internal route to be created or updated.                                        |             |
| **saveMany**   | Boolean!                              | Creates or updates many internal routes according to the provided arguments.                           |             |
| routes         | \[[InternalInput](#internalinput)!\]! | The data regarding the internal routes to be created or updated.                                       |             |
| **delete**     | [Internal](#internal)                 | Deletes an internal route according to the provided arguments.                                         |             |
| path           | String!                               | The path of the route to be deleted.                                                                   |             |
| locator        | [RouteLocator](#routelocator)         | The _EntityLocator_ object, containing information about the entity type of the route to be deleted.   |             |
| **deleteMany** | Boolean!                              | Deletes many internal routes according to the provided arguments.                                      |             |
| paths          | \[String!\]!                          | The paths of the routes to be deleted.                                                                 |             |
| locators       | \[[RouteLocator](#routelocator)!\]    | The _EntityLocator_ objects, containing information about the entity type of the routes to be deleted. |             |

[Mutation](#mutation) 🔼

## Internal

| Field                   | Type    | Description                                                                                |
| ----------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **from**                | String! | The route path.                                                                                |
| **declarer**            | String! | The app that originally defined the route in a routes.json file. For VTEX IO pre-defined routes, the declarer value is [vtex.store@2.x](mailto:vtex.store@2.x).                                                                                |
| **type**                | String! | The route entity type defined in the declarer app, which can be: department, category, subcategory, brand, etc.                                                                                |
| **id**                  | String! | The entity type id. For example, a deparment id.                                                                                |
| **query**               | JSON    | The query string parameters of a route.                                                                                |
| **binding**             | String! | The id of the _binding_ which the route is available._Keep in mind: Every store has a binding id related to its store locale. Hence, cross-border stores always have more than one binding, while accounts with a single storefront have only one binding id._ |
| **endDate**             | String  | The date a route stops being valid._Keep in mind: The endDate value for permanent routes is null._                                                                                |
| **imagePath**           | String  |                                                                                |
| **imageTitle**          | String  |                                                                                |
| **routesVersion**       | Float   | The current routes version._Keep in mind: If the routesVersion value is null or different from the current version, the route is not currently available in the store._                                                                                |
| **resolveAs**           | String  | Alias paths of a route, meaning that the route will resolve the paths defined in the resolveAs field _Keep in mind: The resolveAs parameter must always be defined in the catalog's default language._                                                         |
| **origin**              | String  | A string that defines the origin of the route, for example: user-canonical                                                                                |
| **disableSitemapEntry** | Boolean | The boolean value that indicates if a route is included (False) or not (True) in the store's sitemap.                                                                                |

[QueryInternal](#queryinternal) 🔼

[MutateInternal](#mutateinternal) 🔼

[ListInternalsResponse](#listinternalsresponse) 🔼

## ListInternalsResponse

| Field      | Type                       | Description                                                                                |
| ---------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **routes** | \[[Internal](#internal)!\] | Returns the demanded information from the _Internal_ object for each route.                                                                                |
| **next**   | String                     | Returns a string to be used as the _next_ argument of the succeeding _listInternals_ query to fetch more data.When _next_ returns _null_, all data have already been fetched. |

[QueryInternal](#queryinternal) 🔼

## RoutesByBinding

| Field       | Type    | Description                                                                                |
| ----------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **binding** | String! | The id of the _binding_ which the route is available. _Keep in mind: Every store has a binding id related to its store locale. Hence, cross-border stores always have more than one binding, while accounts with a single storefront have only one binding id._ |
| **route**   | String! | Returns the route path.                                                                                |

[QueryInternal](#queryinternal) 🔼

## Redirect

| Field       | Type                             | Description                                                                                |
| ----------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **from**    | String!                          | The original route path.                                                                                |
| **to**      | String!                          | The route redirect path.                                                                                |
| **endDate** | String                           | The date a redirect route stops being valid. _Keep in mind: The endDate value for permanent routes is null._                                                                                |
| **type**    | [RedirectTypes](#redirecttypes)! | The route type: temporary or permanent.                                                                                |
| **binding** | String!                          | The id of the _binding_ which the route is available. _Keep in mind: Every store has a binding id related to its store locale. Hence, cross-border stores always have more than one binding, while accounts with a single storefront have only one binding id._ |
| **origin**  | String                           | A string that defines the origin of the route, for example: user-canonical                                                                                |

[QueryRedirect](#queryredirect) 🔼

[MutateRedirect](#mutateredirect) 🔼

## ListRedirectsResponse

| Field      | Type                       | Description                                                                                |
| ---------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **routes** | \[[Redirect](#redirect)!\] | Returns the demanded information from the _Redirect_ object for each route.                                                                                |
| **next**   | String                     | Returns a string to be used as the _next_ argument of the succeeding _listInternals_ query to fetch more data.When _next_ returns _null_, all data have already been fetched. |

[QueryRedirect](#queryredirect) 🔼

## EntityLocator

| Field    | Type    | Description                                                                         |
| -------- | ------- | ----------------------------------------------------------------------------------- |
| **id**   | String! | The entity type id. For example, a deparment id.                                    |
| **type** | String! | The route entity type, which can be: department, category, subcategory, brand , etc |

[QueryInternal](#queryinternal) 🔼

## InternalInput

| Field                   | Type    | Description                                                                                |
| ----------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **from**                | String! | The route path.                                                                                |
| **declarer**            | String! | The app that originally defined the route in a routes.json file. For VTEX IO pre-defined routes, the declarer value is [vtex.store@2.x](mailto:vtex.store@2.x).                                                                                |
| **type**                | String! | The route entity type, which can be: department, category, subcategory, brand , etc                                                                                |
| **id**                  | String! | The entity type id. For example, a deparment id.                                                                                |
| **query**               | JSON    | The query string parameters of a route.                                                                                |
| **binding**             | String  | The id of the _binding_ which the route is available._Keep in mind: Every store has a binding id related to its store locale. Hence, cross-border stores always have more than one binding, while accounts with a single storefront have only one binding id._ |
| **endDate**             | String  | The date a route stops being valid._Keep in mind: The endDate value for permanent routes is null._                                                                                |
| **imagePath**           | String  |                                                                                |
| **imageTitle**          | String  |                                                                                |
| **resolveAs**           | String  | Alias paths of a route, meaning that the route will resolve the paths defined in the resolveAs field. _Keep in mind: The resolveAs parameter must always be defined in the catalog's default language._                                                        |
| **origin**              | String  | A string that defines the origin of the route, for example: user-canonical                                                                                |
| **disableSitemapEntry** | Boolean | The boolean value that indicates if a route is included (False) or not (True) in the store's sitemap.                                                                                |

[MutateInternal](#mutateinternal) 🔼

## RedirectInput

| Field       | Type                             | Description                                                                                |
| ----------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **from**    | String!                          | The original route path.                                                                                |
| **to**      | String!                          | The route redirect path.                                                                                |
| **endDate** | String                           | The date a route stops being valid._Keep in mind: The endDate value for permanent routes is null._                                                                                |
| **type**    | [RedirectTypes](#redirecttypes)! | The route type: temporary or permanent.                                                                                |
| **binding** | String                           | The id of the _binding_ which the route is available._Keep in mind: Every store has a binding id related to its store locale. Hence, cross-border stores always have more than one binding, while accounts with a single storefront have only one binding id._ |
| **origin**  | String                           | A string that defines the origin of the route, for example: user-canonical                                                                                |

[MutateRedirect](#mutateredirect) 🔼

## RouteLocator

| Field       | Type    | Description                                                                                |
| ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **from**    | String! | The original route path.                                                                                |
| **binding** | String! | The id of the _binding_ which the route is available._Keep in mind: Every store has a binding id related to its store locale. Hence, cross-border stores always have more than one binding, while accounts with a single storefront have only one binding id._ |

[QueryRedirect](#queryredirect) 🔼

[QueryInternal](#queryinternal) 🔼

[MutateRedirect](#mutateredirect) 🔼

[MutateInternal](#mutateinternal) 🔼

## RedirectTypes

| Value         | |  **PERMANENT** |
| ------------- | ---------------- |
| **TEMPORARY** |                  |

[Redirect](#redirect) 🔼

[RedirectInput](#redirectinput) 🔼

Contributors

1

[![Photo of the contributor](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/_next/image?url=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F60782333%3Fv%3D4%26w=64%26q=75)](https://github.com/carolinamenezes)

Was this helpful?

Yes

No

[Suggest Edits (GitHub)](https://read.calvincode.net/reader?url=https://github.com/vtexdocs/dev-portal-content/edit/main/docs/guides/vtex-io/Reference/graphql-apis/rewriter.md)

Contributors

1

[![Photo of the contributor](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/_next/image?url=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F60782333%3Fv%3D4%26w=64%26q=75)](https://github.com/carolinamenezes)

ON THIS PAGE

[Schema overview](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23schema-overview)

[Query](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23query)

[Mutation](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23mutation)

[Schema description](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23schema-description)

[QueryRedirect](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23queryredirect)

[QueryInternal](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23queryinternal)

[MutateRedirect](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23mutateredirect)

[MutateInternal](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23mutateinternal)

[Internal](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23internal)

[ListInternalsResponse](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23listinternalsresponse)

[RoutesByBinding](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23routesbybinding)

[Redirect](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23redirect)

[ListRedirectsResponse](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23listredirectsresponse)

[EntityLocator](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23entitylocator)

[InternalInput](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23internalinput)

[RedirectInput](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23redirectinput)

[RouteLocator](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23routelocator)

[RedirectTypes](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23redirecttypes)

Was this helpful?

 Send feedback

[Suggest edits (GitHub)](https://read.calvincode.net/reader?url=https://github.com/vtexdocs/dev-portal-content/edit/main/docs/guides/vtex-io/Reference/graphql-apis/rewriter.md)

Copy page

On this page

ON THIS PAGE

[Schema overview](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23schema-overview)

[Query](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23query)

[Mutation](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23mutation)

[Schema description](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23schema-description)

[QueryRedirect](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23queryredirect)

[QueryInternal](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23queryinternal)

[MutateRedirect](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23mutateredirect)

[MutateInternal](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23mutateinternal)

[Internal](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23internal)

[ListInternalsResponse](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23listinternalsresponse)

[RoutesByBinding](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23routesbybinding)

[Redirect](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23redirect)

[ListRedirectsResponse](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23listredirectsresponse)

[EntityLocator](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23entitylocator)

[InternalInput](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23internalinput)

[RedirectInput](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23redirectinput)

[RouteLocator](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23routelocator)

[RedirectTypes](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/guides/rewriter/docs/guides/rewriter%23redirecttypes)

On this page

[Github](https://read.calvincode.net/reader?url=https://github.com/vtex-apps)[Help Center](https://read.calvincode.net/reader?url=https://help.vtex.com/)[Community](https://read.calvincode.net/reader?url=https://community.vtex.com/?%5Fga=2.198523433.743584735.1647618303-1974737580.1645714642)[Feedback](https://read.calvincode.net/reader?url=https://docs.google.com/forms/d/e/1FAIpQLSfmnotPvPjw-SjiE7lt2Nt3RQgNUe10ixXZmuO2v9enOJReoQ/viewform?entry.1972292648=developers.vtex.com%26entry.1799503232=)


[System] You are a VTEX documentation expert. You provide accurate, detailed information about VTEX platform, APIs, apps, and Store Framework development.

[User] How do I use the VTEX product summary 2.91.0 ProductSummaryBuyButton app? Provide documentation and configuration details.

[Assistant]
Documentation

[Feedback](https://read.calvincode.net/reader?url=https://docs.google.com/forms/d/e/1FAIpQLSfmnotPvPjw-SjiE7lt2Nt3RQgNUe10ixXZmuO2v9enOJReoQ/viewform?entry.1972292648=developers.vtex.com%26entry.1799503232=)

[GuidesLearn how to use our APIs and extend the VTEX platform.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides)

[API ReferenceExplore detailed information about our endpoints.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/api-reference)

[App DevelopmentLearn how to build cloud-based apps and integrations.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/app-development)

[Storefront DevelopmentExpress your brand identity creating unique storefronts.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/storefront-development)

[VTEX IO AppsFind pre-built solutions to grow your business.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/vtex-io-apps)

[TroubleshootingFind practical solutions to common development issues.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/troubleshooting)

[Release NotesStay up to date with our latest releases and bug fixes.](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/updates/release-notes)

VTEX IO Apps

[Basic components](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/basic-components)

---

[Store Components](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/store-components)

---

[Advanced components](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/advanced-components)

---

[B2B components](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/b2b-components)

---

[B2B Suite](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/apps/vtex.b2b-suite)

---

[Functional Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/functional-apps)

---

[Layout Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/layout-apps)

---

[Pixel Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/pixel-apps)

---

[My Account - StoreV2 version](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/apps/vtex.my-account)

---

[VTEX IO deprecated apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/vtex-io-deprecated-apps)

---

[Guides](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides)

[API Reference](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/api-reference)

[App Development](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/app-development)

[Storefront Development](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/storefront-development)

[VTEX IO Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/vtex-io-apps)

[Troubleshooting](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/troubleshooting)

---

[Release Notes](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/updates/release-notes)

VTEX IO Apps

[Basic components](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/basic-components)

---

[Store Components](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/store-components)

---

[Advanced components](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/advanced-components)

---

[B2B components](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/b2b-components)

---

[B2B Suite](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/apps/vtex.b2b-suite)

---

[Functional Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/functional-apps)

---

[Layout Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/layout-apps)

---

[Pixel Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/pixel-apps)

---

[My Account - StoreV2 version](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/apps/vtex.my-account)

---

[VTEX IO deprecated apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/guides/vtex-io-deprecated-apps)

---

[VTEX IO Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/vtex-io-apps)

Product Summary Buy Button

[vtex.product-summary](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary)

Version: 2.91.0

Latest version: 2.91.0

Product Summary Buy Button is the block exported by the [Product Summary app](https://read.calvincode.net/reader?url=https://developers.vtex.com/vtex-developer-docs/docs/vtex-product-summary) responsible for rendering a Buy Button in the [Product Summary Shelf](https://read.calvincode.net/reader?url=https://developers.vtex.com/vtex-developer-docs/docs/vtex-product-summary-productsummaryshelf) block.

![{"base64":"  ","img":{"width":2852,"height":1550,"type":"png","mime":"image/png","wUnits":"px","hUnits":"px","length":667606,"url":"https://user-images.githubusercontent.com/52087100/76864047-38006600-683f-11ea-8a4e-74dc91712984.png"}}](https://read.calvincode.net/reader?url=https://user-images.githubusercontent.com/52087100/76864047-38006600-683f-11ea-8a4e-74dc91712984.png)

> **The Product Summary Buy Button only effectively adds products to the Minicart if the store still uses the [Minicart v1](https://read.calvincode.net/reader?url=https://github.com/vtex-apps/minicart/blob/383d7bbd3295f06d1b5854a0add561a872e1515c/docs/README.md)**. If the store uses the [Minicart v2](https://read.calvincode.net/reader?url=https://vtex.io/docs/components/all/vtex.minicart/), please configure the [Add To Cart Button](https://read.calvincode.net/reader?url=https://developers.vtex.com/vtex-developer-docs/docs/vtex-add-to-cart-button/) in the `product-summary.shelf` block instead.

## Configuration

1. Import the `vtex.product-summary` app to your theme's dependencies in the `manifest.json`:

`1

 dependencies: {

2

 "vtex.product-summary": "2.x"

3

 }

`

1. Add the `product-summary-buy-button` block as a children of the `product-summary.shelf` block:

`1

 {

2

 "product-summary.shelf": {

3

 "children": [

4

 "product-summary-image",

5

 "product-summary-name",

6

 "product-rating-inline",

7

 "product-summary-space",

8

 "product-summary-price",

9

+ "product-summary-buy-button"

10

 ]

11

 },

12

 }

`

1. Then, declare the `product-summary-buy-button` and configure its behavior using the props stated below.

`1

{

2

 "product-summary-buy-button": {

3

 "props": {

4

 "isOneClickBuy": false

5

 }

6

 }

7

}

`

### Props

| Prop name         | Type    | Description                                                                                | Default value       |
| ----------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
| isOneClickBuy     | boolean | Whether the user should be redirected to Checkout after clicking on the Buy Button (true) or not (false).                                                                                | false               |
| buyButtonText     | string  | Custom text that overwrites the default Buy Button text.                                                                                | undefined           |
| displayBuyButton  | enum    | Sets the Buy Button display mode. Possivle values are: displayButtonAlways (it will always be displayed), displayButtonHover (only displayed on hover), or displayButtonNone (it will be hidden for users).                                                                                | displayButtonAlways |
| customToastURL    | string  | Defines a redirect link to the Toast displayed when an item is added to your cart.                                                                                | /checkout/#/cart    |
| buyButtonBehavior | enum    | Sets the Buy Button behavior when it is clicked on. Possible values are: alwaysGoToProduct (redirect users to the product page), default (redirect users to the minicart), or alwaysAddToTheCart (add the selected SKU to the minicart). When choosing this last option, be careful: use it only if there are SKU Selectors for each product variation. This way, users can properly select their desired SKU. | default             |

## Customization

To apply CSS customizations in this and other blocks, follow the [Using CSS Handles for store customization](https://read.calvincode.net/reader?url=https://developers.vtex.com/vtex-developer-docs/docs/vtex-io-documentation-using-css-handles-for-store-customization) guide.

| CSS Handles        |
| ------------------ |
| buyButtonContainer |
| buyButton          |
| isHidden           |

See also

[Vtex.product SummaryVTEX IO Apps](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/apps/vtex.product-summary)[VTEX App StoreVTEX IO Apps](https://read.calvincode.net/reader?url=https://apps.vtex.com/)

ON THIS PAGE

[Configuration](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton%23configuration)

[Props](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton%23props)

[Customization](https://read.calvincode.net/reader?url=https://developers.vtex.com/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton/docs/apps/vtex.product-summary@2.91.0/ProductSummaryBuyButton%23customization)

Was this helpful?

[Github](https://read.calvincode.net/reader?url=https://github.com/vtex-apps)[Help Center](https://read.calvincode.net/reader?url=https://help.vtex.com/)[Community](https://read.calvincode.net/reader?url=https://community.vtex.com/?%5Fga=2.198523433.743584735.1647618303-1974737580.1645714642)[Feedback](https://read.calvincode.net/reader?url=https://docs.google.com/forms/d/e/1FAIpQLSfmnotPvPjw-SjiE7lt2Nt3RQgNUe10ixXZmuO2v9enOJReoQ/viewform?entry.1972292648=developers.vtex.com%26entry.1799503232=)