# Die Seiten eines PDFs umkehren

Kehren Sie die Seitenreihenfolge eines PDFs um, sodass die letzte Seite zur ersten wird.

Kehren Sie die Reihenfolge der Seiten eines PDFs um, sodass die letzte Seite zur
ersten und die erste zur letzten wird. Die API ist *stateless*: Ihr Dokument
wird in der Region verarbeitet und niemals gespeichert.

<Tip>
  Um die Seiten in eine beliebige Reihenfolge zu bringen und nicht nur
  vollständig umzukehren, verwenden Sie [Seiten neu
  anordnen](/docs/api/reorder-pages-of-pdf).
</Tip>

## Endpoint

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

In allen Regionen verfügbar. Hinweise zu Routing und Datenresidenz finden Sie
unter [Regionen und Datenresidenz](/docs/api/regions-and-data-residency).

| Region                 | URL                                                 |
| ---------------------- | --------------------------------------------------- |
| Global                 | `https://api.pdfblocks.com/v1/reverse_pages`        |
| USA                    | `https://us.api.pdfblocks.com/v1/reverse_pages`     |
| HIPAA USA              | `https://hipaa.api.pdfblocks.com/v1/reverse_pages`  |
| Europäische Union      | `https://eu.api.pdfblocks.com/v1/reverse_pages`     |
| Vereinigtes Königreich | `https://uk.api.pdfblocks.com/v1/reverse_pages`     |
| Kanada                 | `https://ca.api.pdfblocks.com/v1/reverse_pages`     |
| Australien             | `https://au.api.pdfblocks.com/v1/reverse_pages`     |
| Japan                  | `https://jp.api.pdfblocks.com/v1/reverse_pages`     |
| Indien                 | `https://in.api.pdfblocks.com/v1/reverse_pages`     |
| Brasilien              | `https://br.api.pdfblocks.com/v1/reverse_pages`     |

## Authentifizierung

Authentifizieren Sie jede Anfrage mit Ihrem geheimen API-Schlüssel im Header
`X-API-Key`, über HTTPS. Schlüssel erstellen und verwalten Sie im
[Dashboard](https://dashboard.pdfblocks.com). Einzelheiten finden Sie unter
[Authentifizierung](/docs/api/authentication).

## Anfrage

Der Endpoint nimmt einen Anfragetext vom Typ `multipart/form-data` entgegen.

<ParamField name="file" type="file" required>
  Das PDF-Eingabedokument.
</ParamField>

## Beispiele

Kehren Sie die Seitenreihenfolge eines PDFs um:

<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>

## Antwort

Bei Erfolg lautet die Antwort `200 OK` mit dem umgekehrten PDF als Antworttext:

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

Die Ausgabe behält Inhalt und Abmessungen jeder Seite bei: Nur ihre Reihenfolge
wird umgekehrt. Schreiben Sie den Antworttext direkt in eine Datei, wie es die
Beispiele oben tun; bei uns wird nichts gespeichert.

## Fehler

Fehlgeschlagene Anfragen liefern einen Antworttext vom Typ
`application/problem+json`. Am häufigsten ist bei diesem Endpoint der Status
`400`, der zurückgegeben wird, wenn `file` kein lesbares PDF ist. Das Objekt
`errors` nennt jedes betroffene Feld:

```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."]
  }
}
```

Ein fehlender oder ungültiger `X-API-Key` gibt einen `401` zurück. Alle
Statuscodes und die vollständige Form der Antwort finden Sie unter
[Fehler](/docs/api/errors).

## Verwandte Aktionen

<CardGroup cols={2}>

<Card title="Seiten neu anordnen" href="/docs/api/reorder-pages-of-pdf">
  Beliebige Reihenfolgen, nicht nur die Umkehrung.
</Card>

<Card title="Seiten drehen" href="/docs/api/rotate-pages-in-pdf">
  Drehen Sie Seiten um einen festen Winkel.
</Card>

<Card title="Seiten extrahieren" href="/docs/api/extract-pages-from-pdf">
  Holen Sie eine Teilmenge von Seiten heraus.
</Card>

<Card title="Seiten entfernen" href="/docs/api/remove-pages-from-pdf">
  Verwerfen Sie Seiten aus dem Dokument.
</Card>

</CardGroup>
