---
seo_title: API Markdown in HTML | Converti Markdown in HTML | EnConvert
meta_desc: Converti Markdown in HTML con POST /v1/convert/markdown-to-html. Ottieni una pagina HTML completa con stili, dark mode, tabelle, blocchi di codice e TOC.
keywords: markdown in html api, convertire markdown in html, api rendering markdown, markdown to html rest api, md in html api, markdown in html python, api conversione markdown html, generare html da markdown api
---

# 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:**

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

**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

<div class="alert alert-info">
<strong>Nota sul syntax highlighting:</strong> L'estensione <code>codehilite</code> 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 <a href="https://pygments.org/styles/" target="_blank">tema CSS Pygments</a> alla pagina. Gli stili integrati forniscono comunque sfondo e font per tutti i blocchi di codice.
</div>

---

## 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`)

```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
}
```

---

## Esempi di codice

### 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 (chiave pubblica)

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

---

## 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`.
