> For the complete documentation index, see [llms.txt](https://unsloth.ai/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://unsloth.ai/docs/fr/integrations/connecter-curl-et-http-a-unsloth.md).

# Connecter Curl et HTTP à Unsloth

Unsloth expose trois formats de fil compatibles OpenAI/Anthropic à la même URL de base sur le port sur lequel Unsloth a démarré. Tous prennent un `Authorization: Bearer sk-unsloth-…` en-tête et renvoient soit du JSON soit du SSE, selon que vous définissez `stream`. \
\
Cette page regroupe les recettes par point de terminaison (`/v1/chat/completions`, `/v1/messages`, `/v1/responses`, `/v1/models`) et se termine par une section commune sur les **outils côté serveur**, qui fonctionnent sur tous les points de terminaison de chat.

{% hint style="info" %}
Si vous ne savez pas quelle URL / clé / nom de modèle utiliser, lisez d'abord la vue d'ensemble de l'API. Elle vous guide pour démarrer Unsloth, charger un modèle et créer une `sk-unsloth-…` clé.
{% endhint %}

### 🔑 Authentification

Chaque requête a besoin d'un `Authorization` en-tête :

```
Authorization: Bearer sk-unsloth-xxxxxxxxxxxx
```

Pour éviter que les clés apparaissent dans l'historique de votre shell, exportez la clé une fois et référencez la variable d'environnement :

```bash
export UNSLOTH_STUDIO_AUTH_TOKEN=sk-unsloth-xxxxxxxxxxxx
```

Les extraits ci-dessous intègrent la clé en ligne sous la forme `sk-unsloth-xxxxxxxxxxxx` pour plus de clarté. En pratique, remplacez `$UNSLOTH_STUDIO_AUTH_TOKEN`.

### 📋 Lister les modèles chargés

```bash
curl http://localhost:8888/v1/models \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx"
```

Réponse:

```json
{
  "object": "list",
  "data": [
    {"id": "unsloth/gemma-3-27b-it-GGUF", "object": "model", "owned_by": "local"}
  ]
}
```

<figure><img src="/files/99593ff487c25173e10b1f17b8d5c38822629a4a" alt=""><figcaption></figcaption></figure>

Utilisez le `id` champ chaque fois qu'une requête a besoin d'une `"model"` valeur (ou lorsqu'un client comme opencode demande un **ID du modèle**).

### 💬 Complétions de chat (`/v1/chat/completions`)

Le dialecte OpenAI Chat Completions. La surface de compatibilité la plus large. Fonctionne avec le SDK OpenAI, opencode, Cursor, Continue, Cline, Open WebUI, SillyTavern et la plupart des outils compatibles OpenAI.

#### Requête de base

```bash
curl http://localhost:8888/v1/chat/completions \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "default",
    "messages": [{"role": "user", "content": "Bonjour"}]
  }'
```

<figure><img src="/files/bdfb4341c568fbc90b9f6543a36aa10dfdfd63d1" alt=""><figcaption></figcaption></figure>

#### Flux en streaming

Ajoutez `"stream": true` et la réponse passe aux événements envoyés par le serveur (`text/event-stream`). Indiquez à `curl` de vider la sortie au fur et à mesure que les octets arrivent avec `--no-buffer` (`-N`):

```bash
curl -N http://localhost:8888/v1/chat/completions \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-local",
    "messages": [{"role": "user", "content": "Écris un haïku sur des LLM exécutés localement."}],
    "stream": true
  }'
```

Chaque ligne de la réponse ressemble à `data: {"choices":[{"delta":{"content":"..."}}]}`, et se terminant par `data: [DONE]`.

<figure><img src="/files/5d6b5b35646da17c1dd9a456b4eaed03cda1096a" alt=""><figcaption></figcaption></figure>

#### Images (vision)

Joignez une image en tant que `image_url` partie de contenu dans le message utilisateur. L'URL peut être HTTPS ou une URI base64 `data:` URI :

```bash
# Intégrer un fichier local en base64 (tronqué pour plus de concision)
IMG=$(base64 -w 0 test.jpg)

cat > /tmp/request.json <<EOF
{
  "model":"default",
  "messages":[{"role":"user","content":[
    {"type":"text","text":"Décrivez l'image."},
    {"type":"image_url","image_url":{"url":"data:image/jpeg;base64,$IMG"}}
  ]}],
  "max_tokens":200,
  "stream":false
}
EOF

curl http://localhost:8888/v1/chat/completions \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d @/tmp/request.json
```

{% hint style="info" %}
Le modèle chargé doit être multimodal. Si vous chargez un modèle texte uniquement, la requête réussit structurellement mais le modèle ne traitera pas l'image.
{% endhint %}

<figure><img src="/files/66e4123ade4fd93945b52e6165b919baad8472fe" alt=""><figcaption></figcaption></figure>

#### Appel de fonctions (outils OpenAI)

Passez des `tools` et, éventuellement, `tool_choice`. Votre client exécute chaque appel d'outil et renvoie le résultat au tour suivant.

```bash
curl http://localhost:8888/v1/chat/completions \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model":"default",
    "messages":[{"role":"user","content":"Quel temps fait-il à Paris ?"}],
    "tools":[{
      "type":"function",
      "function":{
        "name":"get_weather",
        "description":"Obtenir la météo actuelle d'une ville.",
        "parameters":{
          "type":"object",
          "properties":{"city":{"type":"string"}},
          "required":["city"]
        }
      }
    }],
    "tool_choice":"required"
  }' | jq '.choices[0].message, .usage'
```

<figure><img src="/files/315a8cf4566f9cf9784d65294de9f90f592de20c" alt=""><figcaption></figcaption></figure>

### 📨 Messages Anthropic (`/v1/messages`)

Le dialecte compatible Anthropic d'Unsloth utilisé par Claude Code, le SDK Anthropic, OpenClaw et tout client qui parle l'API Messages.

#### Requête de base

```bash
curl http://localhost:8888/v1/messages \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "default",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Bonjour"}]
  }'
```

{% hint style="warning" %}
`max_tokens` est requis sur `/v1/messages` (il est facultatif sur `/v1/chat/completions`).
{% endhint %}

<figure><img src="/files/f543bcc6eaf923a4ccd7330449dbf4cbcb561546" alt=""><figcaption></figcaption></figure>

#### Flux en streaming

```bash
curl -N http://localhost:8888/v1/messages \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-local",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Expliquez LoRA en deux phrases."}],
    "stream": true
  }'
```

Les événements suivent la structure SSE d'Anthropic : `message_start`, `content_block_start`, `content_block_delta`, `content_block_stop`, `message_delta`, `message_stop`ainsi que l'événement personnalisé `tool_result` pour la sortie des outils côté serveur.

#### Images (vision)

Le contenu d'image au format Anthropic utilise un `source` bloc avec des données base64 :

```bash
IMG=$(base64 -w 0 test.jpg)

cat > /tmp/request.json <<EOF
{
  "messages":[{"role":"user","content":[
    {"type":"text","text":"Décrivez l'image."},
    {"type":"image","source":{"type":"base64","media_type":"image/jpeg","data":"$IMG"}}
  ]}],
  "max_tokens":200,
  "stream":true
}
EOF

curl -s http://localhost/v1/messages \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d @/tmp/request.json
```

<figure><img src="/files/55cd6c0f25305c6d0bbc4711e96634124cc2bbf4" alt=""><figcaption></figcaption></figure>

#### Appel d'outils (outils Anthropic)

```bash
curl http://localhost:8888/v1/messages \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-local",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Quel temps fait-il à Tokyo ?"}],
    "tools": [
      {
        "name": "get_weather",
        "description": "Obtenir la météo actuelle d'une ville",
        "input_schema": {
          "type": "object",
          "properties": {
            "city": {"type": "string"}
          },
          "required": ["city"]
        }
      }
    ],
    "tool_choice": {"type": "auto"}
  }'
```

`tool_choice` les valeurs correspondent comme suit au dialecte OpenAI : Anthropic `auto` → OpenAI `auto`, Anthropic `any` → OpenAI `required`, Anthropic `{type: "tool", name: "x"}` → OpenAI `{type: "function", function: {name: "x"}}`, Anthropic `none` → OpenAI `none`.

<figure><img src="/files/bfb05cf89022b15922d00c18c7560bc1359b2741" alt=""><figcaption></figcaption></figure>

### 🧬 Réponses (`/v1/responses`)

Unsloth parle aussi de la nouvelle **API OpenAI Responses**, le protocole vers lequel Codex et d'autres clients OpenAI récents ont migré.

```bash
curl http://localhost:8888/v1/responses \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-local",
    "input": "Écrivez une salutation en une phrase."
  }'
```

<figure><img src="/files/ba50785c47f208f73961492eeea23cb9c4a3bfd5" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/42fd481bcfeb3a857d83bfc240be0029b6561323" alt=""><figcaption></figcaption></figure>

Le streaming fonctionne de la même façon que pour Chat Completions. Ajoutez `"stream": true` et canalisez avec `-N`.

### 🧰 Outils côté serveur d'Unsloth (abrégé)

En plus de l'appel de fonctions côté client, Unsloth peut exécuter **Python**, **bash**ainsi que **la recherche web** côté serveur et renvoyer les résultats sous forme d'événements personnalisés `tool_result` Cette fonctionnalité donne à Unsloth l'impression d'être un véritable agent dès le départ, sans faire transiter les appels d'outils par votre client.

Activez cette fonctionnalité en passant ces champs supplémentaires à **soit** `/v1/chat/completions` ou `/v1/messages`:

| Champ             | Type            | Notes                                                                                  |
| ----------------- | --------------- | -------------------------------------------------------------------------------------- |
| `enable_thinking` | `boolean`       | `false` pour désactiver le raisonnement. `true` par défaut                             |
| `enable_tools`    | `boolean`       | `true` pour activer l'exécution des outils côté serveur.                               |
| `enabled_tools`   | `array<string>` | Quels outils le modèle peut appeler. Prend en charge `python`, `bash`, `web_search`.   |
| `session_id`      | `string`        | Facultatif. Conserve l'état des outils (par ex. le noyau Python) d'un appel à l'autre. |

#### Mode raisonnement

Le mode raisonnement est activé par défaut.&#x20;

```bash
curl http://localhost:8888/v1/chat/completions \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "default",
    "messages": [{"role": "user", "content": "résumez l'effet tunnel quantique en une phrase"}],
    "stream": false
  }'
```

Le modèle réfléchira avant de fournir une réponse.

<figure><img src="/files/2a3222be44825571d6189931020db360cd627b92" alt=""><figcaption></figcaption></figure>

Pour désactiver le raisonnement, passez `enable_thinking: false` dans votre requête. Le modèle fournira une réponse sans réfléchir d'abord.

<figure><img src="/files/7fb4fd56954eaf8391c83cd797a97ad3b61dd23c" alt=""><figcaption></figcaption></figure>

#### Exécution Python

```bash
curl http://localhost:8888/v1/chat/completions \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-local",
    "messages": [{"role": "user", "content": "Quel est 123 * 456 ? Utilisez du code pour le calculer."}],
    "stream": false,
    "enable_tools": true,
    "enabled_tools": ["python"],
    "session_id": "my-session"
  }'
```

<figure><img src="/files/a2e833104e9d04723fc25c2512aa91819fb76fdd" alt=""><figcaption></figcaption></figure>

#### Recherche web + Python (streaming)

```bash
curl http://localhost:8888/v1/chat/completions \
  -H "Authorization: Bearer sk-unsloth-xxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-local",
    "messages": [{"role": "user", "content": "Recherchez les fonctionnalités de Python 3.13"}],
    "stream": true,
    "enable_tools": true,
    "enabled_tools": ["web_search", "python"],
    "session_id": "my-session"
  }'
```

<figure><img src="/files/e041f3f0420df46ee0010a4920a219a0c7ab09d8" alt=""><figcaption></figcaption></figure>

#### Sur `/v1/messages`

Le même raccourci fonctionne également avec le point de terminaison Anthropic Messages :

```bash
curl http://localhost:8888/v1/messages \
  -H "Authorization: Bearer sk-unsloth-xxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-local",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Recherchez les fonctionnalités de Python 3.13"}],
    "stream": true,
    "enable_tools": true,
    "enabled_tools": ["web_search", "python"],
    "session_id": "my-session"
  }'
```

<figure><img src="/files/18ed9835ce69d8dc899b4c4dadaf83cf768e4d5a" alt=""><figcaption></figcaption></figure>

Unsloth diffuse ses propres `tool_result` événements SSE en plus des types d'événements standard Anthropic / OpenAI ; le modèle voit la sortie de chaque outil à son tour suivant.

### ❔ Dépannage

**`401 Non autorisé`** **-** Le `Authorization` en-tête manque ou la clé est incorrecte. Vérifiez : `Authorization: Bearer sk-unsloth-…`.

**`curl` se bloque sur les requêtes en streaming -** Ajoutez `-N` (même que `--no-buffer`). Sans lui, `curl` met en tampon le flux SSE et vous ne voyez rien avant la fin.

**L'encodage base64 diffère selon les systèmes d'exploitation** **-** Sur Linux, `base64` a tendance à insérer des retours à la ligne par défaut, contrairement à macOS / BSD. Utilisez `base64 -w 0` sur Linux, `base64` sur macOS, ou envoyez la sortie à travers `tr -d '\n'`.

**Échappement JSON dans les shells** **-** Les heredocs (`-d @file.json`) sont plus propres que les chaînes en ligne lorsque le corps devient complexe. Exemple : `curl ... -d @body.json`.

**`max_tokens` erreurs sur `/v1/messages`** **-** Le dialecte Anthropic l'exige. Ajoutez `"max_tokens": 1024` (ou toute autre limite souhaitée).

Pour les problèmes au niveau des points de terminaison (modèle qui ne se charge pas, connexion interrompue, mauvais port), consultez la page de vue d'ensemble de l'API.

### Facultatif : ajuster les valeurs par défaut du serveur

Vous pouvez personnaliser le comportement par défaut au démarrage du serveur avec `unsloth run`.

```bash
# Démarrer le serveur avec des valeurs par défaut personnalisées
unsloth run \
  --model unsloth/Qwen3-1.7B-GGUF \
  --reasoning off \
  --temp 0.6 \
  -p 8888
```

Utilisez `--reasoning off` pour désactiver le raisonnement, ou `--reasoning on` pour l'activer sur les modèles qui prennent en charge le raisonnement.

```bash
# Exposer l'API sur votre réseau local
unsloth run \
  --model unsloth/Qwen3-1.7B-GGUF \
  -H 0.0.0.0 \
  -p 8888
```

Cela démarre le serveur sur `0.0.0.0:8888`, permettant à d'autres appareils de votre réseau local de se connecter.

#### Remplacer les paramètres par requête

Vous pouvez également remplacer directement les paramètres de génération dans chaque requête API.

```bash
curl http://localhost:8888/v1/chat/completions \
  -H "Authorization: Bearer $UNSLOTH_STUDIO_AUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "default",
    "messages": [
      {
        "role": "user",
        "content": "Écrivez un court poème sur l'IA locale."
      }
    ],
    "temperature": 0.8,
    "top_p": 0.9,
    "max_tokens": 512
  }'
```

Les valeurs au niveau de la requête, comme `temperature`, `top_p`, `max_tokens`ainsi que `stream` remplacent les valeurs par défaut du serveur pour cette requête.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/fr/integrations/connecter-curl-et-http-a-unsloth.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
