---
title: Contentful
description: >-
  Lies einen Contentful-Content-Type mit der Quelle contentful() über die Delivery API und wandle Rich-Text-Inhalte in Markdown um – ganz ohne Installation.
---

Der eingebaute Adapter `contentful()` liest die Einträge eines Content Types über die Content Delivery API und wandelt den Rich-Text-Inhalt jedes Eintrags in Markdown um. Überschriften, Formatierungen, Links, Listen, Zitate, Tabellen und eingebettete Assets werden zu ihren Markdown-Entsprechungen. Steht der Inhalt in einem Markdown-Langtextfeld, wird er unverändert übernommen. Es gibt eine Ausnahme: Ist ein Link weder eine Web-, Mail- oder Telefonadresse noch eine relative Adresse (etwa eine `javascript:`-URL), bleibt nur sein Linktext erhalten, genau wie im Rich Text. Du musst nichts installieren, denn der Adapter spricht direkt mit der REST API.

```ts blume.config.ts
import { defineConfig } from "blume";
import { contentful, filesystem } from "blume/sources";

export default defineConfig({
  content: {
    sources: [
      filesystem({ root: "docs" }),
      contentful({
        prefix: "guides",
        space: "abc123",
        contentType: "guide",
        // environment: "master", locale: "en-US"
        // Field ids default to title / description / slug / body, and the
        // date to sys.updatedAt
        fields: { body: "content" },
        // Extra Delivery API query parameters
        params: { "fields.section": "sdk" },
      }),
    ],
  },
});
```

Das Delivery-API-Token kommt aus der Umgebungsvariable `CONTENTFUL_ACCESS_TOKEN`, die der Adapter deklariert. Mit `--preview` liest der Adapter Entwürfe über die Preview API und verwendet dabei `CONTENTFUL_PREVIEW_TOKEN`. Die Preview API akzeptiert keine Delivery-Tokens. Fehlt das Preview-Token, bricht `--preview` deshalb mit einer klaren Fehlermeldung ab und greift nicht auf `CONTENTFUL_ACCESS_TOKEN` zurück. Assets werden nicht heruntergeladen, sondern direkt vom CDN von Contentful eingebunden, da ihre URLs stabil sind. Du kannst einen eingebetteten Eintrag einer Blume-Komponente zuordnen, indem du `contentfulSource` direkt erstellst und an [`custom()`](/de/docs/content/sources/custom) übergibst. Die Zuordnung legst du über die Engine-Option `serializers` fest, jeweils anhand der Content-Type-ID. Wenn du `serializers` setzt, werden die Seiten der Quelle als MDX geschrieben, damit die zurückgegebenen Komponenten gerendert werden. Gibt es für einen eingebetteten Eintrag keinen Serializer, wird er in einem Kommentar vermerkt. Ein Link auf einen anderen Eintrag erscheint als reiner Text, weil es keine Route gibt, auf die er zeigen könnte.
