---
title: "Wystawianie faktury"
description: "Jak wystawić fakturę VAT dla klienta z bazy lub z danymi nabywcy podanymi w żądaniu."
---

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

# Wystawianie faktury

Fakturę VAT tworzy jedno żądanie `POST /invoices.json`. API samo wylicza kwoty na podstawie pozycji i nadaje numer.

> **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 zakresem `api:invoices:write` w zmiennej `INFAKT_API_KEY`.
- Przy płatności przelewem: numer rachunku zapisany na koncie inFakt (`GET /bank_accounts.json`).

## Kroki

1. **Wybór nabywcy**

   Nabywcę wskazuje się przez `client_id` klienta zapisanego w bazie ([Dodawanie klienta](/poradniki/fakturowanie/dodaj-klienta/)) albo przez dane nabywcy podane bezpośrednio w fakturze: `client_company_name`, `client_tax_code`, `client_street`, `client_city`, `client_post_code`. Bez `client_id` API dopasowuje klienta na podstawie danych z żądania.
2. **Ustalenie stawek VAT**

   Symbole stawek (`"23"`, `"8"`, `"zw"` i inne) zwraca `GET /vat_rates.json`. Przy stawce `"zw"` należy też podać `vat_exemption_reason`, czyli podstawę zwolnienia z `GET /vat_exemptions.json`.
3. **Wysłanie żądania**

   ```sh
   curl -X POST "https://api.sandbox-infakt.pl/v3/invoices.json" \
     -H "X-inFakt-ApiKey: $INFAKT_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{
       "invoice": {
         "kind": "vat",
         "payment_method": "transfer",
         "invoice_date": "2026-10-01",
         "sale_date": "2026-10-01",
         "payment_date": "2026-10-15",
         "client_id": 1003,
         "bank_account": "61109010140000071219812874",
         "services": [
           { "name": "Usługa programistyczna", "tax_symbol": "23", "unit": "godz.", "quantity": 1, "unit_net_price": 10000, "pkwiu": "62.01.11.0" }
         ]
       }
     }'
   ```

   ```js
   const res = await fetch("https://api.sandbox-infakt.pl/v3/invoices.json", {
     method: "POST",
     headers: {
       "X-inFakt-ApiKey": process.env.INFAKT_API_KEY,
       "Content-Type": "application/json",
     },
     body: JSON.stringify({
       invoice: {
         kind: "vat",
         payment_method: "transfer",
         invoice_date: "2026-10-01",
         sale_date: "2026-10-01",
         payment_date: "2026-10-15",
         client_id: 1003,
         bank_account: "61109010140000071219812874",
         services: [
           { name: "Usługa programistyczna", tax_symbol: "23", unit: "godz.", quantity: 1, unit_net_price: 10000, pkwiu: "62.01.11.0" },
         ],
       },
     }),
   });
   const invoice = await res.json();
   console.log(res.status, invoice.number, invoice.gross_price);
   ```

   ```python
   import os
   import requests

   res = requests.post(
       "https://api.sandbox-infakt.pl/v3/invoices.json",
       headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]},
       json={
           "invoice": {
               "kind": "vat",
               "payment_method": "transfer",
               "invoice_date": "2026-10-01",
               "sale_date": "2026-10-01",
               "payment_date": "2026-10-15",
               "client_id": 1003,
               "bank_account": "61109010140000071219812874",
               "services": [
                   {"name": "Usługa programistyczna", "tax_symbol": "23", "unit": "godz.", "quantity": 1, "unit_net_price": 10000, "pkwiu": "62.01.11.0"}
               ],
           }
       },
   )
   invoice = res.json()
   print(res.status_code, invoice["number"], invoice["gross_price"])
   ```

   ```php
   <?php
   $body = [
       'invoice' => [
           'kind' => 'vat',
           'payment_method' => 'transfer',
           'invoice_date' => '2026-10-01',
           'sale_date' => '2026-10-01',
           'payment_date' => '2026-10-15',
           'client_id' => 1003,
           'bank_account' => '61109010140000071219812874',
           'services' => [
               ['name' => 'Usługa programistyczna', 'tax_symbol' => '23', 'unit' => 'godz.', 'quantity' => 1, 'unit_net_price' => 10000, 'pkwiu' => '62.01.11.0'],
           ],
       ],
   ];

   $ch = curl_init('https://api.sandbox-infakt.pl/v3/invoices.json');
   curl_setopt_array($ch, [
       CURLOPT_POST => true,
       CURLOPT_RETURNTRANSFER => true,
       CURLOPT_HTTPHEADER => [
           'X-inFakt-ApiKey: ' . getenv('INFAKT_API_KEY'),
           'Content-Type: application/json',
       ],
       CURLOPT_POSTFIELDS => json_encode($body),
   ]);
   $invoice = json_decode(curl_exec($ch), true);
   echo curl_getinfo($ch, CURLINFO_HTTP_CODE), ' ', $invoice['number'], ' ', $invoice['gross_price'], PHP_EOL;
   ```

## Weryfikacja

Odpowiedź `201 Created` zawiera fakturę w statusie `draft`, z nadanym numerem i wyliczonymi kwotami:

```json
{
  "id": 999,
  "uuid": "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f",
  "number": "1/10/2026",
  "kind": "vat",
  "status": "draft",
  "net_price": 10000,
  "tax_price": 2300,
  "gross_price": 12300,
  "left_to_pay": 12300,
  "client_id": 1003
}
```

Odpowiedź `422` oznacza błąd walidacji. Pole `errors` wskazuje pola do poprawienia:

```json
{
  "error": "Nieprawidłowe parametry. Popraw błędy i spróbuj ponownie.",
  "errors": {
    "client_id": [
      "Proszę wybrać klienta."
    ]
  }
}
```

## Następne kroki

- [Wysyłka faktury do KSeF](/poradniki/ksef/wyslij-fakture/)
- [Wysyłka faktury e-mailem](/poradniki/fakturowanie/wyslij-e-mailem/)
- [Wystawianie wielu faktur naraz](/poradniki/fakturowanie/wystaw-wiele-faktur/)
- [Operacja w referencji API](/api/invoices-json/create/)

Source: https://docs.niebieskiorzel.pl/poradniki/fakturowanie/wystaw-fakture/index.mdx
