---
seo_title: Markdown zu HTML API | Markdown als HTML rendern | EnConvert
meta_desc: Markdown zu HTML rendern via POST /v1/convert/markdown-to-html. Liefert eine komplette gestylte HTML-Seite mit Dark Mode, Tabellen, Codeblöcken und TOC.
keywords: markdown in html umwandeln api, markdown zu html rendern, markdown to html api, md in html konvertieren api, markdown html converter api, markdown rendern api, markdown zu html rest api, md zu html python
---

# Markdown-zu-HTML-API

Die Markdown-zu-HTML-API konvertiert eine Markdown-Datei mit einem einzigen Request an `POST /v1/convert/markdown-to-html` in ein vollständig gestyltes HTML-Dokument. Laden Sie eine `.md`- oder `.markdown`-Datei per Multipart-Formulardaten hoch und erhalten Sie eine komplette, in sich geschlossene HTML-Seite mit eingebettetem CSS, responsivem Layout und integriertem Dark-Mode-Umschalter, bereit zum Öffnen in jedem Browser. Das HTML wird standardmäßig direkt zurückgegeben; setzen Sie `direct_download=false` für JSON-Metadaten mit einer Presigned Download-URL.

---

## Endpunkt

```
POST /v1/convert/markdown-to-html
```

**Content-Type:** `multipart/form-data`

**Akzeptierte Eingabe:** `.md`- oder `.markdown`-Dateien (UTF-8-kodiert)

**Ausgabeformat:** `.html` (`text/html`)

---

## Authentifizierung

Erfordert entweder einen privaten API-Key oder ein per Public Key ausgestelltes JWT-Token.

```
X-API-Key: sk_your_private_key
```

Oder:

```
Authorization: Bearer <jwt_token>
```

---

## Request-Parameter

| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|-----------|------|----------|---------|-------------|
| `file` | file | Ja | -- | Die zu konvertierende `.md`- oder `.markdown`-Datei. Muss UTF-8-kodiert sein. |
| `output_filename` | `string` | Nein | Name der Eingabedatei | Eigener Ausgabedateiname. Die Endung `.html` wird automatisch angehängt. |
| `direct_download` | `boolean` | Nein | `true` | Bei `true` wird das HTML-Dokument direkt zurückgegeben. Bei `false` werden JSON-Metadaten mit einer Presigned Download-URL zurückgegeben. |

---

## Konvertierungsregeln

Der Konverter verwendet Python-Markdown mit folgenden aktivierten Erweiterungen:

| Erweiterung | Funktion |
|-----------|-------------|
| `tables` | Pipe-getrennte Markdown-Tabellen werden als HTML-`<table>`-Elemente gerendert |
| `fenced_code` | Codeblöcke mit dreifachen Backticks und Sprachkennung (` ```python `) |
| `codehilite` | Syntax-Highlighting-CSS-Klassen auf Codeblöcken (via Pygments) |
| `toc` | Generierung eines Inhaltsverzeichnisses über einen `[TOC]`-Marker im Dokument |
| `attr_list` | HTML-Attribute per `{.class #id}`-Syntax an Elemente anhängen |

### Beispiel

**Eingabe:**

~~~markdown
# My Document

[TOC]

## Introduction

This is a **bold** and *italic* example.

## Data Table

| Name  | Age | City   |
|-------|-----|--------|
| Alice | 30  | London |
| Bob   | 25  | Paris  |

## Code Sample

```python
def hello():
    print("Hello, world!")
```
~~~

**Ausgabe:** Ein vollständiges `<!DOCTYPE html>`-Dokument mit:

- Dem gerenderten Markdown in einem `<body>` mit 800px max-width und zentriertem Layout
- Gestylten Tabellen, Codeblöcken, Links und Überschriften
- Einem klickbaren, aus den Überschriften generierten Inhaltsverzeichnis
- Einem Dark-Mode-Umschalter (oben rechts), der die Nutzereinstellung in `localStorage` speichert

### Styling der Ausgabe

Das generierte HTML enthält einen eingebetteten `<style>`-Block mit:

- **Hellem und dunklem Theme** über CSS Custom Properties, umgeschaltet per `data-theme`-Attribut
- **System-Font-Stack** (`-apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif`)
- **Responsivem Layout** mit 800px max-width und zentriertem Inhalt
- **Zeilenhöhe** von 1.6 für gute Lesbarkeit
- **Gestylten Elementen**: Codeblöcke (mit Hintergrund), Tabellen (mit Rahmen und gestreiften Zeilen), Links und Blockzitate

<div class="alert alert-info">
<strong>Hinweis zum Syntax-Highlighting:</strong> Die <code>codehilite</code>-Erweiterung fügt Codeblöcken Pygments-CSS-Klassennamen hinzu, in der Ausgabe ist jedoch kein Pygments-Stylesheet gebündelt. Codeblöcke haben die korrekte Struktur und ein Basis-Styling, aber für sprachspezifische Farbhervorhebung müssen Sie der Seite ein <a href="https://pygments.org/styles/" target="_blank">Pygments-CSS-Theme</a> hinzufügen. Das eingebaute Styling liefert unabhängig davon Hintergrund- und Schrift-Styling für alle Codeblöcke.
</div>

---

## Response

### Direkter Download (`direct_download=true`, Standard)

```
HTTP 200 OK
Content-Type: text/html
Content-Disposition: inline; filename="readme_20260405_123456789.html"
```

Gibt das vollständige HTML-Dokument zurück. Da die `Content-Disposition` `inline` ist, rendern Browser die Seite direkt.

### Metadaten-Response (`direct_download=false`)

```json
{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/markdown-to-html/readme_20260405_123456789.html",
    "filename": "readme_20260405_123456789.html",
    "file_size": 5678,
    "conversion_time_seconds": 0.04
}
```

---

## Codebeispiele

### Python

```python
import requests

with open("README.md", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/markdown-to-html",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("README.md", f, "text/markdown")}
    )

with open("README.html", "wb") as out:
    out.write(response.content)
```

### Node.js

```javascript
const form = new FormData();
form.append("file", fs.createReadStream("README.md"));

const response = await fetch("https://api.enconvert.com/v1/convert/markdown-to-html", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

const html = await response.text();
fs.writeFileSync("README.html", html);
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/markdown-to-html");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("README.md", "text/markdown")]
]);
$html = curl_exec($ch);
curl_close($ch);
file_put_contents("README.html", $html);
```

### Go

```go
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "README.md")
file, _ := os.Open("README.md")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/markdown-to-html", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)
```

### JavaScript -- Browser (öffentlicher Schlüssel)

```javascript
const tokenRes = await fetch("https://api.enconvert.com/v1/auth/token", {
    method: "POST",
    headers: { "X-API-Key": "pk_your_public_key" }
});
const { token } = await tokenRes.json();

const form = new FormData();
form.append("file", fileInput.files[0]);

const response = await fetch("https://api.enconvert.com/v1/convert/markdown-to-html", {
    method: "POST",
    headers: { "Authorization": `Bearer ${token}` },
    body: form
});

const data = await response.json();
window.open(data.presigned_url, "_blank");
```

---

## Fehlerantworten

| Status | Bedingung |
|--------|-----------|
| `400 Bad Request` | Datei ist keine `.md`- oder `.markdown`-Datei |
| `400 Bad Request` | Ungültige Markdown-Kodierung (UTF-8 erwartet) |
| `400 Bad Request` | Markdown-zu-HTML-Konvertierung fehlgeschlagen |
| `401 Unauthorized` | Fehlender oder ungültiger API-Key / JWT-Token |
| `402 Payment Required` | Monatliches Ops-Kontingent aufgebraucht |
| `402 Payment Required` | Speicherlimit erreicht |
| `413 Payload Too Large` | Datei überschreitet die maximale Dateigröße des Plans |

---

## Limits

| Limit | Wert |
|-------|-------|
| Maximale Dateigröße | Planabhängig (Founding: 5 MB) |
| Eingabekodierung | Nur UTF-8 |
| Akzeptierte Endungen | `.md`, `.markdown` |
| Monatliche Konvertierungen | Planabhängig |

---

## Häufig gestellte Fragen

### Wie rendere ich Markdown per REST API zu HTML?

Senden Sie einen `multipart/form-data`-POST-Request an `POST /v1/convert/markdown-to-html` mit Ihrer `.md`- oder `.markdown`-Datei im Feld `file`, authentifiziert über einen `X-API-Key`-Header oder ein JWT-Token via `Authorization: Bearer`. Die Response ist standardmäßig ein vollständiges HTML-Dokument.

### Unterstützt die Markdown-zu-HTML-API Tabellen, Codeblöcke und ein Inhaltsverzeichnis?

Ja. Der Konverter verwendet Python-Markdown mit den aktivierten Erweiterungen `tables`, `fenced_code`, `codehilite`, `toc` und `attr_list`. Fügen Sie einen `[TOC]`-Marker in Ihr Dokument ein, um ein klickbares Inhaltsverzeichnis aus den Überschriften zu generieren.

### Warum haben meine Codeblöcke keine sprachspezifische Farbhervorhebung?

Die `codehilite`-Erweiterung fügt Codeblöcken Pygments-CSS-Klassennamen hinzu, in der Ausgabe ist jedoch kein Pygments-Stylesheet gebündelt. Fügen Sie der Seite ein Pygments-CSS-Theme für die Farbhervorhebung hinzu; das eingebaute Styling liefert weiterhin Hintergrund- und Schrift-Styling für alle Codeblöcke.

### Kann ich Markdown direkt aus dem Browser in HTML konvertieren?

Ja. Tauschen Sie einen Public Key (`pk_...`) via `POST /v1/auth/token` gegen ein JWT, rufen Sie dann den Endpunkt mit einem `Authorization: Bearer`-Header auf und öffnen Sie die zurückgegebene `presigned_url`.

### Enthält das generierte HTML einen Dark Mode?

Ja. Die Ausgabe enthält ein helles und ein dunkles Theme über CSS Custom Properties, umgeschaltet per `data-theme`-Attribut, mit einem Dark-Mode-Umschalter, der die Nutzereinstellung in `localStorage` speichert.
