> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kazzle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Marketplace

> Publiceer apps zodat andere spaces deze kunnen ontdekken en installeren.

# Marketplace

Het publiceren van een app naar de marketplace maakt deze beschikbaar voor andere Kazzle spaces om te ontdekken en installeren.

## Wat publiceren doet

Publiceren maakt de app installeerbaar voor andere spaces. Mensen zien de naam, subtitle, icoon, uitgever en zichtbaarheid van de app, en installeren deze vervolgens in hun eigen space. Publiceren vereist een `subtitle` in `kazzle.config.ts` — een eenregelige tagline onder de app-naam.

De gepubliceerde versie gebruikt de nieuwste commit op `main`. Er is geen aparte release branch voor gepubliceerde apps.

De app-definitie bepaalt expliciet of het klikken op een geïnstalleerde app een component opent, een ingebedde of externe URL opent, of geen launch surface heeft. Apps kunnen ook Kazzle-identiteit vereisen voordat ze worden geopend of lifecycle webhooks ontvangen.

Zie [Publiceer je app](/apps/build-and-publish) voor instructies over het publiceren van een app.

## Installaties

Wanneer iemand een gepubliceerde app installeert, maakt Kazzle een installatierecord aan in hun space. De installerende space is eigenaar van de installatie en alle bijbehorende gegevens.

## Gebruikersidentiteit

Wanneer een ingelogde Kazzle-gebruiker een geïnstalleerde app opent, verstrekt Kazzle de app informatie over de huidige gebruiker.

Kazzle voegt een kortlevende JWT toe als bearer token. De app kan het token verifiëren tegen Kazzle's openbare JWKS om de gebruiker, space en installatie uit te lezen.

Het token bevat deze claims:

| Claim     | Betekenis                                      |
| --------- | ---------------------------------------------- |
| `aud`     | `kazzle:app`                                   |
| `iss`     | `https://api.kazzle.app`                       |
| `sub`     | Kazzle gebruikers-ID                           |
| `user`    | `{ id, email }` van de gebruiker               |
| `space`   | ID van de space waarin de app is geïnstalleerd |
| `install` | ID van deze specifieke installatie             |

Voorbeeld verificatie:

```ts theme={"theme":"material-theme-darker"}
import { jwtVerify, createRemoteJWKSet } from 'jose';

const JWKS = createRemoteJWKSet(new URL('https://api.kazzle.app/auth/.well-known/jwks.json'));

async function getUserFromToken(token: string) {
  const { payload } = await jwtVerify(token, JWKS, {
    audience: 'kazzle:app',
    issuer: 'https://api.kazzle.app',
  });
  return payload;
}
```

De app-definitie bepaalt het launch-gedrag voor gepubliceerde apps:

* `launch`: selecteert `none`, een benoemde app-component, of een URL met een expliciet ingebedde of externe target.
* `kazzleAuth`: `required` betekent dat alleen ingelogde Kazzle-gebruikers de app kunnen openen; `optional` staat toe dat de app zonder Kazzle-identiteit wordt geopend.

## Webhooks

Als de app-definitie een `webhookUrl` bevat, stuurt Kazzle HTTP POST-verzoeken ernaar wanneer de app wordt geïnstalleerd of verwijderd.

`app.installed` bevat de install key die de backend van de uitgever kan gebruiken om zich te authenticeren bij de per-install API:

```json theme={"theme":"material-theme-darker"}
{
  "event": "app.installed",
  "installId": "...",
  "appId": "...",
  "spaceId": "...",
  "apiUrl": "https://api.kazzle.app",
  "installKey": "kzl_inst_...",
  "user": { "id": "...", "email": "..." }
}
```

`app.uninstalled` bevat de event, install ID, app ID, space ID en API URL. De uitgever moet de install key niet meer gebruiken na ontvangst van deze event.

## Per-install API

Elke installatie kan een scoped API aanroepen op `https://api.kazzle.app`. Aanroepen worden geverifieerd met ofwel de install key (van de backend van de uitgever) ofwel het user identity token (van de gehoste UI). Alle bewerkingen zijn automatisch beperkt tot die installatie.

Beschikbare endpoints:

Volledige request- en response-schema's zijn gepubliceerd in de Kazzle OpenAPI-specificatie op `https://api.kazzle.app/openapi.json` onder deze paden.

| Methode | Pad                   | Beschrijving                                           |
| ------- | --------------------- | ------------------------------------------------------ |
| GET     | `/apps/secrets`       | Lijst met geheime namen opgeslagen voor de installatie |
| GET     | `/apps/secrets/:name` | Lees een geheime waarde                                |
| PUT     | `/apps/secrets/:name` | Sla een geheime waarde op                              |
| DELETE  | `/apps/secrets/:name` | Verwijder een geheim                                   |
| GET     | `/apps/metadata`      | Lees niet-geheime metadata voor de installatie         |
| PUT     | `/apps/metadata`      | Voeg updates samen in de metadata van de installatie   |

Geheimen die via deze API worden geschreven, zijn versleuteld in rust en geïsoleerd voor de specifieke installatie. Ze zijn gescheiden van geheimen die zijn opgeslagen in de vault van een space.

## Volgende stappen

* [Publiceer je app](/apps/build-and-publish) — hoe je een app publiceert en wat er daarna gebeurt.
