---
title: "Pobieranie wielu faktur w PDF"
description: "Jak pobrać do 100 dokumentów sprzedaży naraz, w jednym archiwum ZIP z plikami PDF."
---

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

# Pobieranie wielu faktur w PDF

inFakt przygotowuje archiwum z plikami PDF w tle. Proces składa się z trzech kroków: zlecenia, sprawdzenia gotowości i pobrania pliku.

> **Przykłady korzystają z sandboxa**
>
> Wszystkie przykłady na tej stronie wysyłają żądania do środowiska testowego (`https://api.sandbox-infakt.pl/v3`). Na produkcji należy użyć adresu `https://api.infakt.pl/v3` i klucza API z konta produkcyjnego.

## Wymagania

- Klucz API z zakresami `api:invoices:write` i `api:invoices:read` w zmiennej `INFAKT_API_KEY`.
- `uuid` dokumentów: faktur (z wyjątkiem faktur wewnętrznych i raportów fiskalnych), dowodów wewnętrznych, utargów dziennych lub faktur OSS.

## Kroki

1. **Zlecenie przygotowania archiwum**

   API uwzględnia pierwsze 100 identyfikatorów `uuid`.

   ```sh
   curl -X POST "https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many.json" \
     -H "X-inFakt-ApiKey: $INFAKT_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{
       "uuids": [
         "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f",
         "f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b"
       ]
     }'
   ```

   ```js
   const res = await fetch("https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many.json", {
     method: "POST",
     headers: {
       "X-inFakt-ApiKey": process.env.INFAKT_API_KEY,
       "Content-Type": "application/json",
     },
     body: JSON.stringify({
       "uuids": [
         "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f",
         "f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b"
       ]
     }),
   });
   const data = await res.json();
   console.log(res.status, data);
   ```

   ```python
   import os
   import requests

   res = requests.post(
       "https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many.json",
       headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]},
       json={
           "uuids": [
               "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f",
               "f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b"
           ]
       },
   )
   print(res.status_code, res.json())
   ```

   ```php
   <?php
   $ch = curl_init('https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many.json');
   curl_setopt_array($ch, [
       CURLOPT_CUSTOMREQUEST => 'POST',
       CURLOPT_RETURNTRANSFER => true,
       CURLOPT_HTTPHEADER => [
           'X-inFakt-ApiKey: ' . getenv('INFAKT_API_KEY'),
           'Content-Type: application/json',
       ],
       CURLOPT_POSTFIELDS => json_encode([
           'uuids' => ['9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f', 'f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b'],
       ]),
   ]);
   $response = curl_exec($ch);
   $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   echo $status, ' ', $response, PHP_EOL;
   ```

   Odpowiedź `201` zawiera `download_token` oraz listy przyjętych i odrzuconych dokumentów:

   ```json
   {
     "download_token": "<token>",
     "accepted_uuids": [
       "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f"
     ],
     "rejected_uuids": [
       "f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b"
     ]
   }
   ```

   Token zapisuje się w zmiennej: `export DOWNLOAD_TOKEN=<token>`.
2. **Sprawdzenie gotowości**

   Żądanie należy ponawiać, aż odpowiedź będzie zawierać `{"ready":true}`:

   ```sh
   curl "https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/$DOWNLOAD_TOKEN/check.json" \
     -H "X-inFakt-ApiKey: $INFAKT_API_KEY"
   ```

   ```js
   const res = await fetch(`https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/${process.env.DOWNLOAD_TOKEN}/check.json`, {
     method: "GET",
     headers: {
       "X-inFakt-ApiKey": process.env.INFAKT_API_KEY,
     },
   });
   const data = await res.json();
   console.log(res.status, data);
   ```

   ```python
   import os
   import requests

   res = requests.get(
       f"https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/{os.environ['DOWNLOAD_TOKEN']}/check.json",
       headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]},
   )
   print(res.status_code, res.json())
   ```

   ```php
   <?php
   $ch = curl_init('https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/' . getenv('DOWNLOAD_TOKEN') . '/check.json');
   curl_setopt_array($ch, [
       CURLOPT_CUSTOMREQUEST => 'GET',
       CURLOPT_RETURNTRANSFER => true,
       CURLOPT_HTTPHEADER => [
           'X-inFakt-ApiKey: ' . getenv('INFAKT_API_KEY'),
       ],
   ]);
   $response = curl_exec($ch);
   $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   echo $status, ' ', $response, PHP_EOL;
   ```
3. **Pobranie pliku**

   ```sh
   curl "https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/$DOWNLOAD_TOKEN.json" \
     -H "X-inFakt-ApiKey: $INFAKT_API_KEY" \
     -o faktury.zip
   ```

   ```js
   const res = await fetch(`https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/${process.env.DOWNLOAD_TOKEN}.json`, {
     method: "GET",
     headers: {
       "X-inFakt-ApiKey": process.env.INFAKT_API_KEY,
     },
   });
   const fs = await import("node:fs/promises");
   await fs.writeFile("faktury.zip", Buffer.from(await res.arrayBuffer()));
   console.log(res.status);
   ```

   ```python
   import os
   import requests

   res = requests.get(
       f"https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/{os.environ['DOWNLOAD_TOKEN']}.json",
       headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]},
   )
   open("faktury.zip", "wb").write(res.content)
   print(res.status_code)
   ```

   ```php
   <?php
   $ch = curl_init('https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/' . getenv('DOWNLOAD_TOKEN') . '.json');
   curl_setopt_array($ch, [
       CURLOPT_CUSTOMREQUEST => 'GET',
       CURLOPT_RETURNTRANSFER => true,
       CURLOPT_HTTPHEADER => [
           'X-inFakt-ApiKey: ' . getenv('INFAKT_API_KEY'),
       ],
   ]);
   $response = curl_exec($ch);
   $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   file_put_contents('faktury.zip', $response);
   echo $status, PHP_EOL;
   ```

## Weryfikacja

Plik `faktury.zip` zawiera PDF każdego dokumentu z listy `accepted_uuids`. Próba pobrania przed uzyskaniem `ready: true` kończy się kodem `422`. Identyfikatory z listy `rejected_uuids` nie istnieją na koncie lub dotyczą dokumentów bez wersji PDF.

## Następne kroki

- [Typy dokumentów](/koncepcje/typy-dokumentow/): które dokumenty mają wersję PDF.
- [Operacja w referencji API](/api/async-tasks-request-pdf-bundle/)

Source: https://docs.niebieskiorzel.pl/poradniki/fakturowanie/pobierz-wiele-pdf/index.mdx
