# Formats de réponse et négociation de contenu

Ce que renvoie une action, et comment l’en-tête Accept choisit entre un PDF, un ZIP, une enveloppe JSON et multipart/mixed.

La plupart des actions renvoient un seul document `application/pdf`. Les quatre
actions de division en renvoient plusieurs d’un coup, et vous choisissez leur
conditionnement avec l’en-tête de requête `Accept`. Cette page est la référence
de cette négociation de contenu : les options de conditionnement, le schéma de
l’enveloppe JSON et ce qui se passe quand un en-tête `Accept` ne correspond à
rien.

## Réponses à un seul document

Toute action qui n’est pas une division répond `200 OK` avec le PDF traité comme
corps brut :

```http
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 48213
```

Il n’y a rien à négocier : écrivez le corps en flux dans un fichier, comme le font les
exemples de chaque page d’action.

## Réponses à plusieurs documents

La famille des divisions renvoie plusieurs documents en un seul appel :
[Diviser par nombre de pages](/docs/api/split-pdf-by-page-count),
[Diviser à une page](/docs/api/split-pdf-at-page),
[Diviser par taille de fichier](/docs/api/split-pdf-by-file-size) et
[Diviser en groupes de pages](/docs/api/split-pdf-into-page-groups). Les
documents de sortie sont nommés `00001.pdf`, `00002.pdf`, et ainsi de suite, dans
l’ordre. Vous sélectionnez le conditionnement avec l’en-tête de requête
`Accept` :

| En-tête `Accept`     | Réponse                                                         |
| -------------------- | -------------------------------------------------------------- |
| *(aucun envoyé)*     | `application/zip`, le format par défaut                        |
| `application/zip`    | Une archive ZIP des PDF de sortie                              |
| `application/json`   | Une enveloppe JSON de documents encodés en base64              |
| `multipart/mixed`    | Un PDF par partie                                              |
| toute autre valeur   | `406 Not Acceptable`                                            |

### application/zip, le format par défaut

Sans en-tête `Accept` (ou avec `Accept: application/zip`), la réponse est une
archive ZIP dont les entrées sont nommées `00001.pdf`, `00002.pdf`, et ainsi de
suite :

```bash title="cURL"
curl https://api.pdfblocks.com/v1/split_by_page_count \
  -H 'X-API-Key: your_api_key' \
  -F file=@input.pdf \
  -F page_count=10 \
  -o parts.zip
```

Décompressez `parts.zip` pour obtenir les documents individuels.

### application/json, l’enveloppe base64

Demandez `Accept: application/json` pour obtenir tous les documents en ligne dans
une seule réponse JSON, ce qui est pratique quand vous voulez garder les parties
en mémoire ou les transmettre sans toucher au système de fichiers :

```bash title="cURL"
curl https://api.pdfblocks.com/v1/split_by_page_count \
  -H 'X-API-Key: your_api_key' \
  -H 'Accept: application/json' \
  -F file=@input.pdf \
  -F page_count=10 \
  -o parts.json
```

Le corps est un tableau `documents` dont chaque entrée porte son nom et ses
octets encodés en base64 :

```json
{
  "documents": [
    {
      "name": "00001.pdf",
      "content": "JVBERi0xLjcKJeLjz9MK... (base64)",
      "content_type": "application/pdf"
    },
    {
      "name": "00002.pdf",
      "content": "JVBERi0xLjcKJeLjz9MK... (base64)",
      "content_type": "application/pdf"
    }
  ]
}
```

<ParamField name="documents" type="array" required>
  Les documents PDF de sortie, dans l’ordre.
</ParamField>

<ParamField name="documents[].name" type="string" required>
  Le nom du document : `00001.pdf`, `00002.pdf`, et ainsi de suite.
</ParamField>

<ParamField name="documents[].content" type="string (base64)" required>
  Le document PDF, encodé en base64. Décodez-le pour retrouver les octets bruts
  du PDF.
</ParamField>

<ParamField name="documents[].content_type" type="string" required>
  Le type de média du document : `application/pdf`.
</ParamField>

### multipart/mixed, une partie par document

Demandez `Accept: multipart/mixed` pour recevoir les documents en flux, dans un
corps multipart avec une partie par PDF de sortie, dans l’ordre. Chaque partie a
un `Content-Type` valant `application/pdf` et un `Content-Disposition` qui la
nomme `00001.pdf`, `00002.pdf`, et ainsi de suite.

```bash title="cURL"
curl https://api.pdfblocks.com/v1/split_by_page_count \
  -H 'X-API-Key: your_api_key' \
  -H 'Accept: multipart/mixed' \
  -F file=@input.pdf \
  -F page_count=10 \
  -o parts.multipart
```

## Un Accept sans correspondance renvoie 406

Si vous envoyez un en-tête `Accept` qui ne correspond à aucun des trois formats
ci-dessus, par exemple `Accept: application/pdf` sur une action de division,
l’API répond `406 Not Acceptable` avec un corps `application/problem+json`. Soit
vous omettez `Accept` pour prendre le ZIP par défaut, soit vous demandez l’un des
types de média pris en charge. Voir [Erreurs](/docs/api/errors) pour la forme des
problem details.

<Tip>
  Pour du code de bout en bout qui appelle une action de division et déballe
  chaque format, en extrayant le ZIP, en décodant l’enveloppe JSON ou en lisant
  les parties multipart, voir le guide
  [Diviser un PDF et traiter la sortie](/docs/api/splitting-a-pdf).
</Tip>
