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.

Référence du manifest d’application

Le fichier manifest stripe-app.json constitue la configuration centrale de votre Stripe App. Il déclare l’identité de votre application, ses permissions, ses vues d’interface, ses politiques de sécurité et son comportement après installation.

Exemple de manifest complet

{
"id": "com.tajo.brevo-integration",
"version": "1.2.0",
"name": "Tajo for Brevo",
"icon": "./assets/icon.png",
"distribution_type": "public",
"sandbox_install_compatible": true,
"stripe_api_access_type": "oauth",
"allowed_redirect_uris": [
"https://tajo.io/stripe/callback",
"https://tajo.io/stripe/oauth/complete"
],
"permissions": [
{
"permission": "customer_read",
"purpose": "Read customer profiles to sync with Brevo contacts"
},
{
"permission": "customer_write",
"purpose": "Update customer metadata with Brevo sync status"
},
{
"permission": "charge_read",
"purpose": "Access payment history for Brevo event tracking"
},
{
"permission": "product_read",
"purpose": "Sync product catalog to Brevo for personalized campaigns"
},
{
"permission": "event_read",
"purpose": "Subscribe to real-time events for Brevo automation triggers"
},
{
"permission": "invoice_read",
"purpose": "Track invoice lifecycle events in Brevo"
}
],
"ui_extension": {
"views": [
{
"viewport": "stripe.dashboard.customer.detail",
"component": "CustomerDetailView"
},
{
"viewport": "stripe.dashboard.customer.list",
"component": "CustomerListView"
},
{
"viewport": "stripe.dashboard.home.overview",
"component": "OverviewView"
},
{
"viewport": "stripe.dashboard.drawer.default",
"component": "DrawerView"
},
{
"viewport": "stripe.dashboard.settings",
"component": "SettingsView"
},
{
"viewport": "stripe.dashboard.onboarding",
"component": "OnboardingView"
}
],
"content_security_policy": {
"connect-src": [
"https://api.tajo.io",
"https://api.brevo.com"
],
"image-src": [
"https://cdn.tajo.io",
"https://assets.brevo.com"
],
"purpose": "Connect to Tajo API for data sync and Brevo API for contact management"
}
},
"post_install_action": {
"type": "onboarding"
},
"constants": {
"API_BASE_URL": "https://api.tajo.io/v1",
"SYNC_INTERVAL_SECONDS": "300"
}
}

Référence du schéma

Champs de premier niveau

ChampTypeRequisDescription
idstringOuiIdentifiant unique de l’application en notation de domaine inversé (format slug)
versionstringOuiChaîne de version sémantique (par exemple "1.2.0")
namestringOuiNom affiché sur la marketplace (35 caractères maximum)
iconstringOuiChemin relatif vers le fichier d’icône de l’application (PNG ou SVG de 300x300)
distribution_typestringOui"public" pour la marketplace ou "private" pour un usage interne
sandbox_install_compatiblebooleanNonIndique si l’application peut être installée en mode sandbox ou test
stripe_api_access_typestringNonMéthode d’accès à l’API : "oauth" ou "api_key"
allowed_redirect_urisstring[]NonURI de redirection OAuth autorisées pour le parcours d’installation
permissionsPermissionRequest[]OuiTableau de demandes de permission
ui_extensionUIExtensionManifestNonConfiguration de l’extension d’interface
post_install_actionPostInstallActionNonAction à exécuter après l’installation de l’application
constantsobjectNonPaires clé-valeur accessibles dans l’application à l’exécution

id

L’identifiant de l’application est une chaîne au format slug, généralement en notation de domaine inversé :

"id": "com.tajo.brevo-integration"
  • Il doit être unique parmi toutes les Stripe Apps
  • N’utilisez que des lettres minuscules, des chiffres, des tirets et des points
  • Il ne peut plus être modifié une fois l’application créée
  • Il détermine l’URL de l’application sur la marketplace

version

Suit le versionnement sémantique :

"version": "1.2.0"
  • MAJOR : changements incompatibles ou ajouts de fonctionnalités majeures
  • MINOR : nouvelles fonctionnalités, rétrocompatibles
  • PATCH : corrections de bugs et améliorations mineures
  • Doit être incrémenté à chaque envoi

distribution_type

Détermine qui peut installer votre application :

ValeurDescription
"public"Disponible pour tous les utilisateurs sur la Stripe App Marketplace
"private"Installable uniquement sur votre propre compte Stripe

stripe_api_access_type

Détermine la manière dont votre application s’authentifie auprès de l’API Stripe :

ValeurDescription
"oauth"Utilise le flux OAuth 2.0 pour l’authentification (recommandé pour les applications publiques)
"api_key"Utilise des clés API restreintes (adapté aux applications privées)

PermissionRequest

Chaque demande de permission déclare une permission précise de l’API Stripe dont votre application a besoin :

{
"permission": "customer_read",
"purpose": "Read customer profiles to sync with Brevo contacts"
}
ChampTypeRequisDescription
permissionstringOuiL’identifiant de la permission (voir la référence des permissions)
purposestringOuiExplication lisible par un humain de la raison pour laquelle cette permission est nécessaire

Recommandations pour le champ purpose :

  • Rédigez des explications claires et précises, compréhensibles par les marchands
  • Expliquez à quoi sert la permission, et pas seulement ce qu’elle autorise
  • Restez concis, une seule phrase suffit
  • Évitez le jargon technique

UIExtensionManifest

Configure les composants d’interface de votre application :

{
"ui_extension": {
"views": [...],
"content_security_policy": {...}
}
}
ChampTypeRequisDescription
viewsViewManifest[]OuiTableau de déclarations de vues
content_security_policyCSPRequestNonContent Security Policy applicable aux ressources externes

ViewManifest

Chaque vue associe un composant React à un viewport du Dashboard Stripe :

{
"viewport": "stripe.dashboard.customer.detail",
"component": "CustomerDetailView"
}
ChampTypeRequisDescription
viewportstringOuiL’emplacement du Dashboard où cette vue s’affiche (voir la référence des viewports)
componentstringOuiNom du composant React à afficher (il doit correspondre au nom du composant exporté)

Une même application peut déclarer plusieurs vues pour différents viewports :

"views": [
{
"viewport": "stripe.dashboard.customer.detail",
"component": "CustomerDetailView"
},
{
"viewport": "stripe.dashboard.payment.detail",
"component": "PaymentDetailView"
},
{
"viewport": "stripe.dashboard.home.overview",
"component": "OverviewView"
}
]

CSPRequest

La Content Security Policy détermine les domaines externes auxquels votre application peut se connecter :

{
"content_security_policy": {
"connect-src": [
"https://api.tajo.io",
"https://api.brevo.com"
],
"image-src": [
"https://cdn.tajo.io"
],
"purpose": "Connect to Tajo API for data sync and load images from CDN"
}
}
ChampTypeRequisDescription
connect-srcstring[]NonDomaines vers lesquels l’application peut émettre des requêtes réseau
image-srcstring[]NonDomaines depuis lesquels l’application peut charger des images
purposestringOuiExplication de la nécessité de ces connexions externes

Caution

N’incluez que les domaines auxquels votre application a réellement besoin de se connecter. Des entrées CSP trop nombreuses peuvent déclencher un examen plus poussé lors de la révision.

PostInstallAction

Configure ce qui se passe immédiatement après qu’un utilisateur a installé votre application :

{
"post_install_action": {
"type": "onboarding"
}
}
ChampTypeRequisDescription
typestringOuiLe type d’action (voir ci-dessous)
urlstringConditionnelURL pour les actions de type external

Types d’action

TypeComportement
"onboarding"Ouvre la vue d’onboarding de l’application dans le Dashboard
"settings"Ouvre la vue des paramètres de l’application dans le Dashboard
"external"Redirige l’utilisateur vers une URL externe (le champ url est obligatoire)

Exemples :

// Open onboarding flow
{
"post_install_action": {
"type": "onboarding"
}
}
// Open settings page
{
"post_install_action": {
"type": "settings"
}
}
// Redirect to external setup
{
"post_install_action": {
"type": "external",
"url": "https://app.tajo.io/stripe/setup"
}
}

Consultez le guide des actions après installation pour des schémas d’implémentation détaillés.

Constantes

Définissez des paires clé-valeur statiques accessibles à l’exécution dans votre application :

{
"constants": {
"API_BASE_URL": "https://api.tajo.io/v1",
"SYNC_INTERVAL_SECONDS": "300",
"MAX_BATCH_SIZE": "100"
}
}
  • Toutes les valeurs doivent être des chaînes de caractères
  • Les constantes sont intégrées à l’application au moment de la compilation
  • Utilisez les constantes pour la configuration qui varie d’un environnement à l’autre
  • Ne stockez jamais de secrets ni de clés API dans des constantes, utilisez plutôt la Secret Store API

Accédez aux constantes dans le code de votre application :

import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;

Manifest étendu pour le développement

Pendant le développement en local, des champs supplémentaires sont disponibles :

{
"id": "com.tajo.brevo-integration",
"version": "0.1.0",
"name": "Tajo for Brevo (Dev)",
"icon": "./assets/icon-dev.png",
"distribution_type": "private",
"sandbox_install_compatible": true,
"dev": {
"hot_reload": true,
"port": 4242
}
}

La section dev est supprimée lors des compilations de production et des envois de l’application. Réservez-la aux réglages de confort pour le développement en local.

Validation

Validez votre manifest avant de l’envoyer :

Terminal window
# Validate manifest syntax and schema
stripe apps validate
# Check for common issues
stripe apps check

Erreurs de validation courantes :

ErreurCauseCorrection
Invalid permissionIdentifiant de permission inconnuConsultez la référence des permissions
Invalid viewportIdentifiant de viewport inconnuConsultez la référence des viewports
Missing purposePermission sans champ purposeAjoutez une chaîne purpose à chaque permission
Invalid versionChaîne de version non conforme à semverUtilisez le format MAJOR.MINOR.PATCH
Icon not foundLe chemin de l’icône ne se résout pasVérifiez que le fichier d’icône existe au chemin indiqué

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.