---
seo_title: API CSV vers JSON | Convertir CSV en JSON | EnConvert
meta_desc: Convertissez du CSV en JSON via POST /v1/convert/csv-to-json. La première ligne fournit les clés, chaque ligne devient un objet JSON, sans inférence de type.
keywords: api csv vers json, convertir csv en json api, csv to json api rest, fichier csv en tableau json api, parser csv en json api, lignes csv en objets json, upload csv convertir json
---

# API CSV vers JSON

Convertissez un fichier CSV en tableau JSON avec une seule requête vers `POST /v1/convert/csv-to-json`. La première ligne sert d'en-têtes de colonnes et chaque ligne suivante devient un objet JSON dans le tableau de sortie, toutes les valeurs restant des chaînes (aucune inférence de type). Les réponses renvoient les octets JSON bruts par défaut, ou des métadonnées avec une URL de téléchargement présignée lorsque `direct_download=false`.

---

## Endpoint

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

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

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

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

---

## Authentification

Nécessite soit une clé API privée, soit un jeton JWT issu d'une clé publique.

```
X-API-Key: sk_your_private_key
```

Ou :

```
Authorization: Bearer <jwt_token>
```

---

## Paramètres de la requête

| Paramètre | Type | Requis | Par 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 `.json` est ajoutée automatiquement. |
| `direct_download` | `boolean` | Non | `true` | Lorsque `true`, renvoie les octets JSON bruts. Lorsque `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 :

```json
[
  {"name": "Alice", "age": "30", "city": "London"},
  {"name": "Bob", "age": "25", "city": "Paris"}
]
```

- La première ligne est traitée comme les en-têtes de colonnes
- Le délimiteur est la virgule (non configurable)
- **Toutes les valeurs restent des chaînes** dans la sortie JSON -- aucune inférence de type n'est effectuée. Le nombre `30` en CSV devient `"30"` en JSON, pas `30`.
- La sortie est du JSON formaté avec une indentation de 2 espaces

---

## Réponse

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

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

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

```json
{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/csv-to-json/data_20260405_123456789.json",
    "filename": "data_20260405_123456789.json",
    "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-json",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("data.csv", f, "text/csv")}
    )

with open("data.json", "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-json", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

const json = await response.json();
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/csv-to-json");
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")]
]);
$json = 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-json", 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 / jeton JWT manquant ou invalide |
| `402 Payment Required` | Quota mensuel d'ops épuisé |
| `413 Payload Too Large` | Le fichier dépasse la taille maximale du forfait |

---

## Limites

| Limite | Valeur |
|--------|--------|
| Taille de fichier max | Dépend du forfait (Founding : 5 MB) |
| Encodage d'entrée | UTF-8 uniquement |
| Inférence de type | Aucune (toutes les valeurs sont des chaînes) |
| Conversions mensuelles | Dépend du forfait |

## Questions fréquentes

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

Envoyez une requête POST `multipart/form-data` à `/v1/convert/csv-to-json` avec votre fichier `.csv` dans le champ `file`, authentifiée avec un en-tête `X-API-Key` ou un jeton JWT `Authorization: Bearer`. La première ligne doit contenir les en-têtes de colonnes.

### Pourquoi les nombres de mon CSV sont-ils renvoyés comme des chaînes dans le JSON ?

Aucune inférence de type n'est effectuée. Toutes les valeurs restent des chaînes dans la sortie JSON. Le nombre `30` en CSV devient `"30"` en JSON, pas `30`.

### Puis-je utiliser un délimiteur autre que la virgule ?

Non. Le délimiteur est toujours la virgule et n'est pas configurable.

### Puis-je obtenir une URL de téléchargement présignée au lieu des octets JSON bruts ?

Oui. Définissez `direct_download=false` pour recevoir des métadonnées avec `presigned_url`, `object_key`, `filename`, `file_size` et `conversion_time_seconds`.

### Pourquoi l'API CSV vers JSON renvoie-t-elle 400 Bad Request ?

Un `400` est renvoyé lorsque le fichier n'est pas un fichier `.csv`, que le CSV est vide ou ne contient aucune ligne valide, ou que l'encodage n'est pas UTF-8. Les fichiers trop volumineux renvoient `413 Payload Too Large`.
