---
title: "Referanse for app-manifestet | Tajo"
description: "Fullstendig skjemareferanse for manifestfilen stripe-app.json som brukes til å konfigurere Stripe Apps"
url: https://tajo.io/no/docs/stripe-apps/app-manifest/
markdown: https://tajo.io/no/docs/stripe-apps/app-manifest.md
lang: no-NO
author: "Set Noa"
author_url: https://tajo.io/no/set-noa/
robots: noindex
---

Be om tidlig tilgang

Skriv inn fornavn og e-postadresse på jobb. Vi sender deg en lenke for å bekrefte forespørselen om tilgang til Tajo.

# Referanse for app-manifestet

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

Manifestfilen `stripe-app.json` er den sentrale konfigurasjonen for Stripe-appen din. Den angir appens identitet, tillatelser, UI-visninger, sikkerhetsregler og hva som skjer etter installasjon.

Caution

**Status: planlagt, ikke bygget.** Tajo har ingen Stripe-app, så ingenting i denne delen kan installeres i dag. App-identifikatorene, URL-ene og legitimasjonen på denne siden er illustrerende plassholdere, ikke ekte endepunkter.

## Fullstendig eksempel på manifest

```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"
  }
}
```

## Skjemareferanse

### Felter på toppnivå

| Felt | Type | Påkrevd | Beskrivelse |
| --- | --- | --- | --- |
| `id` | streng | Ja | Unik app-identifikator i omvendt domenenotasjon (slug-format) |
| `version` | streng | Ja | Streng med semantisk versjon (for eksempel `"1.2.0"`) |
| `name` | streng | Ja | Visningsnavnet som vises i marketplace (maks 35 tegn) |
| `icon` | streng | Ja | Relativ sti til appikonet (300x300 PNG eller SVG) |
| `distribution_type` | streng | Ja | `"public"` for marketplace eller `"private"` for intern bruk |
| `sandbox_install_compatible` | boolsk | Nei | Om appen kan installeres i sandkasse- eller testmodus |
| `stripe_api_access_type` | streng | Nei | Metode for API-tilgang: `"oauth"` eller `"api_key"` |
| `allowed_redirect_uris` | streng\[\] | Nei | Tillatte OAuth-omdirigerings-URI-er for installasjonsflyten |
| `permissions` | PermissionRequest\[\] | Ja | Liste over forespurte tillatelser |
| `ui_extension` | UIExtensionManifest | Nei | Konfigurasjon av UI-utvidelsen |
| `post_install_action` | PostInstallAction | Nei | Handling som skal utføres etter at appen er installert |
| `constants` | objekt | Nei | Nøkkel-verdi-par som er tilgjengelige i appen under kjøring |

### id

App-identifikatoren er en streng i slug-format, vanligvis i omvendt domenenotasjon:

```json
"id": "com.tajo.brevo-integration"
```

- Må være globalt unik på tvers av alle Stripe Apps
- Bruk bare små bokstaver, tall, bindestreker og punktum
- Kan ikke endres etter at appen er opprettet
- Bestemmer appens URL i marketplace

### version

Følger semantisk versjonering:

```json
"version": "1.2.0"
```

- **MAJOR**: Bruddendringer eller vesentlig ny funksjonalitet
- **MINOR**: Ny funksjonalitet som er bakoverkompatibel
- **PATCH**: Feilrettinger og mindre forbedringer
- Må økes for hver opplasting

### distribution\_type

Styrer hvem som kan installere appen din:

| Verdi | Beskrivelse |
| --- | --- |
| `"public"` | Tilgjengelig for alle brukere i Stripe App Marketplace |
| `"private"` | Kan bare installeres av din egen Stripe-konto |

### stripe\_api\_access\_type

Bestemmer hvordan appen din autentiserer seg mot Stripe API:

| Verdi | Beskrivelse |
| --- | --- |
| `"oauth"` | Bruker OAuth 2.0-flyt til autentisering (anbefalt for offentlige apper) |
| `"api_key"` | Bruker begrensede API-nøkler (passer for private apper) |

## PermissionRequest

Hver tillatelsesforespørsel angir én bestemt Stripe API-tillatelse appen din trenger:

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

| Felt | Type | Påkrevd | Beskrivelse |
| --- | --- | --- | --- |
| `permission` | streng | Ja | Identifikatoren for tillatelsen (se [referansen over tillatelser](https://tajo.io/no/docs/stripe-apps/permissions)) |
| `purpose` | streng | Ja | Forklaring på vanlig språk av hvorfor tillatelsen trengs |

**Retningslinjer for purpose:**

- Skriv tydelige, konkrete forklaringer som forhandlere forstår
- Forklar hva tillatelsen brukes til, ikke bare hva den gir tilgang til
- Hold beskrivelsene korte, gjerne én setning
- Unngå teknisk sjargong

## UIExtensionManifest

Konfigurerer UI-komponentene i appen din:

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

| Felt | Type | Påkrevd | Beskrivelse |
| --- | --- | --- | --- |
| `views` | ViewManifest\[\] | Ja | Liste over visninger som erklæres |
| `content_security_policy` | CSPRequest | Nei | Content Security Policy for eksterne ressurser |

## ViewManifest

Hver visning knytter en React-komponent til et viewport i Stripe-dashboardet:

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

| Felt | Type | Påkrevd | Beskrivelse |
| --- | --- | --- | --- |
| `viewport` | streng | Ja | Stedet i dashboardet der visningen vises (se [referansen over viewporter](https://tajo.io/no/docs/stripe-apps/viewports)) |
| `component` | streng | Ja | Navnet på React-komponenten som skal vises (må stemme med navnet på den eksporterte komponenten) |

Én app kan erklære flere visninger for ulike viewporter:

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

## CSPRequest

Content Security Policy styrer hvilke eksterne domener appen din kan koble seg til:

```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"
  }
}
```

| Felt | Type | Påkrevd | Beskrivelse |
| --- | --- | --- | --- |
| `connect-src` | streng\[\] | Nei | Domener appen kan sende nettverksforespørsler til |
| `image-src` | streng\[\] | Nei | Domener appen kan laste bilder fra |
| `purpose` | streng | Ja | Forklaring på hvorfor disse eksterne tilkoblingene trengs |

Caution

Ta bare med domener appen din faktisk må koble seg til. Mange unødvendige CSP-oppføringer kan gi strengere gjennomgang.

## PostInstallAction

Konfigurerer hva som skjer straks en bruker har installert appen din:

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

| Felt | Type | Påkrevd | Beskrivelse |
| --- | --- | --- | --- |
| `type` | streng | Ja | Typen handling (se under) |
| `url` | streng | Betinget | URL for handlinger av typen `external` |

### Handlingstyper

| Type | Oppførsel |
| --- | --- |
| `"onboarding"` | Åpner appens oppstartsvisning i dashboardet |
| `"settings"` | Åpner appens innstillingsvisning i dashboardet |
| `"external"` | Sender brukeren videre til en ekstern URL (krever feltet `url`) |

Eksempler:

```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"
  }
}
```

Se [veiledningen om handlinger etter installasjon](https://tajo.io/no/docs/stripe-apps/post-install) for detaljerte implementeringsmønstre.

## Konstanter

Definer statiske nøkkel-verdi-par som er tilgjengelige under kjøring i appen din:

```json
{
  "constants": {
    "API_BASE_URL": "https://api.example.com/v1",
    "SYNC_INTERVAL_SECONDS": "300",
    "MAX_BATCH_SIZE": "100"
  }
}
```

- Alle verdier må være strenger
- Konstantene bakes inn i appen når den bygges
- Bruk konstanter til konfigurasjon som varierer mellom miljøer
- Lagre **aldri** hemmeligheter eller API-nøkler som konstanter, bruk Secret Store API i stedet

Slik henter du konstanter i appkoden din:

```typescript
import { constants } from '@stripe/ui-extension-sdk/constants';

const apiUrl = constants.API_BASE_URL;
```

## Utvidet manifest under utvikling

Under lokal utvikling er noen ekstra felter tilgjengelige:

```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
  }
}
```

Seksjonen `dev` fjernes når appen bygges for produksjon og lastes opp. Bruk den bare til innstillinger som gjør lokal utvikling enklere.

## Validering

Valider manifestet ditt før du laster det opp:

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

# Check for common issues
stripe apps check
```

Vanlige valideringsfeil:

| Feil | Årsak | Løsning |
| --- | --- | --- |
| `Invalid permission` | Ukjent identifikator for tillatelse | Sjekk [referansen over tillatelser](https://tajo.io/no/docs/stripe-apps/permissions) |
| `Invalid viewport` | Ukjent identifikator for viewport | Sjekk [referansen over viewporter](https://tajo.io/no/docs/stripe-apps/viewports) |
| `Missing purpose` | Tillatelse uten feltet purpose | Legg til en purpose-streng for hver tillatelse |
| `Invalid version` | Versjonsstrengen følger ikke semver | Bruk formatet `MAJOR.MINOR.PATCH` |
| `Icon not found` | Stien til ikonet kan ikke løses | Kontroller at ikonfilen finnes på den angitte stien |
