---
title: "Reference for app-manifestet | Tajo"
description: "Komplet schema-reference for manifestfilen stripe-app.json, der konfigurerer Stripe Apps"
url: https://tajo.io/dk/docs/stripe-apps/app-manifest/
markdown: https://tajo.io/dk/docs/stripe-apps/app-manifest.md
lang: da-DK
author: "Set Noa"
author_url: https://tajo.io/dk/set-noa/
robots: noindex
---

Bed om tidlig adgang til Tajo

Indtast dit fornavn og din arbejds-e-mailadresse. Vi sender dig et link til at bekræfte din anmodning om adgang til Tajo.

# Reference for app-manifestet

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

Manifestfilen `stripe-app.json` er den centrale konfiguration af din Stripe App. Den beskriver appens identitet, rettigheder, UI-visninger, sikkerhedspolitikker og adfærd efter installation.

Caution

**Status: planlagt, ikke bygget.** Tajo har ingen Stripe-app, så intet i dette afsnit kan installeres i dag. App-ID’er, URL’er og loginoplysninger på denne side er illustrative pladsholdere, ikke aktive endpoints.

## Fuldt eksempel på et 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"
  }
}
```

## Schema-reference

### Felter på øverste niveau

| Felt | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- |
| `id` | string | Ja | Unikt app-id skrevet i omvendt domænenotation (slug-format) |
| `version` | string | Ja | Semantisk versionsnummer (f.eks. `"1.2.0"`) |
| `name` | string | Ja | Det navn, der vises på marketplace (maks. 35 tegn) |
| `icon` | string | Ja | Relativ sti til appens ikonfil (300x300 PNG eller SVG) |
| `distribution_type` | string | Ja | `"public"` til marketplace eller `"private"` til intern brug |
| `sandbox_install_compatible` | boolean | Nej | Om appen kan installeres i sandbox- eller testtilstand |
| `stripe_api_access_type` | string | Nej | Metode til API-adgang: `"oauth"` eller `"api_key"` |
| `allowed_redirect_uris` | string\[\] | Nej | Tilladte OAuth-redirect-URI’er i installationsflowet |
| `permissions` | PermissionRequest\[\] | Ja | Liste over anmodninger om rettigheder |
| `ui_extension` | UIExtensionManifest | Nej | Konfiguration af UI-udvidelsen |
| `post_install_action` | PostInstallAction | Nej | Handling, der udføres efter installationen af appen |
| `constants` | object | Nej | Nøgle-værdi-par, som appen kan tilgå ved kørsel |

### id

Appens id er en streng i slug-format, typisk skrevet i omvendt domænenotation:

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

- Skal være globalt unikt på tværs af alle Stripe Apps
- Brug kun små bogstaver, tal, bindestreger og punktummer
- Kan ikke ændres, når appen først er oprettet
- Bestemmer appens URL på marketplace

### version

Følger semantisk versionering:

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

- **MAJOR**: Brydende ændringer eller væsentlige nye funktioner
- **MINOR**: Nye funktioner, bagudkompatible
- **PATCH**: Fejlrettelser og mindre forbedringer
- Skal tælles op ved hver upload

### distribution\_type

Bestemmer, hvem der kan installere din app:

| Værdi | Beskrivelse |
| --- | --- |
| `"public"` | Tilgængelig for alle brugere på Stripe App Marketplace |
| `"private"` | Kan kun installeres af din egen Stripe-konto |

### stripe\_api\_access\_type

Bestemmer, hvordan din app autentificerer sig mod Stripe API:

| Værdi | Beskrivelse |
| --- | --- |
| `"oauth"` | Bruger OAuth 2.0-flowet til autentificering (anbefales til offentlige apps) |
| `"api_key"` | Bruger begrænsede API-nøgler (velegnet til private apps) |

## PermissionRequest

Hver anmodning om rettigheder angiver en bestemt Stripe API-rettighed, som din app har brug for:

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

| Felt | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- |
| `permission` | string | Ja | Rettighedens id (se [referencen over rettigheder](https://tajo.io/dk/docs/stripe-apps/permissions)) |
| `purpose` | string | Ja | En forklaring i almindeligt sprog på, hvorfor rettigheden er nødvendig |

**Retningslinjer for purpose:**

- Skriv klare og konkrete forklaringer, som forhandlere kan forstå
- Forklar, hvad rettigheden bruges til, ikke bare hvad den giver adgang til
- Hold beskrivelsen kort (én sætning)
- Undgå teknisk jargon

## UIExtensionManifest

Konfigurerer appens UI-komponenter:

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

| Felt | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- |
| `views` | ViewManifest\[\] | Ja | Liste over visninger, appen erklærer |
| `content_security_policy` | CSPRequest | Nej | Content Security Policy for eksterne ressourcer |

## ViewManifest

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

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

| Felt | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- |
| `viewport` | string | Ja | Det sted i Dashboard, hvor visningen vises (se [referencen over viewports](https://tajo.io/dk/docs/stripe-apps/viewports)) |
| `component` | string | Ja | Navnet på den React-komponent, der skal renderes (skal matche navnet på den eksporterede komponent) |

En enkelt app kan erklære flere visninger til forskellige 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

Din Content Security Policy bestemmer, hvilke eksterne domæner din app må forbinde 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åkrævet | Beskrivelse |
| --- | --- | --- | --- |
| `connect-src` | string\[\] | Nej | De domæner, appen må sende netværksforespørgsler til |
| `image-src` | string\[\] | Nej | De domæner, appen må hente billeder fra |
| `purpose` | string | Ja | Forklaring på, hvorfor de eksterne forbindelser er nødvendige |

Caution

Medtag kun de domæner, din app reelt har brug for at forbinde til. For mange CSP-poster kan udløse en grundigere gennemgang.

## PostInstallAction

Bestemmer, hvad der sker umiddelbart efter, at en bruger har installeret din app:

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

| Felt | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- |
| `type` | string | Ja | Handlingens type (se nedenfor) |
| `url` | string | Betinget | URL til handlinger af typen `external` |

### Handlingstyper

| Type | Adfærd |
| --- | --- |
| `"onboarding"` | Åbner appens onboarding-visning i Dashboard |
| `"settings"` | Åbner appens indstillingsvisning i Dashboard |
| `"external"` | Sender brugeren videre til en ekstern URL (kræver 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 [guiden til handlinger efter installation](https://tajo.io/dk/docs/stripe-apps/post-install) for detaljerede implementeringsmønstre.

## Konstanter

Definér statiske nøgle-værdi-par, som din app kan tilgå ved kørsel:

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

- Alle værdier skal være strenge
- Konstanter bliver bygget ind i appen på build-tidspunktet
- Brug konstanter til konfiguration, der er forskellig fra miljø til miljø
- Gem **aldrig** hemmeligheder eller API-nøgler som konstanter, brug Secret Store API i stedet

Tilgå konstanter i din app-kode:

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

const apiUrl = constants.API_BASE_URL;
```

## Udvidet manifest til udvikling

Under lokal udvikling har du adgang til nogle ekstra felter:

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

Afsnittet `dev` fjernes ved produktionsbuilds og upload af appen. Brug det udelukkende til indstillinger, der gør lokal udvikling nemmere.

## Validering

Validér dit manifest, før du uploader:

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

# Check for common issues
stripe apps check
```

Almindelige valideringsfejl:

| Fejl | Årsag | Løsning |
| --- | --- | --- |
| `Invalid permission` | Ukendt id for rettigheden | Tjek [referencen over rettigheder](https://tajo.io/dk/docs/stripe-apps/permissions) |
| `Invalid viewport` | Ukendt id for viewport | Tjek [referencen over viewports](https://tajo.io/dk/docs/stripe-apps/viewports) |
| `Missing purpose` | Rettighed uden feltet purpose | Tilføj en purpose-tekst til hver rettighed |
| `Invalid version` | Versionsnummeret følger ikke semver | Brug formatet `MAJOR.MINOR.PATCH` |
| `Icon not found` | Stien til ikonet kan ikke findes | Kontrollér, at ikonfilen ligger på den angivne sti |
