Vraag vroegtijdige toegang aan

Vul je voornaam en een e-mailadres of telefoonnummer in. We nemen daarna contact met je op en leggen uit hoe je toegang krijgt tot Tajo.

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

VeldTypeVerplichtBeschrijving
idstringJaUnieke app-identificatie in omgekeerde domeinnotatie (slugformaat)
versionstringJaSemantische versietekenreeks (bijvoorbeeld "1.2.0")
namestringJaWeergavenaam in de marketplace (maximaal 35 tekens)
iconstringJaRelatief pad naar het icoonbestand van de app (PNG of SVG van 300x300)
distribution_typestringJa"public" voor de marketplace of "private" voor intern gebruik
sandbox_install_compatiblebooleanNeeOf de app in sandbox- of testmodus geïnstalleerd kan worden
stripe_api_access_typestringNeeManier van API-toegang: "oauth" of "api_key"
allowed_redirect_urisstring[]NeeToegestane OAuth-redirect-URI’s voor de installatieflow
permissionsPermissionRequest[]JaArray met rechtenverzoeken
ui_extensionUIExtensionManifestNeeConfiguratie van de UI-extensie
post_install_actionPostInstallActionNeeActie die volgt op de installatie van de app
constantsobjectNeeSleutel-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:

WaardeBeschrijving
"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:

WaardeBeschrijving
"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"
}
VeldTypeVerplichtBeschrijving
permissionstringJaDe identificatie van het recht (zie Rechtenreferentie)
purposestringJaUitleg 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": {...}
}
}
VeldTypeVerplichtBeschrijving
viewsViewManifest[]JaArray met weergavedeclaraties
content_security_policyCSPRequestNeeContent 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"
}
VeldTypeVerplichtBeschrijving
viewportstringJaDe plek in het Dashboard waar deze weergave verschijnt (zie Viewportsreferentie)
componentstringJaNaam 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"
}
}
VeldTypeVerplichtBeschrijving
connect-srcstring[]NeeDomeinen waarnaar de app netwerkverzoeken mag sturen
image-srcstring[]NeeDomeinen waarvan de app afbeeldingen mag laden
purposestringJaUitleg 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"
}
}
VeldTypeVerplichtBeschrijving
typestringJaHet type actie (zie hieronder)
urlstringVoorwaardelijkURL voor acties van het type external

Actietypen

TypeGedrag
"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:

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

Veelvoorkomende validatiefouten:

FoutOorzaakOplossing
Invalid permissionOnbekende identificatie van een rechtBekijk de Rechtenreferentie
Invalid viewportOnbekende viewport-identificatieBekijk de Viewportsreferentie
Missing purposeRecht zonder het veld purposeVoeg aan elk recht een purpose-tekst toe
Invalid versionVersietekenreeks die geen semver isGebruik het formaat MAJOR.MINOR.PATCH
Icon not foundHet icoonpad kan niet worden gevondenControleer of het icoonbestand op het opgegeven pad staat

Vraag vroegtijdige toegang aan

Vul je voornaam en een e-mailadres of telefoonnummer in. We nemen daarna contact met je op en leggen uit hoe je toegang krijgt tot Tajo.

automatische herkenning
AI-assistent

Hallo! Stel me vragen over de documentatie.