API Markdown in HTML#
L'API Markdown in HTML converte un file Markdown in un documento HTML completamente stilizzato con una singola richiesta a POST /v1/convert/markdown-to-html. Carica un file .md o .markdown tramite multipart form data e ricevi una pagina HTML completa e autonoma con CSS incorporato, layout responsive e un toggle integrato per la dark mode, pronta da aprire in qualsiasi browser. L'HTML viene restituito direttamente per impostazione predefinita, oppure imposta direct_download=false per metadati JSON con un URL di download prefirmato.
Endpoint#
POST /v1/convert/markdown-to-html
Content-Type: multipart/form-data
Input accettato: file .md o .markdown (codificati in UTF-8)
Formato di output: .html (text/html)
Autenticazione#
Richiede una chiave API privata oppure un token JWT ottenuto da una chiave pubblica.
X-API-Key: sk_your_private_key
Oppure:
Authorization: Bearer <jwt_token>
Parametri della richiesta#
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
file |
file | Sì | -- | Il file .md o .markdown da convertire. Deve essere codificato in UTF-8. |
output_filename |
string |
No | Nome file di input | Nome file di output personalizzato. L'estensione .html viene aggiunta automaticamente. |
direct_download |
boolean |
No | true |
Con true, restituisce il documento HTML direttamente. Con false, restituisce metadati JSON con un URL di download prefirmato. |
Regole di conversione#
Il convertitore usa Python-Markdown con le seguenti estensioni abilitate:
| Estensione | Cosa fa |
|---|---|
tables |
Tabelle Markdown delimitate da pipe renderizzate come elementi HTML <table> |
fenced_code |
Blocchi di codice con tripli backtick e identificatori di linguaggio (```python) |
codehilite |
Classi CSS di syntax highlighting sui blocchi di codice (tramite Pygments) |
toc |
Generazione dell'indice tramite un marcatore [TOC] nel documento |
attr_list |
Aggiunge attributi HTML agli elementi con la sintassi {.class #id} |
Esempio#
Input:
# 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!")
```
Output: un documento <!DOCTYPE html> completo con:
- Il Markdown renderizzato dentro un
<body>con max-width di 800px e layout centrato - Tabelle, blocchi di codice, link e intestazioni con stili
- Un indice cliccabile generato dalle intestazioni
- Un pulsante di attivazione della dark mode (angolo in alto a destra) che salva la preferenza dell'utente in
localStorage
Stili dell'output#
L'HTML generato include un blocco <style> incorporato con:
- Temi chiaro e scuro tramite custom properties CSS, attivati da un attributo
data-theme - Font stack di sistema (
-apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif) - Layout responsive con max-width di 800px e contenuto centrato
- Interlinea di 1.6 per la leggibilità
- Elementi con stili: blocchi di codice (con sfondo), tabelle (con bordi e righe alternate), link e citazioni
codehilite aggiunge i nomi delle classi CSS di Pygments ai blocchi di codice, ma nessun foglio di stile Pygments è incluso nell'output. I blocchi di codice avranno struttura corretta e stili di base, ma l'evidenziazione a colori specifica per linguaggio richiede l'aggiunta di un tema CSS Pygments alla pagina. Gli stili integrati forniscono comunque sfondo e font per tutti i blocchi di codice.
Risposta#
Download diretto (direct_download=true, predefinito)#
HTTP 200 OK
Content-Type: text/html
Content-Disposition: inline; filename="readme_20260405_123456789.html"
Restituisce il documento HTML completo. Poiché il Content-Disposition è inline, i browser renderizzano la pagina direttamente.
Risposta con metadati (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
}
Esempi di codice#
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 -- Browser (chiave pubblica)#
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");
Risposte di errore#
| Stato | Condizione |
|---|---|
400 Bad Request |
Il file non è un file .md o .markdown |
400 Bad Request |
Codifica Markdown non valida (attesa UTF-8) |
400 Bad Request |
Conversione da Markdown a HTML non riuscita |
401 Unauthorized |
Chiave API / token JWT mancante o non valido |
402 Payment Required |
Quota mensile di ops esaurita |
402 Payment Required |
Limite di archiviazione raggiunto |
413 Payload Too Large |
Il file supera la dimensione massima prevista dal piano |
Limiti#
| Limite | Valore |
|---|---|
| Dimensione massima del file | Dipende dal piano (Founding: 5 MB) |
| Codifica di input | Solo UTF-8 |
| Estensioni accettate | .md, .markdown |
| Conversioni mensili | Dipende dal piano |
Domande frequenti#
Come convertire Markdown in HTML con un'API REST?#
Invia una richiesta POST multipart/form-data a POST /v1/convert/markdown-to-html con il file .md o .markdown nel campo file, autenticandoti con un header X-API-Key o un token JWT Authorization: Bearer. La risposta è un documento HTML completo per impostazione predefinita.
L'API Markdown in HTML supporta tabelle, blocchi di codice e un indice?#
Sì. Il convertitore usa Python-Markdown con le estensioni tables, fenced_code, codehilite, toc e attr_list abilitate. Aggiungi un marcatore [TOC] nel documento per generare un indice cliccabile dalle intestazioni.
Perché i miei blocchi di codice non hanno i colori del syntax highlighting per linguaggio?#
L'estensione codehilite aggiunge i nomi delle classi CSS di Pygments ai blocchi di codice, ma nessun foglio di stile Pygments è incluso nell'output. Aggiungi un tema CSS Pygments alla pagina per l'evidenziazione a colori; gli stili integrati forniscono comunque sfondo e font per tutti i blocchi di codice.
Posso convertire Markdown in HTML direttamente dal browser?#
Sì. Scambia una chiave pubblica (pk_...) con un JWT tramite POST /v1/auth/token, poi chiama l'endpoint con un header Authorization: Bearer e apri il presigned_url restituito.
L'HTML generato include la dark mode?#
Sì. L'output include temi chiaro e scuro tramite custom properties CSS, attivati da un attributo data-theme, con un pulsante di attivazione della dark mode che salva la preferenza dell'utente in localStorage.