---
seo_title: API CSV vers XML | Convertir des fichiers CSV en XML | EnConvert
meta_desc: Convertissez du CSV en XML via POST /v1/convert/csv-to-xml. Les en-têtes deviennent des balises, chaque ligne un élément item. Réponse directe ou URL présignée.
keywords: api csv vers xml, convertir csv en xml, convertisseur csv xml api, csv vers xml api rest, convertir fichier csv en xml api, csv en xml python requests, csv en xml curl, transformer lignes csv en xml api
---

# API CSV vers XML

L'API CSV vers XML convertit un fichier CSV au format XML en une seule requête vers `POST /v1/convert/csv-to-xml`. Envoyez un fichier `.csv` UTF-8 en multipart form data. Les en-têtes de colonnes de la première ligne deviennent les noms de balises XML, et chaque ligne suivante devient un élément `<item>` à l'intérieur d'un conteneur `<root>`. La réponse est du XML brut par défaut, ou définissez `direct_download=false` pour des métadonnées avec une URL de téléchargement présignée.

---

## Endpoint

```
POST /v1/convert/csv-to-xml
```

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

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

**Format de sortie :** `.xml` (`application/xml`)

---

## 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 `.csv` à convertir. La première ligne doit contenir les en-têtes de colonnes. Encodé en UTF-8. |
| `output_filename` | `string` | Non | Nom du fichier d'entrée | Nom de fichier de sortie personnalisé. L'extension `.xml` est ajoutée automatiquement. |
| `direct_download` | `boolean` | Non | `true` | À `true`, renvoie les octets XML bruts. À `false`, renvoie des métadonnées avec une URL de téléchargement présignée. |

---

## Règles de conversion

```csv
name,age,city
Alice,30,London
Bob,25,Paris
```

Devient :

```xml
<?xml version="1.0" encoding="utf-8"?>
<root>
  <item>
    <name>Alice</name>
    <age>30</age>
    <city>London</city>
  </item>
  <item>
    <name>Bob</name>
    <age>25</age>
    <city>Paris</city>
  </item>
</root>
```

- La première ligne est traitée comme les en-têtes de colonnes (utilisés comme noms de balises XML)
- Chaque ligne suivante devient un élément `<item>`
- L'élément racine est toujours `<root>` (non configurable)
- La sortie est mise en forme avec une indentation de 2 espaces
- Le délimiteur est la virgule (non configurable)

---

## Réponse

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

```
HTTP 200 OK
Content-Type: application/xml
Content-Disposition: inline; filename="data_20260405_123456789.xml"
```

### Réponse avec métadonnées (`direct_download=false`)

```json
{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/csv-to-xml/data_20260405_123456789.xml",
    "filename": "data_20260405_123456789.xml",
    "file_size": 1234,
    "conversion_time_seconds": 0.03
}
```

---

## Exemples de code

### Python

```python
import requests

with open("data.csv", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/csv-to-xml",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("data.csv", f, "text/csv")}
    )

with open("data.xml", "wb") as out:
    out.write(response.content)
```

### Node.js

```javascript
const form = new FormData();
form.append("file", fs.createReadStream("data.csv"));

const response = await fetch("https://api.enconvert.com/v1/convert/csv-to-xml", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

const xml = await response.text();
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/csv-to-xml");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("data.csv", "text/csv")]
]);
$xml = curl_exec($ch);
curl_close($ch);
```

### Go

```go
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "data.csv")
file, _ := os.Open("data.csv")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/csv-to-xml", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)
```

---

## Réponses d'erreur

| Statut | Condition |
|--------|-----------|
| `400 Bad Request` | Le fichier n'est pas un fichier `.csv` |
| `400 Bad Request` | Le fichier CSV est vide ou ne contient aucune ligne valide |
| `400 Bad Request` | Encodage CSV invalide (UTF-8 attendu) |
| `401 Unauthorized` | Clé API ou token JWT manquant ou invalide |
| `402 Payment Required` | Quota mensuel d'ops épuisé |
| `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 |
| Conversions mensuelles | Selon le plan |

---

## Questions fréquentes

### Comment convertir du CSV en XML avec une API REST ?

Envoyez une requête POST `multipart/form-data` vers `POST /v1/convert/csv-to-xml` avec votre fichier `.csv` dans le champ `file`, en vous authentifiant via un en-tête `X-API-Key` ou un token JWT `Authorization: Bearer`. Par défaut, le corps de la réponse contient les octets XML bruts.

### Comment l'API fait-elle correspondre colonnes et lignes CSV aux éléments XML ?

La première ligne CSV est traitée comme les en-têtes de colonnes et sert de noms de balises XML. Chaque ligne suivante devient un élément `<item>` à l'intérieur d'un conteneur `<root>`, avec une mise en forme indentée de 2 espaces.

### Puis-je changer le nom de l'élément racine XML ou le délimiteur CSV ?

Non. L'élément racine est toujours `<root>` et le délimiteur est la virgule. Ni l'un ni l'autre n'est configurable.

### Pourquoi ma conversion CSV vers XML renvoie-t-elle une erreur 400 ?

Un `400 Bad Request` est renvoyé lorsque le fichier envoyé n'est pas un `.csv`, que le CSV est vide ou sans ligne valide, ou que l'encodage n'est pas UTF-8.

### Puis-je obtenir une URL de téléchargement présignée au lieu du XML brut ?

Oui. Définissez `direct_download=false` et l'API renvoie des métadonnées JSON incluant `presigned_url`, `object_key`, `filename`, `file_size` et `conversion_time_seconds`.
