# Stripe Apps quality requirements

Learn about the quality requirements for Apps on the App Marketplace.

## App Review Requirements

This page supplements the [marketplace guide](https://docs.stripe.com/stripe-apps/publish-app.md), which is your primary resource for preparing your app for app review. This guide contains requirements that are more qualitative in nature compared to the marketplace guide. Use this page as an app review pre-submission checklist.

### Transparent pricing

- **Do**: Clearly state pricing without hidden costs, and align with off-marketplace pricing.
- **Don’t**: Surprise users with post-install fees or inconsistent pricing.

### Date Formatting

- When abbreviating months, use the 3-letter abbreviation and no period. For example, “Jan,” Feb," Mar," Apr," May," “Jun.”
- When writing out the month name, day, and year, use a comma between the day and the year. For example, “January 3, 2021” or “Jan 3, 2021.”
- When only writing the month and year, don’t use a comma. For example, “January 2021” or “Jan 2021.”

### Time Formatting

Format time as follows: Use the 12-hour clock. Indicate ante meridian (AM) and post meridian (PM) with all caps and a space after the last number. Use two digits for minutes. For example: “3:25 PM” or “10:00 AM."

### App settings

- Clearly distinguish between required and optional settings in your app.
- Provide one clear way to save changes to app settings.

### Sandbox support 

Your app manifest must specify whether your app supports installation in a sandbox environment. If set to `false`, your app won’t be available for installation in sandboxes.

### App functionality

Apps must be useful for businesses, accurate in calculations, and process payments through Stripe unless approved in writing otherwise.

### Developer standards

Accurately represent your value proposition on your website, including valid contact information and compliance with Stripe’s restricted businesses.

### If republishing your app

- Make sure that your app functions without interruption for users from version to version. Make sure your app doesn’t cause breaking changes that require user intervention when upgrading.
- Don’t publish the same app under different names or categories. Submit new versions of an app from the same account as the previous version. Contact Stripe Support if this isn’t possible and you need assistance.

### UX quality

#### Content and presentation

- Use consistent language and style throughout your app, and use the active voice.
- Use high-quality visuals, such as icons and illustrations, to help users understand how to use the app or a specific feature.
- Use concise and descriptive labels for buttons and links.
- Display notices when critical information requires the user’s attention.
- Don’t include ads.

#### Navigation and flow

- Make sure navigation clearly indicates the user’s current location within your app. Prevent dead ends. Give every flow a clear path forward and back, with options such as **Cancel** or **Go Back**.
- Provide confirmation for any costly or destructive actions that are difficult to reverse.

#### Loading and errors

- Render page structure, including tabs, headers, and layout, before data loads. Show loading indicators such as spinners or skeletons while data is loading.
- Don’t show a blank page while content loads, and don’t let a loading state run indefinitely without a timeout or error.
- Distinguish errors from empty states. If your app can’t load data because of a network failure or expired authentication, show an error. If there are no records to display, show an empty state with clear messaging and, where it helps, a call to action.
- Keep users informed during operations such as form submissions and data fetches.

#### Full-page apps

Full-page apps occupy a dedicated page in the Stripe Dashboard. Because of their prominence, they must meet the other UX quality requirements, plus the following:

- Provide enough content and functionality to justify a dedicated page. Let users take meaningful action, such as managing records, analyzing data, configuring workflows, or monitoring activity, instead of displaying minimal content.
- Follow the documented [full-page app design patterns](https://docs.stripe.com/stripe-apps/patterns/full-page-apps.md) so the app reads as a coherent, navigable interface. Give every tab a distinct purpose with meaningful content, and don’t ship empty or placeholder tabs.
- Where they help, use patterns such as an overview tab, descriptive URL-friendly tab IDs, and the `DetailPage` component for consistent detail views.
- Connect multiple viewports into a cohesive whole. If you pair a full-page view with a drawer, link between them and guide users through any required setup before they reach the full-page view.

### Security

- You must properly store secret materials required by UI extensions using the [Secret Store API](https://docs.stripe.com/api/secret_management.md)
- Your app code must comply with all applicable export control laws. Specifically, don’t include any custom cryptographic functions in your app. Custom cryptography is subject to the [International Traffic in Arms Regulations (ITAR)](https://www.ecfr.gov/cgi-bin/text-idx?SID=8870638858a2595a32dedceb661c482c&mc=true&tpl=/ecfrbrowse/Title22/22CIsubchapM.tpl), and exporting such code outside the United States can result in severe penalties. Always use cryptographic functions provided by standard libraries or well-established open source libraries that have been properly vetted.

### Legal compliance

- Use assets you have permission to use, adhere to data locality laws, avoid spam, and comply with export controls.
- Your app can only use user data and API endpoints that are required for existing app functionality that you clearly communicate to users. You can’t resell or publish any data obtained from Stripe users through your app.
- Avoid engaging in illegal activities or misrepresenting your business. Check your business against our list of [Prohibited and Restricted Businesses](https://stripe.com/legal/restricted-businesses).
- Your company or you as a developer can’t be based in a country Stripe can’t engage with because of [embargo or other restrictions](https://support.stripe.com/questions/understanding-sanctions).
