---
seo_title: API Markdown vers HTML | Rendu Markdown en HTML | EnConvert
meta_desc: Rendez du Markdown en HTML via POST /v1/convert/markdown-to-html. Page HTML complète et stylée avec mode sombre, tableaux, blocs de code et table des matières.
keywords: api markdown vers html, convertir markdown en html, rendu markdown en html api, convertisseur markdown html api, markdown vers html api rest, md en html api, markdown en html python requests, api rendu markdown
---

# API Markdown vers HTML

L'API Markdown vers HTML convertit un fichier Markdown en un document HTML entièrement stylé en une seule requête vers `POST /v1/convert/markdown-to-html`. Envoyez un fichier `.md` ou `.markdown` en multipart form data et recevez une page HTML complète et autonome, avec CSS embarqué, mise en page responsive et bascule de mode sombre intégrée, prête à ouvrir dans n'importe quel navigateur. Le HTML est renvoyé directement par défaut, ou définissez `direct_download=false` pour des métadonnées JSON avec une URL de téléchargement présignée.

---

## Endpoint

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

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

**Entrée acceptée :** fichiers `.md` ou `.markdown` (encodés en UTF-8)

**Format de sortie :** `.html` (`text/html`)

---

## Authentification

Nécessite une clé API privée ou un token JWT obtenu à partir d'une clé publique.

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

Ou :

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

---

## Paramètres de requête

| Paramètre | Type | Obligatoire | Défaut | Description |
|-----------|------|----------|---------|-------------|
| `file` | file | Oui | -- | Le fichier `.md` ou `.markdown` à convertir. Doit être encodé en UTF-8. |
| `output_filename` | `string` | Non | Nom du fichier d'entrée | Nom de fichier de sortie personnalisé. L'extension `.html` est ajoutée automatiquement. |
| `direct_download` | `boolean` | Non | `true` | À `true`, renvoie le document HTML directement. À `false`, renvoie des métadonnées JSON avec une URL de téléchargement présignée. |

---

## Règles de conversion

Le convertisseur utilise Python-Markdown avec les extensions suivantes activées :

| Extension | Rôle |
|-----------|-------------|
| `tables` | Les tableaux Markdown délimités par des barres verticales sont rendus en éléments HTML `<table>` |
| `fenced_code` | Blocs de code à triple backtick avec identifiants de langage (` ```python `) |
| `codehilite` | Classes CSS de coloration syntaxique sur les blocs de code (via Pygments) |
| `toc` | Génération d'une table des matières via un marqueur `[TOC]` dans votre document |
| `attr_list` | Ajout d'attributs HTML aux éléments avec la syntaxe `{.class #id}` |

### Exemple

**Entrée :**

~~~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!")
```
~~~

**Sortie :** un document `<!DOCTYPE html>` complet avec :

- Le Markdown rendu dans un `<body>` avec largeur max de 800px et mise en page centrée
- Tableaux, blocs de code, liens et titres stylés
- Une table des matières cliquable générée à partir des titres
- Un bouton de bascule de mode sombre (coin supérieur droit) qui conserve la préférence de l'utilisateur dans `localStorage`

### Style de sortie

Le HTML généré inclut un bloc `<style>` embarqué avec :

- **Thèmes clair et sombre** via des propriétés CSS personnalisées, basculés par un attribut `data-theme`
- **Pile de polices système** (`-apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif`)
- **Mise en page responsive** avec largeur max de 800px et contenu centré
- **Hauteur de ligne** de 1.6 pour la lisibilité
- **Éléments stylés** : blocs de code (avec arrière-plan), tableaux (avec bordures et lignes alternées), liens et citations

<div class="alert alert-info">
<strong>Note sur la coloration syntaxique :</strong> L'extension <code>codehilite</code> ajoute les noms de classes CSS Pygments aux blocs de code, mais aucune feuille de style Pygments n'est embarquée dans la sortie. Les blocs de code auront une structure correcte et un style de base, mais la coloration spécifique au langage nécessite d'ajouter un <a href="https://pygments.org/styles/" target="_blank">thème CSS Pygments</a> à la page. Le style intégré fournit dans tous les cas un arrière-plan et une police pour tous les blocs de code.
</div>

---

## Réponse

### Téléchargement direct (`direct_download=true`, par défaut)

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

Renvoie le document HTML complet. Comme le `Content-Disposition` est `inline`, les navigateurs affichent la page directement.

### Réponse avec métadonnées (`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
}
```

---

## Exemples de code

### 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 -- Navigateur (clé publique)

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

---

## Réponses d'erreur

| Statut | Condition |
|--------|-----------|
| `400 Bad Request` | Le fichier n'est pas un fichier `.md` ou `.markdown` |
| `400 Bad Request` | Encodage Markdown invalide (UTF-8 attendu) |
| `400 Bad Request` | La conversion Markdown vers HTML a échoué |
| `401 Unauthorized` | Clé API ou token JWT manquant ou invalide |
| `402 Payment Required` | Quota mensuel d'ops épuisé |
| `402 Payment Required` | Limite de stockage atteinte |
| `413 Payload Too Large` | Le fichier dépasse la taille maximale du plan |

---

## Limites

| Limite | Valeur |
|-------|-------|
| Taille max. de fichier | Selon le plan (Founding : 5 MB) |
| Encodage d'entrée | UTF-8 uniquement |
| Extensions acceptées | `.md`, `.markdown` |
| Conversions mensuelles | Selon le plan |

---

## Questions fréquentes

### Comment rendre du Markdown en HTML avec une API REST ?

Envoyez une requête POST `multipart/form-data` vers `POST /v1/convert/markdown-to-html` avec votre fichier `.md` ou `.markdown` dans le champ `file`, en vous authentifiant via un en-tête `X-API-Key` ou un token JWT `Authorization: Bearer`. Par défaut, la réponse est un document HTML complet.

### L'API Markdown vers HTML prend-elle en charge les tableaux, les blocs de code et la table des matières ?

Oui. Le convertisseur utilise Python-Markdown avec les extensions `tables`, `fenced_code`, `codehilite`, `toc` et `attr_list` activées. Ajoutez un marqueur `[TOC]` dans votre document pour générer une table des matières cliquable à partir des titres.

### Pourquoi mes blocs de code n'ont-ils pas de coloration syntaxique spécifique au langage ?

L'extension `codehilite` ajoute les noms de classes CSS Pygments aux blocs de code, mais aucune feuille de style Pygments n'est embarquée dans la sortie. Ajoutez un thème CSS Pygments à la page pour obtenir la coloration ; le style intégré fournit malgré tout un arrière-plan et une police pour tous les blocs de code.

### Puis-je convertir du Markdown en HTML directement depuis le navigateur ?

Oui. Échangez une clé publique (`pk_...`) contre un JWT via `POST /v1/auth/token`, puis appelez l'endpoint avec un en-tête `Authorization: Bearer` et ouvrez la `presigned_url` renvoyée.

### Le HTML généré inclut-il un mode sombre ?

Oui. La sortie inclut des thèmes clair et sombre via des propriétés CSS personnalisées, basculés par un attribut `data-theme`, avec un bouton de bascule qui conserve la préférence de l'utilisateur dans `localStorage`.
