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 -- 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
Nota sul syntax highlighting: L'estensione 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.