# Documentation du manifeste d'application Comprendre le manifeste d'application, un index de tous les champs, types et descriptions de votre fichier de manifeste d'application. Un manifeste d’application décrit la manière dont votre application s’intègre à la plateforme Stripe. Chaque application Stripe doit inclure un fichier manifeste à la racine de la structure du répertoire du projet. Vous pouvez mettre à jour le manifeste de l’application avec la [CLI Stripe Apps](https://docs.stripe.com/stripe-apps/reference/cli.md) ou le modifier directement. Par exemple, vous pouvez [ajouter une autorisation](https://docs.stripe.com/stripe-apps/reference/permissions.md) via la commande `stripe apps grant permission`, ou en ajoutant une demande d’autorisation directement dans le manifeste de l’application. Les fichiers du manifeste de l’application suit le [schéma](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#schema) décrit ci-dessous. #### Manifeste v1 Le manifeste v1 est un fichier `stripe-app.json` situé à la racine du répertoire du projet. ## Exemple ```json { "id": "com.invoicing.[YOUR_APP]", "version": "1.2.3", "name": "[YOUR APP] Shipment Invoicing", "icon": "./[YOUR_APP]_icon_32.png", "sandbox_install_compatible": true, "distribution_type": "public", // or "private" (default) "stripe_api_access_type": "oauth", // or "platform" (default) or "restricted_api_key" "allowed_redirect_uris": ["https://example.com/oauth/callback"], "permissions": [ { "permission": "invoice_write", "purpose": "Allows [YOUR APP] to add shipping line items to an invoice." }, { "permission": "product_read", "purpose": "Allows [YOUR APP] to use product sizes for calculating shipping." } ], "ui_extension": { "views": [ { "viewport": "stripe.dashboard.invoice.detail", "component": "AddShipping" } ], "content_security_policy": { "connect-src": [ "https://api.example.com/a_specific_endpoint", "https://api.example.com/a_whole_subdirectory/" ], "image-src": [ "https://images.example.com/one_image.jpg", "https://images.example.com/a_whole_subdirectory/" ], "purpose": "These URLs allow the app to contact [YOUR APP] for creating shipping details and loading images of shipping partner logos" } }, "post_install_action": { "type": "external", "url": "https://example.com" }, "constants": { "API_BASE": "https://api.example.com" } } ``` ## Schéma Les fichiers de manifeste d’application sont des fichiers JSON qui comportent les champs suivants : | Nom du champ | Type | Exemples | | -------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | | id | slug | com.invoicing.myapp | Un identifiant unique pour votre application, que vous définissez. Stripe le valide lors de la soumission initiale. | | version | chaîne | 1.2.4 | Une version d’application que vous définissez. Vous pouvez utiliser le format de votre choix pour les identifiants de version. | | nom | chaîne | Mon Application | Le nom affiché dans l’interface utilisateur lorsqu’il est fait référence à votre application. Les applications distribuées publiquement ne doivent pas inclure les mots « Stripe », « application », « gratuit » ou « payant ». | | icon | chaîne | ./favicon.png | Le chemin relatif dans le paquet d’application menant vers une icône PNG 300x300 pixels à afficher avec l’attribution. | | distribution_type | « publique » | « privée » | « publique » | Le [type de distribution](https://docs.stripe.com/stripe-apps/distribution-options.md) de l’application. | | sandbox_install_compatible | true | false | true | Activez [les installations en environnement de test](https://docs.stripe.com/stripe-apps/enable-sandbox-support.md) pour l’application. | | stripe_api_access_type | « plateforme » | « oauth » | « restricted_api_key » | oauth | La [méthode d’authentification de l’API](https://docs.stripe.com/stripe-apps/api-authentication.md) de votre application. | | allowed_redirect_uris | Tableau | | Les URL vers lesquelles les utilisateurs sont redirigés après l’installation de votre application avec OAuth ou avec un lien d’installation. | | autorisations | Tableau<[PermissionRequest](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#permissionrequest)\> | | Les autorisations dont l’application a besoin pour fonctionner. | | ui_extension | [UIExtensionManifest](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#uiextensionmanifest) | | Configuration spécifique de la fonctionnalité « Extension d’interface utilisateur ». | | post_install_action | [PostInstallAction](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#postinstallaction) | | Configuration facultative qui redirige les utilisateurs vers un emplacement personnalisé une fois l’application installée. | | constantes | Objet | `{"API_BASE": "https://api.example.com/v1"}` | Un objet avec des valeurs constantes arbitraires auxquelles vous pouvez accéder dans les [propriétés de contexte de l’extension d’interface utilisateur](https://docs.stripe.com/stripe-apps/reference/extensions-sdk-api.md#props) et [remplacer pour le développement local à l’aide de l’indicateur de manifeste de la CLI](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#extended-manifest). | ### PermissionRequest Une demande d’autorisation comporte les champs suivants : | Nom du champ | Type | Exemple | | ------------ | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | autorisation | chaîne | customer_write | Autorisations demandées par l’application. [En savoir plus sur les autorisations](https://docs.stripe.com/stripe-apps/reference/permissions.md). | | purpose | string | Map | « Cette application charge des images depuis images.example.com. » | Une explication destinée à l’utilisateur dévoilant aux personnes qui installent votre application les raisons pour lesquelles celle-ci a besoin de ces autorisations. | | nom | chaîne | « Il est nécessaire pour [VOTRE APPLICATION] de mettre à jour les factures associées aux frais de livraison sélectionnés » | Une explication destinée à Stripe dévoilant aux réviseurs de l’application les raisons pour lesquelles votre application a besoin de ces autorisations. | ### UiExtensionManifest Un manifeste d’extension d’interface utilisateur comporte les champs suivants : | Nom du champ | Type | Exemple | | ----------------------- | ---------------------------------------------------------------------------------------------------- | ------- | | views | Tableau<[ViewManifest](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#viewmanifest)\> | | Composants React qui s’affichent dans le Dashboard à un endroit distinct. [En savoir plus](https://docs.stripe.com/stripe-apps/design.md#types-of-views). | | content_security_policy | [CSPRequest](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#csprequest) | | Requête pour que votre extension d’interface utilisateur obtienne un accès à des URL spécifiques pour un motif donné. | ### ViewManifest Un manifeste de vue comporte les champs suivants : | Nom du champ | Type | Exemple | | ------------ | ------ | ------------------------------- | | viewport | chaîne | stripe.dashboard.invoice.detail | Un identifiant qui indique à quel endroit peut apparaître une extension d’interface utilisateur dans le Dashboard. Consultez la [liste des fenêtres d’affichage disponibles](https://docs.stripe.com/stripe-apps/reference/viewports.md). | | component | chaîne | AddShippingSelector | Un composant React exporté qui utilise l’un de nos [composants de vue](https://docs.stripe.com/stripe-apps/components.md#views). | ### CSPRequest Une demande de politique de sécurité du contenu comporte les champs suivants : | Nom du champ | Type | Exemple | | ------------ | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | connect-src | Tableau | https://o0.ingest.sentry.io/api/ | Les URL des API tierces autorisées. Si l’URL se termine par une barre oblique, tous ses enfants reçoivent également l’autorisation. Pour en savoir plus, consultez la section sur l’[utilisation d’API tierces](https://docs.stripe.com/stripe-apps/build-ui.md#use-third-party-apis). | | image-src | Tableau | https://images.example.com/ | Les URL à partir desquelles charger le composant [Img](https://docs.stripe.com/stripe-apps/components/img.md). Si l’URL termine par une barre oblique, tous ses enfants reçoivent également l’autorisation. | | purpose | string | Map | « Cette application charge les images de https://images.example.com et envoie des rapports d’erreurs anonymes à notre partenaire Sentry à des fins de débogage. » | Explication à présenter aux utilisateurs lors de l’installation de l’application, décrivant la raison pour laquelle le plugin doit communiquer directement avec ces URL. | Les URL doivent être conformes aux [directives de la politique de sécurité du contenu](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP). Nous n’autorisons que les schémas HTTPS. Pour en savoir plus sur l’utilisation et le dépannage, consultez la section [Utiliser des API tierces](https://docs.stripe.com/stripe-apps/build-ui.md#use-third-party-apis). ### PostInstallAction Une action post-installation comporte les champs suivants : | Nom du champ | Type | Exemple | | ------------ | ------ | ---------------------- | | type | chaîne | `external`, `settings` | Action supplémentaire à réaliser après l’installation de votre application dans le Dashboard Stripe par vos utilisateurs. Pour en savoir plus, consultez la page relative à l’[activation de la configuration post-installation](https://docs.stripe.com/stripe-apps/post-install-actions.md). | | url | chaîne | https://example.com | URL externe vers laquelle rediriger les utilisateurs une fois qu’ils ont installé votre application. Obligatoire uniquement si le type d’action de post-installation est `external`. | #### Manifeste v2 Le manifeste v2 est un fichier `stripe-app.yaml` situé à la racine du répertoire du projet. Pour migrer une application existante de v1 vers v2, exécutez `stripe apps migrate`. ## Exemple ```yaml id: com.invoicing.YOUR_APP version: 1.2.3 name: YOUR APP Shipment Invoicing icon: icons/icon.png declarations: distribution_type: public stripe_api_access: permissions: - permission: invoice_write purpose: Allows YOUR APP to add shipping line items to an invoice. - permission: product_read purpose: Allows YOUR APP to use product sizes for calculating shipping. stripe_api_access_type: oauth allowed_redirect_uris: - https://example.com/oauth/callback post_install_action: type: external url: https://example.com constants: API_BASE: https://api.example.com ui_extension: views: - viewport: stripe.dashboard.invoice.detail component: AddShipping content_security_policy: connect-src: - https://api.example.com/a_specific_endpoint - https://api.example.com/a_whole_subdirectory/ image-src: - https://images.example.com/one_image.jpg - https://images.example.com/a_whole_subdirectory/ purpose: >- These URLs allow the app to contact YOUR APP for creating shipping details and loading images of shipping partner logos extensions: [] ``` ## Schéma Le manifeste v2 est un fichier YAML. Les champs obligatoires sont `id`, `name`, `version` et `extensions`. | Nom du champ | Type | Exemples | | ------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------- | | id | chaîne | com.invoicing.myapp | Un identifiant unique global pour votre application, défini par vous. Il doit commencer et se terminer par un caractère alphanumérique. Stripe effectue une validation lors de l’envoi initial. | | version | chaîne | 1.2.4 | Une version d’application que vous définissez. Vous pouvez utiliser le format de votre choix pour les identifiants de version. | | nom | chaîne | Mon Application | Le nom affiché dans l’interface utilisateur lorsqu’il est fait référence à votre application. | | icon | chaîne | icons/icon.png | Chemin vers une image PNG de 300 × 300 pixels pour votre application dans l’App Marketplace. | | déclarations | [Déclarations](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-declarations) | | Déclarations de niveau supérieur concernant l’application, incluant le type de distribution, l’accès à l’API et les autorisations. | | ui_extension | [UIExtension](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-uiextension) | | Configuration de l’interface utilisateur de l’application, des autorisations et de son comportement dans le Dashboard Stripe. | | extensions | Tableau<[Extension](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-extension)\> | | Liste des extensions fournies par l’application. Obligatoire (peut être vide). | | custom_object_definitions | [CustomObjectDefinitions](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-customobjectdefinitions) | | Définitions d’objets personnalisés fournies par l’application. | ### Déclarations | Nom du champ | Type | Exemple | | -------------------------- | ------------------------------------------------------------------------------------------------------- | ---------------------------------------- | | distribution_type | « publique » | « privée » | « publique » | Le [type de distribution](https://docs.stripe.com/stripe-apps/distribution-options.md) de l’application. | | stripe_api_access | objet | | Autorisations de l’application. Contient des `permissions` et, de manière facultative, `connect_permissions`, chacun étant un tableau de [Permission](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-permission). | | stripe_api_access_type | “default” | “restricted_api_key” | “oauth” | “platform” | « oauth » | La [méthode d’authentification de l’API](https://docs.stripe.com/stripe-apps/api-authentication.md) de votre application. | | sandbox_install_compatible | true | false | true | Activez [les installations en environnement de test](https://docs.stripe.com/stripe-apps/enable-sandbox-support.md) pour l’application. | | post_install_action | [PostInstallAction](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-postinstallaction) | | Configuration facultative qui redirige les utilisateurs vers un emplacement personnalisé une fois l’application installée. | | constantes | Objet | `{API_BASE: https://api.example.com/v1}` | Valeurs personnalisées transmises à vos vues via les props de contexte. | | allowed_redirect_uris | Tableau | | Liste des URL autorisées vers lesquelles l’utilisateur peut être redirigé après une installation réussie. | ### Autorisation | Nom du champ | Type | Exemple | | ------------ | ------ | ---------------------------------------------------------------------------- | | autorisation | chaîne | customer_write | L’ID de l’autorisation. [En savoir plus sur les autorisations](https://docs.stripe.com/stripe-apps/reference/permissions.md). | | purpose | chaîne | « Cette application charge des images depuis images.example.com. » | La raison de la demande d’autorisation. | ### UIExtension | Nom du champ | Type | Exemple | | ----------------------- | ------------------------------------------------------------------------------------------------------- | ------- | | views | Tableau<[ViewManifest](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-viewmanifest)\> | | Configurez où l’application apparaît dans le Dashboard. | | content_security_policy | [CSPRequest](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-csprequest) | | Configurer la politique de sécurité du contenu de votre application | ### ViewManifest | Nom du champ | Type | Exemple | | ------------ | ------ | ------------------------------- | | viewport | chaîne | stripe.dashboard.invoice.detail | Un identifiant qui indique où une extension d’interface utilisateur apparaît dans le Dashboard. Consultez la [liste des fenêtres d’affichage disponibles](https://docs.stripe.com/stripe-apps/reference/viewports.md). | | component | chaîne | AddShipping | Nom du composant React dans le répertoire `src/views` à afficher. | ### CSPRequest | Nom du champ | Type | Exemple | | ------------ | --------------- | -------------------------------------------------------------------------- | | connect-src | Tableau | https://o0.ingest.sentry.io/api/ | Les URL des API tierces autorisées. Si l’URL se termine par une barre oblique, tous ses enfants reçoivent également l’autorisation. Pour en savoir plus, consultez la section sur l’[utilisation d’API tierces](https://docs.stripe.com/stripe-apps/build-ui.md#use-third-party-apis). | | image-src | Tableau | https://images.example.com/ | URL que le composant [Img](https://docs.stripe.com/stripe-apps/components/img.md) peut charger. Si l’URL se termine par une barre oblique, tous les chemins supplémentaires sont également autorisés. | | purpose | chaîne | « Cette application charge les images de https://images.example.com.” | Un message affiché aux utilisateurs lors de l’installation de l’application, expliquant pourquoi l’application doit communiquer avec des URL externes. | ### PostInstallAction | Nom du champ | Type | Exemple | | ------------ | ------ | --------------------------------------------- | | type | chaîne | `external`, `modal`, `onboarding`, `settings` | Action supplémentaire après l’installation de votre application dans le Dashboard Stripe. Pour plus d’informations, consultez [Activer la configuration post-install](https://docs.stripe.com/stripe-apps/post-install-actions.md). | | url | chaîne | https://example.com | URL externe vers laquelle rediriger les utilisateurs après l’installation de votre application. Obligatoire uniquement lorsque `type` est `external`. | ### Extension Chaque entrée du tableau `extensions` décrit une extension de script implémentée par l’application. | Nom du champ | Type | Exemple | | -------------- | --------------------------------------------------------------------------------------------------- | ------------------------ | | id | chaîne | my-extension | Un identifiant unique pour l’extension au sein de l’application. | | nom | chaîne | Mon extension | Le nom d’affichage de l’extension. | | description | chaîne | | Description facultative définie par le développeur (300 caractères maximum). | | interface_id | chaîne | billing.sales.prorations | Identifiant de l’interface d’extension que cette extension implémente. | | version | chaîne | 0.1.0 | La version sémantique de l’extension. | | stripe_version | chaîne | 20/06/2024 | La version de l’API Stripe à utiliser pour cette extension. | | autorisations | Tableau<[Permission](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-permission)\> | | Autorisations requises par l’extension. | | script | [ScriptConfig](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-scriptconfig) | | Configuration du script de l’extension. | | configuration | [CustomInput](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-custominput) | | Schéma d’entrée personnalisé et interface utilisateur de l’extension. | | méthodes | Objet | | Méthodes implémentées par l’extension. Les clés correspondent aux noms des méthodes. Les valeurs sont des objets [MethodConfig](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-methodconfig). | | endpoints | Tableau<[Endpoint](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-endpoint)\> | | Endpoints fournis par l’extension. | ### ScriptConfig | Nom du champ | Type | Exemple | | ------------ | ------------------------ | ------------------------ | | type | « typescript » | « typescript » | Le type de script. | | contenu | chaîne | | Le contenu ou le point d’entrée du script. | ### CustomInput | Nom du champ | Type | Exemple | | ------------ | ----- | ------- | | input_schema | objet | | La définition du schéma d’entrée. Nécessite `type: "json_schema"` et `content` (chemin vers un fichier `.json`). | | ui_schema | objet | | La définition du schéma d’interface utilisateur au format JSONForms. Nécessite `type: "jsonforms"` et `content` (chemin vers un fichier `.json`). | ### MethodConfig Chaque valeur de méthode est l’une des suivantes : **Mise en œuvre :** | Nom du champ | Type | Exemple | | ------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------- | | implementation_type | « script » | « script » | Le type de mise en œuvre. | | custom_input | [CustomInput](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-custominput) | | Schéma d’entrée personnalisé et interface utilisateur pour cette méthode. | | erreurs | Tableau<[ErrorDefinition](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-errordefinition)\> | | Déclarations d’erreurs structurées pour cette méthode. | **Mise en œuvre de fonctions à distance :** | Nom du champ | Type | Exemple | | ------------------- | ------------------------------------------------------------------------------------------------------------- | ----------------------------- | | implementation_type | « remote_function » | « remote_function » | Le type de mise en œuvre. | | endpoint_id | chaîne | | L’ID de l’endpoint à invoquer pour cette méthode. | | resource_id | chaîne | | L’identifiant de la ressource gérée à utiliser. | | sandbox_resource_id | chaîne | | L’identifiant de la ressource gérée par la plateforme à utiliser dans les environnements de test. | | erreurs | Tableau<[ErrorDefinition](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-errordefinition)\> | | Déclarations d’erreurs structurées pour cette méthode. | ### ErrorDefinition | Nom du champ | Type | Exemple | | --------------------------- | ------- | ------------------------------------------- | | code | chaîne | invalid_amount | Identifiant d’erreur lisible par machine. Doit être unique au sein de la méthode et utiliser le format snake_case. | | message | chaîne | « Le montant doit être positif. » | Modèle de message lisible par un humain. | | nouvelle tentative possible | booléen | false | Indique si l’appelant doit réessayer après cette erreur. La valeur par défaut est `false`. | ### Endpoint | Nom du champ | Type | Exemple | | --------------- | --------------------------------------------------------------------------------------------------------- | ------------------------- | | id | chaîne | my-endpoint | Un identifiant unique pour l’endpoint au sein de l’extension. | | type | “stripe_function” | “custom_http” | « custom_http » | Le type d’endpoint. | | production | [EndpointDefinition](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-endpointdefinition) | | Configuration de l’environnement en mode production. | | managed_sandbox | [EndpointDefinition](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-endpointdefinition) | | Configuration de l’environnement de test géré. | | test | [EndpointDefinition](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-endpointdefinition) | | Configuration de l’environnement de test. | ### EndpointDefinition | Nom du champ | Type | Exemple | | ------------ | --------------------------------------------------------------------------------------------- | ------------------------------------------------------ | | url | chaîne | https://api.example.com/handler | L’URL HTTPS de l’endpoint. | | purpose | chaîne | « Prend en charge les demandes de prorata. » | L’objectif de l’endpoint. | | autorisation | [EndpointAuth](https://docs.stripe.com/stripe-apps/reference/app-manifest.md#v2-endpointauth) | | Configuration d’authentification pour l’endpoint. | ### EndpointAuth | Nom du champ | Type | Exemple | | ------------ | ------------------------- | -------------------------- | | type | “bearer_token” | “header” | « bearer_token » | Le type d’authentification. | | secret_name | chaîne | my-api-key | Le nom de la clé secrète contenant les identifiants d’authentification. | | header_name | chaîne | X-Api-Key | Nom de l’en-tête à utiliser pour l’authentification. Obligatoire lorsque `type` est `"header"`. | ### CustomObjectDefinitions | Nom du champ | Type | Exemple | | ------------ | --------------- | ------- | | définitions | Tableau | | Liste des définitions d’objets personnalisés. Chaque entrée nécessite un `id` (chaîne de caractères) et un objet `specification` avec `type: "typescript"` ainsi qu’un champ `content` pointant vers le chemin du fichier de spécification. | ## Utiliser un fichier manifeste étendu pour le développement Lors du développement local, il se peut que vous deviez utiliser des valeurs de *manifeste d’application* (In a Stripe App, the app manifest is a stripe-app.json file in your app's root directory. It defines your app's ID, views, permissions, and other essential properties) différentes de celles que vous utilisez en mode production. Par exemple, le back-end de votre application peut se trouver sur `https://api.example.com/v1`, alors que votre back-end de développement local s’exécute sur `http://localhost:8888/v1`. Compte tenu de cet exemple de fichier manifeste : ```json { "id": "com.invoicing.[YOUR_APP]", "version": "1.2.3", "name": "[YOUR APP] Shipment Invoicing", "icon": "./[YOUR_APP]_icon_32.png", "permissions": [], "ui_extension": { "views": [ { "viewport": "stripe.dashboard.invoice.detail", "component": "InvoiceDetail" } ], "content_security_policy": { "connect-src": ["https://api.example.com/v1"], "purpose": "Allow the app to retrieve example data" } }, "constants": { "API_BASE": "https://api.example.com/v1" } } ``` Créez un autre fichier manifeste nommé `stripe-app.[anything].json` qui étend votre manifeste principal et le remplace par des valeurs locales. Par exemple : ```json { "extends": "stripe-app.json", "ui_extension": { "content_security_policy": { "connect-src": ["http://localhost:8888/v1"] } }, "constants": { "API_BASE": "http://localhost:8888/v1" } } ``` Pour utiliser le fichier manifeste local pendant le développement, chargez-le à l’aide de l’indicateur `--manifest`. Par exemple : ```bash stripe apps start --manifest stripe-app.dev.json ``` Accédez aux valeurs `constants` dans vos vues à l’aide des [propriétés contextuelles](https://docs.stripe.com/stripe-apps/reference/extensions-sdk-api.md#props). Par exemple : ```jsx import {useEffect, useState} from 'react'; import type {ExtensionContextValue} from '@stripe/ui-extension-sdk/context'; import {Box} from '@stripe/ui-extension-sdk/ui'; const InvoiceDetail = ({environment}: ExtensionContextValue) => { const [data, setData] = useState(null); useEffect(() => { fetch(`${environment.constants.API_BASE}/some-endpoint`) .then(response => response.json()) .then(json => setData(json)); }, []); return data ? Here is your message: {data.message} : 'Loading...'; }; ``` ## See also - [Documentation de la CLI Stripe Apps](https://docs.stripe.com/stripe-apps/reference/cli.md) - [Documentation relatives aux autorisations](https://docs.stripe.com/stripe-apps/reference/permissions.md) - [Fonctionnement des extensions d’interface utilisateur](https://docs.stripe.com/stripe-apps/how-ui-extensions-work.md)