Demandez un accès anticipé

Indiquez votre prénom ainsi qu’une adresse e-mail ou un numéro de téléphone. Nous vous recontacterons pour vous communiquer les modalités d’accès à Tajo.

Exigences de qualité pour la révision des apps

Stripe examine chaque app soumise au marketplace au regard d’un ensemble complet d’exigences de qualité. Comprendre ces standards avant de développer fait gagner du temps et réduit le nombre d’allers-retours de révision.

Vue d’ensemble

La révision d’une Stripe App évalue votre app sur six domaines clés :

  1. Tarification transparente, communication claire des coûts
  2. Fonctionnement de l’app, fiabilité et exhaustivité
  3. Standards de développement, qualité du code et usage de l’API
  4. Qualité de l’UX, standards d’interface et d’expérience utilisateur
  5. Sécurité, protection des données et pratiques sécurisées
  6. Conformité légale, exigences de confidentialité et réglementaires

Tarification transparente

Votre app doit communiquer clairement tous les coûts aux utilisateurs :

  • Divulgation des tarifs : tous les prix doivent être indiqués d’emblée dans la fiche du marketplace
  • Aucun frais caché : les utilisateurs ne doivent pas découvrir de frais inattendus après l’installation
  • Conditions d’essai : si vous proposez un essai, indiquez clairement sa durée et ce qui se passe à son terme
  • Parcours de montée en gamme : toute incitation à l’achat ou à la montée en gamme doit rester discrète et clairement facultative
  • Devise : affichez les prix dans la devise locale de l’utilisateur lorsque c’est possible

Caution

Les apps qui masquent leurs tarifs ou facturent les utilisateurs sans consentement clair sont rejetées immédiatement.

Formatage des dates et des heures

Toutes les dates et heures affichées dans votre app doivent suivre les conventions du tableau de bord Stripe :

  • Utilisez la locale de l’utilisateur pour formater les dates lorsqu’elle est disponible
  • Affichez les heures dans le fuseau horaire local de l’utilisateur
  • Utilisez des horodatages relatifs pour les événements récents (par exemple « il y a 2 heures »)
  • Utilisez des horodatages absolus avec date et heure complètes pour les événements plus anciens
  • Suivez la norme ISO 8601 pour tous les champs de date exposés à l’API
// Good: Use Stripe's date formatting utilities
import { formatDate, formatRelativeTime } from '@stripe/ui-extension-sdk/utils';
const formattedDate = formatDate(timestamp); // Locale-aware
const relativeTime = formatRelativeTime(timestamp); // "2 hours ago"

Paramètres de l’app

Si votre app nécessite une configuration :

  • Proposez une vue Paramètres dédiée, accessible depuis le viewport de l’app
  • Préremplissez des valeurs par défaut pertinentes lorsque c’est possible
  • Validez toutes les saisies utilisateur avec des messages d’erreur clairs
  • Permettez aux utilisateurs de modifier les paramètres sans réinstaller l’app
  • Conservez les paramètres d’une session à l’autre avec l’API Secret Store de Stripe

Prise en charge du sandbox

Votre app doit fonctionner correctement dans le mode sandbox (test) de Stripe :

  • Compatibilité avec le mode test : toutes les fonctionnalités doivent fonctionner en mode test
  • Données de test : utilisez des données de test réalistes qui démontrent le fonctionnement de l’app
  • Aucune donnée live dans le sandbox : n’exposez jamais de données de production en mode test
  • Gestion élégante : si une fonctionnalité n’est pas disponible dans le sandbox, affichez un message clair qui en explique la raison
  • Définissez sandbox_install_compatible: true dans votre manifest
{
"sandbox_install_compatible": true
}

Fonctionnement de l’app

Fiabilité

  • L’app ne doit ni planter ni se figer lors d’un usage normal
  • Toutes les fonctionnalités annoncées doivent fonctionner comme décrit
  • Les erreurs réseau doivent être gérées proprement, avec une possibilité de réessayer
  • L’app doit rester réactive pendant les opérations en arrière-plan

Exhaustivité

  • Aucun contenu provisoire, aucune fonctionnalité « bientôt disponible », aucun lien mort
  • Tous les éléments d’interface doivent être fonctionnels, sans bouton inerte ni contrôle inactif
  • Les textes d’aide et les liens vers la documentation doivent pointer vers des pages valides
  • La désinstallation doit supprimer proprement toutes les données et tous les webhooks de l’app

Performance

  • L’interface doit s’afficher en moins de 3 secondes sur une connexion standard
  • Les synchronisations en arrière-plan ne doivent pas bloquer l’interface
  • Les grands volumes de données doivent utiliser la pagination ou le chargement différé
  • Limitez les appels API pour éviter d’atteindre les limites de débit

Standards de développement

Usage de l’API

  • Utilisez la dernière version stable de l’API Stripe
  • Suivez les bonnes pratiques de l’API Stripe pour la pagination, la gestion des erreurs et l’idempotence
  • Ne dépassez pas les limites de débit, mettez en place un backoff exponentiel pour les nouvelles tentatives
  • Utilisez les webhooks pour les mises à jour événementielles plutôt que le polling

Qualité du code

  • Aucune erreur ni avertissement en console dans les builds de production
  • Supprimez toute journalisation de débogage avant la soumission
  • Traitez tous les cas limites (états vides, données manquantes, pannes réseau)
  • Suivez les patterns de la bibliothèque de composants de Stripe pour une interface cohérente

Versionnement

  • Utilisez le versionnement sémantique (MAJEUR.MINEUR.CORRECTIF)
  • Documentez les changements incompatibles dans les mises à jour de version
  • Maintenez la compatibilité ascendante lorsque c’est possible

Qualité de l’UX

Publicité

  • Aucune publicité : votre app ne doit afficher aucune forme de publicité
  • Aucune promotion croisée : ne faites pas la promotion d’autres produits ou services dans l’interface de l’app
  • Contenu de marque : n’affichez que votre propre identité de marque, pas celle de tiers (à l’exception des partenaires d’intégration comme Brevo)

Langue et contenu

  • Terminologie cohérente : employez la même terminologie dans toute l’app
  • Ton professionnel : alignez-vous sur le style de communication professionnel et concis du tableau de bord Stripe
  • Pas de jargon : évitez le jargon technique que les marchands pourraient ne pas comprendre
  • Correction orthographique : assurez-vous que tous les textes sont exempts de fautes d’orthographe et de grammaire
  • Anglais uniquement : tous les textes visibles par l’utilisateur doivent être en anglais pour les apps du marketplace

Boîtes de dialogue de confirmation

Exigez une confirmation de l’utilisateur pour les actions destructrices ou importantes :

// Good: Confirm before destructive actions
const handleDisconnect = async () => {
const confirmed = await showConfirmation({
title: 'Disconnect Brevo Integration',
message: 'This will stop syncing customer data to Brevo. You can reconnect at any time.',
confirmLabel: 'Disconnect',
cancelLabel: 'Cancel',
destructive: true,
});
if (confirmed) {
await disconnectIntegration();
}
};

Actions qui exigent une confirmation :

  • Déconnecter des intégrations
  • Supprimer des données synchronisées
  • Modifier des paramètres qui affectent le flux de données
  • Réinitialiser la configuration aux valeurs par défaut

États de chargement

Affichez toujours un indicateur de chargement pour les opérations asynchrones :

// Good: Show loading state during data fetch
const CustomerSyncStatus = () => {
const { data, isLoading, error } = useSyncStatus();
if (isLoading) {
return <Spinner label="Loading sync status..." />;
}
if (error) {
return <Banner type="critical" title="Failed to load sync status">
{error.message}
</Banner>;
}
return <SyncStatusDisplay data={data} />;
};

Exigences :

  • Affichez des indicateurs de chargement ou des écrans squelettes pendant le chargement des données
  • Désactivez les boutons pendant la soumission d’un formulaire
  • Affichez des indicateurs de progression pour les opérations longues
  • N’affichez jamais un écran vide pendant un chargement

Messages d’erreur

Fournissez des messages d’erreur clairs et actionnables :

// Bad: Generic error
"Something went wrong"
// Good: Specific and actionable
"Unable to sync customer data to Brevo. Please verify your Brevo API key
in Settings and try again."

Règles pour les messages d’erreur :

  • Expliquez ce qui s’est passé en langage clair
  • Proposez une action précise que l’utilisateur peut entreprendre pour résoudre le problème
  • Offrez un moyen de relancer l’opération qui a échoué
  • Journalisez les informations d’erreur détaillées pour le débogage (sans les montrer aux utilisateurs)
  • Incluez des codes d’erreur pour les échanges avec le support lorsque c’est pertinent

Sécurité

API Secret Store

Utilisez l’API Secret Store de Stripe pour tout stockage de données sensibles :

import { createHttpClient, STRIPE_API_KEY } from '@stripe/ui-extension-sdk/http_client';
// Good: Store secrets using the Secret Store API
const storeBrevoApiKey = async (apiKey: string) => {
const stripe = createHttpClient(STRIPE_API_KEY);
await stripe.apps.secrets.create({
name: 'brevo_api_key',
payload: apiKey,
scope: { type: 'account' },
});
};
// Good: Retrieve secrets from the Secret Store
const getBrevoApiKey = async () => {
const stripe = createHttpClient(STRIPE_API_KEY);
const secret = await stripe.apps.secrets.find({
name: 'brevo_api_key',
scope: { type: 'account' },
});
return secret.payload;
};

Ne stockez jamais de données sensibles dans :

  • Le stockage local ou le stockage de session
  • Les cookies
  • Les paramètres d’URL
  • Des valeurs codées en dur dans le code source
  • Des fichiers de configuration en texte clair

Cryptographie

  • Pas de cryptographie maison : n’implémentez pas vos propres algorithmes de chiffrement
  • Utilisez les primitives de sécurité intégrées de Stripe (Secret Store, secrets de signature)
  • Utilisez HTTPS pour tous les appels d’API externes
  • Vérifiez toutes les signatures de webhook avant traitement

Traitement des données

  • Ne demandez que les permissions dont votre app a réellement besoin
  • Ne conservez pas de données Stripe au-delà de ce qui est nécessaire au fonctionnement
  • Appliquez des politiques de conservation des données alignées sur votre politique de confidentialité
  • Prévoyez un mécanisme permettant aux utilisateurs de demander la suppression de leurs données

Conformité légale

Politique de confidentialité

Votre app doit disposer d’une politique de confidentialité accessible publiquement qui couvre :

  • Les données que votre app collecte depuis Stripe
  • La manière dont ces données sont stockées, traitées et partagées
  • Les politiques de conservation et de suppression des données
  • Les droits des utilisateurs sur leurs données
  • Les coordonnées de contact pour les demandes relatives à la confidentialité
  • La conformité aux réglementations applicables (RGPD, CCPA, etc.)

Conditions d’utilisation

  • Fournissez des conditions d’utilisation claires pour votre app
  • N’incluez pas de clauses en contradiction avec les conditions d’utilisation de Stripe
  • Indiquez clairement toute limitation ou restriction d’usage

Conformité réglementaire

  • Respectez toutes les réglementations applicables en matière de protection des données
  • Mettez en place les accords de traitement des données appropriés
  • Prenez en charge les demandes de portabilité et de suppression des données
  • Conservez des journaux d’audit pour l’accès aux données et leur traitement

Calendrier du processus de révision

ÉtapeDurée
Soumission initiale5 à 10 jours ouvrés
Révision après correction3 à 7 jours ouvrés
Approbation finale1 à 2 jours ouvrés
PublicationImmédiate après approbation

Tip

Traitez l’ensemble des retours de révision en une seule correction pour éviter les cycles multiples. L’équipe Stripe fournit des retours précis et actionnables pour chaque problème relevé.

Raisons de rejet les plus fréquentes

  1. Gestion des erreurs absente, l’app plante sur une erreur réseau ou une donnée inattendue
  2. États de chargement insuffisants, écrans vides pendant la récupération des données
  3. Tarification peu claire, prix non entièrement divulgués dans la fiche
  4. Permissions excessives, demande de permissions dont l’app n’a pas besoin
  5. Mode sandbox défaillant, l’app ne fonctionne pas en mode test
  6. Problèmes de sécurité, secrets stockés en dehors de l’API Secret Store
  7. Politique de confidentialité manquante, aucune URL de politique de confidentialité accessible
  8. Fonctionnalités incomplètes, fonctionnalités « bientôt disponible » ou contenu provisoire

Demandez un accès anticipé

Indiquez votre prénom ainsi qu’une adresse e-mail ou un numéro de téléphone. Nous vous recontacterons pour vous communiquer les modalités d’accès à Tajo.

détection automatique
Assistant AI

Bonjour ! Posez-moi vos questions sur la documentation.