---
title: Strapi
description: >-
  Leia um content type do Strapi pela REST API com a fonte strapi(), convertendo corpos Blocks em Markdown tanto no Strapi 4 quanto no Strapi 5.
---

O adaptador integrado `strapi()` lê um content type pela REST API do Strapi (`/api/<pluralApiId>`) e converte o corpo Blocks de cada entrada em Markdown: parágrafos, títulos, listas, citações, blocos de código, imagens e links. Um campo de rich text em Markdown é mantido como foi escrito. A única exceção são os links que não apontam para um endereço web, de e-mail, de telefone ou relativo, que ficam só com o texto. As respostas do Strapi 5 são lidas como vêm, e o envelope `attributes` do Strapi 4 é achatado para que os mesmos caminhos de campo funcionem. Não precisa instalar nada.

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

export default defineConfig({
  content: {
    sources: [
      filesystem({ root: "docs" }),
      strapi({
        prefix: "guides",
        url: "https://cms.example.com",
        contentType: "guides",
        // locale: "en"
        // Field paths default to title / description / slug / content / updatedAt
        fields: { body: "body" },
        // Extra query parameters: filters[...], sort
        params: { "filters[section][$eq]": "sdk" },
      }),
    ],
  },
});
```

O token da API vem da variável de ambiente `STRAPI_API_TOKEN` e é enviado como bearer token. As entradas são buscadas com `populate=*` para que as imagens venham com suas URLs (defina `populate` para restringir isso), e um caminho de upload relativo (`/uploads/x.png`) é resolvido a partir de `url`. Só as entradas publicadas são importadas. Com `--preview`, os rascunhos são solicitados (`status=draft` no Strapi 5, `publicationState=preview` no Strapi 4) e cada documento que nunca foi publicado entra com `draft: true`. Já um documento publicado mostra o rascunho mais recente dele no preview.
