Fakturę VAT tworzy jedno żądanie POST /invoices.json. API samo wylicza kwoty na podstawie pozycji i nadaje numer.
Wymagania
- Klucz API z zakresem
api:invoices:writew zmiennejINFAKT_API_KEY. - Przy płatności przelewem: numer rachunku zapisany na koncie inFakt (
GET /bank_accounts.json).
Kroki
Wybór nabywcy
Nabywcę wskazuje się przez
client_idklienta zapisanego w bazie (Dodawanie klienta) albo przez dane nabywcy podane bezpośrednio w fakturze:client_company_name,client_tax_code,client_street,client_city,client_post_code. Bezclient_idAPI dopasowuje klienta na podstawie danych z żądania.Ustalenie stawek VAT
Symbole stawek (
"23","8","zw"i inne) zwracaGET /vat_rates.json. Przy stawce"zw"należy też podaćvat_exemption_reason, czyli podstawę zwolnienia zGET /vat_exemptions.json.Wysłanie żądania
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" } ] } }'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);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 $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:
{
"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:
{
"error": "Nieprawidłowe parametry. Popraw błędy i spróbuj ponownie.",
"errors": {
"client_id": [
"Proszę wybrać klienta."
]
}
}