> ## Documentation Index
> Fetch the complete documentation index at: https://phaseo.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Sorties structurées

> Renvoyez du JSON prévisible avec les formats de sortie json_object ou json_schema.

Les sorties structurées permettent d’imposer un format lisible par machine plutôt qu’un texte libre.

## Compatibilité des points de terminaison

Utilisez les sorties structurées sur :

* `/v1/chat/completions` avec `response_format`
* `/v1/responses` avec `text.format`
* `/v1/messages` peut toujours renvoyer du texte JSON, mais n’utilise pas le même contrat `response_format`.

## Requête

```bash theme={null}
curl https://api.phaseo.app/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5-nano",
    "messages": [
      { "role": "user", "content": "Return a JSON object with city and weather for London." }
    ],
    "response_format": {
      "type": "json_schema",
      "json_schema": {
        "name": "weather_schema",
        "strict": true,
        "schema": {
          "type": "object",
          "properties": {
            "city": { "type": "string" },
            "weather": { "type": "string" }
          },
          "required": ["city", "weather"],
          "additionalProperties": false
        }
      }
    }
  }'
```

## Réponse

```json theme={null}
{
  "id": "chatcmpl_...",
  "choices": [
    {
      "index": 0,
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": "{\"city\":\"London\",\"weather\":\"Cloudy\"}"
      }
    }
  ]
}
```

## Remarques sur le contrat

* `response_format.type` doit être `text`, `json_object` ou `json_schema`.
* Pour `json_schema`, incluez un objet de schéma (`response_format.json_schema.schema` dans les requêtes de type chat ou `text.format.schema` dans celles de type Responses).
* Validez le JSON sur votre serveur avant de l’utiliser en aval.

## Concevoir votre schéma

Commencez par un petit objet, indiquez explicitement les champs obligatoires et utilisez des énumérations pour les catégories connues. Définissez `additionalProperties: false` pour rejeter les clés supplémentaires. Synchronisez le schéma demandé et le validateur serveur ; gérez leurs versions ensemble.

## Valider le résultat

Analysez et validez le résultat complet avant de l’utiliser. Cet exemple TypeScript utilise Zod et correspond au schéma météo ci-dessus :

```typescript theme={null}
import { z } from "zod";

const Weather = z.object({
  city: z.string(),
  weather: z.string(),
}).strict();

function parseWeather(content: string) {
  return Weather.parse(JSON.parse(content));
}
```

Traitez les refus, le contenu manquant et les réponses tronquées avant l’analyse. Si la validation échoue, limitez les tentatives correctives, puis renvoyez un échec sûr. Les générations répétées peuvent entraîner des frais supplémentaires. Un JSON valide ne prouve ni l’exactitude factuelle des valeurs ni l’autorisation d’une action.

Suivez les échecs de validation par modèle et version du schéma. Revérifiez vos cas d’évaluation quand l’un change. Pour récupérer un JSON mal formé, consultez la [réparation des réponses](../cookbook/response-healing-for-structured-json.mdx).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.