# Inverser les pages d’un PDF

Inversez l’ordre des pages d’un PDF pour que la dernière devienne la première. Pour un ordre quelconque, utilisez plutôt l’action Réordonner les pages.

Inversez l’ordre des pages d’un PDF : la dernière page devient la première et la
première devient la dernière. L’API est *stateless* : votre document est traité
dans la région et n’est jamais stocké.

<Tip>
  Pour réorganiser les pages dans un ordre arbitraire, et pas seulement les
  inverser entièrement, utilisez
  [Réorganiser les pages d’un PDF](/docs/api/reorder-pages-of-pdf).
</Tip>

## Endpoint

<Endpoint method="POST" path="/v1/reverse_pages" />

Disponible dans toutes les régions. Consultez [Régions et résidence des
données](/docs/api/regions-and-data-residency) pour le routage et la résidence
des données.

| Région           | URL                                                 |
| ---------------- | --------------------------------------------------- |
| Global           | `https://api.pdfblocks.com/v1/reverse_pages`        |
| Union européenne | `https://eu.api.pdfblocks.com/v1/reverse_pages`     |
| États-Unis       | `https://us.api.pdfblocks.com/v1/reverse_pages`     |
| HIPAA États-Unis | `https://hipaa.api.pdfblocks.com/v1/reverse_pages`  |
| Royaume-Uni      | `https://uk.api.pdfblocks.com/v1/reverse_pages`     |
| Canada           | `https://ca.api.pdfblocks.com/v1/reverse_pages`     |
| Australie        | `https://au.api.pdfblocks.com/v1/reverse_pages`     |
| Japon            | `https://jp.api.pdfblocks.com/v1/reverse_pages`     |
| Inde             | `https://in.api.pdfblocks.com/v1/reverse_pages`     |
| Brésil           | `https://br.api.pdfblocks.com/v1/reverse_pages`     |

## Authentification

Authentifiez chaque requête avec votre clé d’API secrète dans l’en-tête
`X-API-Key`, via HTTPS. Créez et gérez vos clés depuis le
[dashboard](https://dashboard.pdfblocks.com). Consultez
[Authentification](/docs/api/authentication) pour plus de détails.

## Requête

L’endpoint accepte un corps de requête `multipart/form-data`.

<ParamField name="file" type="file" required>
  Le document PDF d’entrée.
</ParamField>

## Exemples

Inversez l’ordre des pages d’un PDF :

<CodeGroup>

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

```python title="Python"
# pip install requests
import requests

with open('input.pdf', 'rb') as file:
    response = requests.post(
        'https://api.pdfblocks.com/v1/reverse_pages',
        headers={'X-API-Key': 'your_api_key'},
        files={'file': file},
    )

response.raise_for_status()
with open('reversed.pdf', 'wb') as output:
    output.write(response.content)
```

```javascript title="Node.js"
// Node.js 18+
import { readFile, writeFile } from 'node:fs/promises';

const body = new FormData();
body.set('file', new Blob([await readFile('input.pdf')]), 'input.pdf');

const response = await fetch('https://api.pdfblocks.com/v1/reverse_pages', {
  method: 'POST',
  headers: { 'X-API-Key': 'your_api_key' },
  body,
});

if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('reversed.pdf', Buffer.from(await response.arrayBuffer()));
```

```php title="PHP"
<?php
$ch = curl_init('https://api.pdfblocks.com/v1/reverse_pages');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['X-API-Key: your_api_key'],
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => [
        'file' => new CURLFile('input.pdf', 'application/pdf'),
    ],
]);

$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
    file_put_contents('reversed.pdf', $pdf);
}
```

```ruby title="Ruby"
# gem install http
require 'http'

response = HTTP
  .headers('X-API-Key' => 'your_api_key')
  .post('https://api.pdfblocks.com/v1/reverse_pages', form: {
    file: HTTP::FormData::File.new('input.pdf'),
  })

File.write('reversed.pdf', response.body) if response.status.success?
```

```go title="Go"
package main

import (
	"bytes"
	"io"
	"mime/multipart"
	"net/http"
	"os"
)

func main() {
	var buf bytes.Buffer
	form := multipart.NewWriter(&buf)

	file, _ := os.Open("input.pdf")
	defer file.Close()
	part, _ := form.CreateFormFile("file", "input.pdf")
	io.Copy(part, file)

	form.Close()

	req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/reverse_pages", &buf)
	req.Header.Set("Content-Type", form.FormDataContentType())
	req.Header.Set("X-API-Key", "your_api_key")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()

	out, _ := os.Create("reversed.pdf")
	defer out.Close()
	io.Copy(out, res.Body)
}
```

```csharp title="C#"
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "your_api_key");

using var form = new MultipartFormDataContent
{
    { new ByteArrayContent(File.ReadAllBytes("input.pdf")), "file", "input.pdf" },
};

var response = await client.PostAsync(
    "https://api.pdfblocks.com/v1/reverse_pages", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
    "reversed.pdf", await response.Content.ReadAsByteArrayAsync());
```

</CodeGroup>

## Réponse

En cas de succès, la réponse est `200 OK` et le PDF inversé constitue le corps :

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

La sortie conserve le contenu et les dimensions de chaque page : seul leur ordre
est inversé. Écrivez le corps directement dans un fichier, comme le font les
exemples ci-dessus ; rien n’est stocké de notre côté.

## Erreurs

Les requêtes en échec renvoient un corps `application/problem+json`. L’erreur la
plus fréquente sur cet endpoint est un `400`, renvoyé lorsque `file` n’est pas un
PDF lisible : l’objet `errors` nomme chaque champ :

```json
{
  "type": "https://www.pdfblocks.com/docs/api/v1/error/400",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "file": ["Could not parse the PDF document. The file may be invalid or corrupt."]
  }
}
```

Une `X-API-Key` absente ou non valide renvoie un `401`. Consultez
[Erreurs](/docs/api/errors) pour tous les codes de statut et la forme complète
de la réponse.

## Actions associées

<CardGroup cols={2}>

<Card title="Réorganiser les pages" href="/docs/api/reorder-pages-of-pdf">
  Des ordres arbitraires, pas seulement l’inversion.
</Card>

<Card title="Faire pivoter des pages" href="/docs/api/rotate-pages-in-pdf">
  Faites pivoter les pages d’un angle fixe.
</Card>

<Card title="Extraire des pages" href="/docs/api/extract-pages-from-pdf">
  Extrayez un sous-ensemble de pages.
</Card>

<Card title="Supprimer des pages" href="/docs/api/remove-pages-from-pdf">
  Supprimez des pages du document.
</Card>

</CardGroup>
