App Manifest-referentie
Het manifestbestand stripe-app.json is de centrale configuratie van je Stripe App. Het legt de identiteit, de rechten, de UI-weergaven, het beveiligingsbeleid en het gedrag na installatie van je app vast.
Volledig manifestvoorbeeld
{ "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" }}Schemareferentie
Velden op het hoogste niveau
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
id | string | Ja | Unieke app-identificatie in omgekeerde domeinnotatie (slugformaat) |
version | string | Ja | Semantische versietekenreeks (bijvoorbeeld "1.2.0") |
name | string | Ja | Weergavenaam in de marketplace (maximaal 35 tekens) |
icon | string | Ja | Relatief pad naar het icoonbestand van de app (PNG of SVG van 300x300) |
distribution_type | string | Ja | "public" voor de marketplace of "private" voor intern gebruik |
sandbox_install_compatible | boolean | Nee | Of de app in sandbox- of testmodus geïnstalleerd kan worden |
stripe_api_access_type | string | Nee | Manier van API-toegang: "oauth" of "api_key" |
allowed_redirect_uris | string[] | Nee | Toegestane OAuth-redirect-URI’s voor de installatieflow |
permissions | PermissionRequest[] | Ja | Array met rechtenverzoeken |
ui_extension | UIExtensionManifest | Nee | Configuratie van de UI-extensie |
post_install_action | PostInstallAction | Nee | Actie die volgt op de installatie van de app |
constants | object | Nee | Sleutel-waardeparen die tijdens runtime beschikbaar zijn in de app |
id
De app-identificatie is een tekenreeks in slugformaat, meestal in omgekeerde domeinnotatie:
"id": "com.tajo.brevo-integration"- Moet uniek zijn binnen alle Stripe Apps
- Gebruik alleen kleine letters, cijfers, koppeltekens en punten
- Kan niet meer worden gewijzigd nadat de app is aangemaakt
- Bepaalt de URL van de app in de marketplace
version
Volgt semantische versionering:
"version": "1.2.0"- MAJOR: brekende wijzigingen of ingrijpende nieuwe functionaliteit
- MINOR: nieuwe functies, achterwaarts compatibel
- PATCH: bugfixes en kleine verbeteringen
- Moet bij elke upload worden opgehoogd
distribution_type
Bepaalt wie je app kan installeren:
| Waarde | Beschrijving |
|---|---|
"public" | Beschikbaar voor iedereen in de Stripe App Marketplace |
"private" | Alleen te installeren vanuit je eigen Stripe-account |
stripe_api_access_type
Bepaalt hoe je app zich authenticeert bij de Stripe API:
| Waarde | Beschrijving |
|---|---|
"oauth" | Gebruikt de OAuth 2.0-flow voor authenticatie (aanbevolen voor publieke apps) |
"api_key" | Gebruikt beperkte API-sleutels (geschikt voor private apps) |
PermissionRequest
Elk rechtenverzoek legt vast welk specifiek Stripe API-recht je app nodig heeft:
{ "permission": "customer_read", "purpose": "Read customer profiles to sync with Brevo contacts"}| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
permission | string | Ja | De identificatie van het recht (zie Rechtenreferentie) |
purpose | string | Ja | Uitleg in gewone taal waarom dit recht nodig is |
Richtlijnen voor purpose:
- Schrijf duidelijke, concrete uitleg die merchants begrijpen
- Leg uit waarvoor het recht wordt gebruikt, niet alleen wat het toegang geeft
- Houd de beschrijving kort (één zin)
- Vermijd technisch jargon
UIExtensionManifest
Configureert de UI-componenten van je app:
{ "ui_extension": { "views": [...], "content_security_policy": {...} }}| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
views | ViewManifest[] | Ja | Array met weergavedeclaraties |
content_security_policy | CSPRequest | Nee | Content Security Policy voor externe bronnen |
ViewManifest
Elke weergave koppelt een React-component aan een viewport van het Stripe Dashboard:
{ "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView"}| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
viewport | string | Ja | De plek in het Dashboard waar deze weergave verschijnt (zie Viewportsreferentie) |
component | string | Ja | Naam van de React-component die wordt weergegeven (moet overeenkomen met de geëxporteerde componentnaam) |
Eén app kan meerdere weergaven declareren voor verschillende viewports:
"views": [ { "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView" }, { "viewport": "stripe.dashboard.payment.detail", "component": "PaymentDetailView" }, { "viewport": "stripe.dashboard.home.overview", "component": "OverviewView" }]CSPRequest
De Content Security Policy bepaalt met welke externe domeinen je app verbinding mag maken:
{ "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" }}| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
connect-src | string[] | Nee | Domeinen waarnaar de app netwerkverzoeken mag sturen |
image-src | string[] | Nee | Domeinen waarvan de app afbeeldingen mag laden |
purpose | string | Ja | Uitleg waarom deze externe verbindingen nodig zijn |
Caution
Neem alleen domeinen op waarmee je app daadwerkelijk verbinding moet maken. Te veel CSP-vermeldingen kunnen leiden tot een strengere review.
PostInstallAction
Bepaalt wat er direct gebeurt nadat iemand je app installeert:
{ "post_install_action": { "type": "onboarding" }}| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
type | string | Ja | Het type actie (zie hieronder) |
url | string | Voorwaardelijk | URL voor acties van het type external |
Actietypen
| Type | Gedrag |
|---|---|
"onboarding" | Opent de onboardingweergave van de app in het Dashboard |
"settings" | Opent de instellingenweergave van de app in het Dashboard |
"external" | Stuurt de gebruiker door naar een externe URL (vereist het veld url) |
Voorbeelden:
// 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" }}Bekijk de gids over acties na installatie voor uitgewerkte implementatiepatronen.
Constants
Definieer statische sleutel-waardeparen die tijdens runtime beschikbaar zijn in je app:
{ "constants": { "API_BASE_URL": "https://api.tajo.io/v1", "SYNC_INTERVAL_SECONDS": "300", "MAX_BATCH_SIZE": "100" }}- Alle waarden moeten tekenreeksen zijn
- Constanten worden tijdens de build in de app opgenomen
- Gebruik constanten voor configuratie die per omgeving verschilt
- Sla nooit geheimen of API-sleutels op als constante, gebruik daarvoor de Secret Store API
Constanten uitlezen in je appcode:
import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;Uitgebreid manifest voor ontwikkeling
Tijdens lokale ontwikkeling zijn er extra velden beschikbaar:
{ "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 }}De sectie dev wordt weggelaten bij productiebuilds en bij het uploaden van de app. Gebruik hem alleen voor gemaksinstellingen tijdens lokale ontwikkeling.
Validatie
Valideer je manifest voordat je het uploadt:
# Validate manifest syntax and schemastripe apps validate
# Check for common issuesstripe apps checkVeelvoorkomende validatiefouten:
| Fout | Oorzaak | Oplossing |
|---|---|---|
Invalid permission | Onbekende identificatie van een recht | Bekijk de Rechtenreferentie |
Invalid viewport | Onbekende viewport-identificatie | Bekijk de Viewportsreferentie |
Missing purpose | Recht zonder het veld purpose | Voeg aan elk recht een purpose-tekst toe |
Invalid version | Versietekenreeks die geen semver is | Gebruik het formaat MAJOR.MINOR.PATCH |
Icon not found | Het icoonpad kan niet worden gevonden | Controleer of het icoonbestand op het opgegeven pad staat |