---
title: "Référence du manifest d’application | Tajo"
description: "Référence complète du schéma du fichier manifest stripe-app.json utilisé pour configurer les Stripe Apps"
url: https://tajo.io/fr/docs/stripe-apps/app-manifest/
markdown: https://tajo.io/fr/docs/stripe-apps/app-manifest.md
lang: fr-FR
author: "Set Noa"
author_url: https://tajo.io/fr/set-noa/
robots: noindex
---

Demandez un accès anticipé

Indiquez votre prénom et votre adresse e-mail professionnelle. Nous vous enverrons un lien pour confirmer votre demande d’accès à Tajo.

# Référence du manifest d’application

[Set Noa](https://tajo.io/fr/set-noa/)

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.

Caution

**Statut : prévue, non construite.** Tajo n’a pas d’app Stripe, donc rien dans cette section ne peut être installé aujourd’hui. Les identifiants d’app, URL et informations d’authentification présents sur cette page sont des exemples illustratifs, pas des endpoints actifs.

## Exemple de manifest complet

```json
{
  "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": "Read 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.example.com",
        "https://api.brevo.com"
      ],
      "image-src": [
        "https://cdn.example.com",
        "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.example.com/v1",
    "SYNC_INTERVAL_SECONDS": "300"
  }
}
```

## Référence du schéma

### Champs de premier niveau

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `id` | string | Oui | Identifiant unique de l’application en notation de domaine inversé (format slug) |
| `version` | string | Oui | Chaîne de version sémantique (par exemple `"1.2.0"`) |
| `name` | string | Oui | Nom affiché sur la marketplace (35 caractères maximum) |
| `icon` | string | Oui | Chemin relatif vers le fichier d’icône de l’application (PNG ou SVG de 300x300) |
| `distribution_type` | string | Oui | `"public"` pour la marketplace ou `"private"` pour un usage interne |
| `sandbox_install_compatible` | boolean | Non | Indique si l’application peut être installée en mode sandbox ou test |
| `stripe_api_access_type` | string | Non | Méthode d’accès à l’API : `"oauth"` ou `"api_key"` |
| `allowed_redirect_uris` | string\[\] | Non | URI de redirection OAuth autorisées pour le parcours d’installation |
| `permissions` | PermissionRequest\[\] | Oui | Tableau de demandes de permission |
| `ui_extension` | UIExtensionManifest | Non | Configuration de l’extension d’interface |
| `post_install_action` | PostInstallAction | Non | Action à exécuter après l’installation de l’application |
| `constants` | object | Non | Paires 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é :

```json
"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 :

```json
"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 :

| Valeur | Description |
| --- | --- |
| `"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 :

| Valeur | Description |
| --- | --- |
| `"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 :

```json
{
  "permission": "customer_read",
  "purpose": "Read customer profiles to sync with Brevo contacts"
}
```

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `permission` | string | Oui | L’identifiant de la permission (voir la [référence des permissions](https://tajo.io/fr/docs/stripe-apps/permissions)) |
| `purpose` | string | Oui | Explication 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 :

```json
{
  "ui_extension": {
    "views": [...],
    "content_security_policy": {...}
  }
}
```

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `views` | ViewManifest\[\] | Oui | Tableau de déclarations de vues |
| `content_security_policy` | CSPRequest | Non | Content Security Policy applicable aux ressources externes |

## ViewManifest

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

```json
{
  "viewport": "stripe.dashboard.customer.detail",
  "component": "CustomerDetailView"
}
```

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `viewport` | string | Oui | L’emplacement du Dashboard où cette vue s’affiche (voir la [référence des viewports](https://tajo.io/fr/docs/stripe-apps/viewports)) |
| `component` | string | Oui | Nom 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 :

```json
"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 :

```json
{
  "content_security_policy": {
    "connect-src": [
      "https://api.example.com",
      "https://api.brevo.com"
    ],
    "image-src": [
      "https://cdn.example.com"
    ],
    "purpose": "Connect to Tajo API for data sync and load images from CDN"
  }
}
```

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `connect-src` | string\[\] | Non | Domaines vers lesquels l’application peut émettre des requêtes réseau |
| `image-src` | string\[\] | Non | Domaines depuis lesquels l’application peut charger des images |
| `purpose` | string | Oui | Explication 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 :

```json
{
  "post_install_action": {
    "type": "onboarding"
  }
}
```

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `type` | string | Oui | Le type d’action (voir ci-dessous) |
| `url` | string | Conditionnel | URL pour les actions de type `external` |

### Types d’action

| Type | Comportement |
| --- | --- |
| `"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 :

```json
// 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](https://tajo.io/fr/docs/stripe-apps/post-install) 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 :

```json
{
  "constants": {
    "API_BASE_URL": "https://api.example.com/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 :

```typescript
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 :

```json
{
  "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 :

```bash
# Validate manifest syntax and schema
stripe apps validate

# Check for common issues
stripe apps check
```

Erreurs de validation courantes :

| Erreur | Cause | Correction |
| --- | --- | --- |
| `Invalid permission` | Identifiant de permission inconnu | Consultez la [référence des permissions](https://tajo.io/fr/docs/stripe-apps/permissions) |
| `Invalid viewport` | Identifiant de viewport inconnu | Consultez la [référence des viewports](https://tajo.io/fr/docs/stripe-apps/viewports) |
| `Missing purpose` | Permission sans champ purpose | Ajoutez une chaîne purpose à chaque permission |
| `Invalid version` | Chaîne de version non conforme à semver | Utilisez le format `MAJOR.MINOR.PATCH` |
| `Icon not found` | Le chemin de l’icône ne se résout pas | Vérifiez que le fichier d’icône existe au chemin indiqué |
