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 :
# 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
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. 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 thème CSS Pygments à la page. Le style intégré fournit dans tous les cas un arrière-plan et une police pour tous les blocs de code.
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)#
{
"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#
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#
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#
$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#
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)#
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.