---
title: Contentful
description: >-
  Leia um tipo de conteúdo do Contentful pela Delivery API com a fonte contentful(), convertendo corpos de rich text em Markdown sem precisar instalar nada.
---

O adaptador embutido `contentful()` lê as entradas de um tipo de conteúdo pela Content Delivery API e converte o corpo em rich text de cada entrada em Markdown. Títulos, marcações, links, listas, citações, tabelas e assets incorporados viram seus equivalentes em Markdown. Um corpo guardado em um campo de texto longo em Markdown passa do jeito que foi escrito, com uma exceção: um link que não é um endereço web, de e-mail, de telefone ou relativo (uma URL `javascript:`, por exemplo) mantém só o rótulo, como acontece no rich text. Não precisa instalar nada, porque o adaptador fala diretamente com a API REST.

```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" },
      }),
    ],
  },
});
```

O token da Delivery API vem da variável de ambiente `CONTENTFUL_ACCESS_TOKEN`, que o adaptador declara. Com `--preview`, o adaptador lê os rascunhos pela Preview API usando `CONTENTFUL_PREVIEW_TOKEN`. A Preview API recusa tokens de delivery, então usar `--preview` sem um token de preview falha com um erro claro, em vez de recorrer ao `CONTENTFUL_ACCESS_TOKEN`. Os assets são referenciados a partir da CDN do Contentful em vez de baixados, já que as URLs deles são estáveis. Uma entrada incorporada é mapeada para um componente do Blume pela opção `serializers` do engine, indexada pelo id do tipo de conteúdo, quando você cria o `contentfulSource` diretamente e passa ele para [`custom()`](/pt/docs/content/sources/custom). Definir `serializers` faz a fonte gravar suas páginas como MDX para que os componentes retornados sejam renderizados, e uma entrada incorporada sem serializer é indicada em um comentário. Um link para outra entrada é renderizado como texto simples, porque não existe uma rota para onde ele possa apontar.
