---
title: "Wysyłka wielu faktur do KSeF"
description: "Jak wysłać wiele faktur do KSeF jednym żądaniem i sprawdzić, które zostały przyjęte."
---

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

# Wysyłka wielu faktur do KSeF

Jedno żądanie dodaje do kolejki wysyłkę wielu faktur. Wynik dla każdej faktury sprawdza się osobno, tak jak przy pojedynczej wysyłce.

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

> **Wymagana integracja z KSeF**
>
> Integrację konta inFakt z KSeF konfiguruje się wyłącznie w aplikacji inFakt, za pomocą certyfikatu KSeF. API tego nie umożliwia. Instrukcja: [Integracja z KSeF 2.0 (certyfikat)](https://pomoc.infakt.pl/hc/pl/articles/32484539475986-Integracja-z-KSeF-2-0-certyfikat). Bez aktywnej integracji wysyłka do KSeF kończy się błędem `422`.

## Wymagania

- Klucz API z zakresem `api:invoices:write` w zmiennej `INFAKT_API_KEY`.
- Lista `uuid` faktur do wysłania.

## Kroki

1. **Wysłanie faktur**

   ```sh
   curl -X POST "https://api.sandbox-infakt.pl/v3/ksef2/documents/send.json" \
     -H "X-inFakt-ApiKey: $INFAKT_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{
       "uuids": [
         "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f",
         "0be870f9-aa52-4d0f-a9ff-994e374ecff0"
       ]
     }'
   ```

   ```js
   const res = await fetch("https://api.sandbox-infakt.pl/v3/ksef2/documents/send.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",
         "0be870f9-aa52-4d0f-a9ff-994e374ecff0"
       ]
     }),
   });
   const data = await res.json();
   console.log(res.status, data);
   ```

   ```python
   import os
   import requests

   res = requests.post(
       "https://api.sandbox-infakt.pl/v3/ksef2/documents/send.json",
       headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]},
       json={
           "uuids": [
               "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f",
               "0be870f9-aa52-4d0f-a9ff-994e374ecff0"
           ]
       },
   )
   print(res.status_code, res.json())
   ```

   ```php
   <?php
   $ch = curl_init('https://api.sandbox-infakt.pl/v3/ksef2/documents/send.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', '0be870f9-aa52-4d0f-a9ff-994e374ecff0'],
       ]),
   ]);
   $response = curl_exec($ch);
   $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   echo $status, ' ', $response, PHP_EOL;
   ```
2. **Sprawdzenie odrzuconych faktur**

   Kod `200` oznacza, że przyjęto wszystkie faktury. Kod `207` oznacza, że część z nich odrzucono; odrzucone faktury mają `"status": "rejected"` i `"request_uuid": null`. Kod `404` oznacza, że żaden z podanych `uuid` nie odpowiada fakturze na tym koncie.
3. **Odbiór wyników**

   Wynik każdej przyjętej faktury przychodzi w webhooku albo w odpowiedzi `GET /ksef2/documents/{uuid}/status.json`, tak jak w poradniku [Wysyłka faktury do KSeF](/poradniki/ksef/wyslij-fakture/).

## Weryfikacja

Każdy element `entities` zawiera `invoice_uuid` i `status`. Status przyjętych faktur zmienia się z `pending` na `sent`, a następnie na `success` lub `error`.

## Następne kroki

- [Zdarzenia webhooków](/referencje/zdarzenia-webhookow/)
- [Operacja w referencji API](/api/ksef-send-invoices/)

Source: https://docs.niebieskiorzel.pl/poradniki/ksef/wyslij-wiele-faktur/index.mdx
