Szybki start
Wystaw swoją pierwszą fakturę przez API Fakturnia w około pięć minut. Uzyskasz token dostępu, utworzysz nabywcę i fakturę w jednym wywołaniu oraz pobierzesz PDF.
Adres bazowy. API ma dwa środowiska. Endpointy w tej dokumentacji są względne wobec adresu bazowego wybranego środowiska:
- Produkcja —
https://prod.api.fakturnia.pl/external/v1(faktury są prawdziwe i trafiają do KSeF ze skutkiem prawnym).- Środowisko testowe (sandbox) —
https://sandbox.api.fakturnia.pl/external/v1(do nauki i testów, bez skutków prawnych).
0. Zacznij od środowiska testowego (sandbox)
Zanim cokolwiek uruchomisz na produkcji, zacznij od sandboxa. To pełnoprawna, odizolowana kopia Fakturni, w której możesz testować integrację — łącznie z wysyłką faktur do KSeF — bez żadnych skutków prawnych ani podatkowych. Jest to szczególnie istotne, gdy Twój kod pisze (albo współtworzy) LLM: najpierw potwierdź, że wszystko działa w sandboxie, a dopiero potem przełącz się na produkcję.
- Załóż osobne konto w środowisku testowym pod adresem
https://sandbox.app.fakturnia.pl. Konto produkcyjne nie działa w sandboxie — to dwa odrębne światy z osobnymi danymi. - Wygeneruj sandboxowe dane API (Inne → Integracje → REST API) na tym koncie testowym. Otrzymasz
client_idiclient_secret, które działają wyłącznie wobechttps://sandbox.api.fakturnia.pl. - Podłącz testowy certyfikat KSeF. Aby przetestować wysyłkę do KSeF, potrzebujesz certyfikatu ze środowiska testowego KSeF, a nie produkcyjnego — certyfikat produkcyjny nie zadziała wobec
https://sandbox.api.fakturnia.pl. Zaloguj się na testowy podmiot w portalu testowym Ministerstwa Finansówhttps://ap-test.ksef.mf.gov.pl/web/, wygeneruj certyfikat i podłącz go do swojego konta sandboxowego (Ustawienia → KSeF).
Gdy integracja działa w sandboxie, przełączenie na produkcję sprowadza się do zmiany adresu bazowego na https://prod.api.fakturnia.pl oraz użycia produkcyjnych danych API i produkcyjnego certyfikatu KSeF.
1. Uzyskaj dane uwierzytelniające API
REST API jest modułem planu MAX: konto, na którym tworzysz aplikację API, potrzebuje aktywnego planu MAX (nowe konto ma 14-dniowy okres próbny MAX, więc w sandboxie zaczniesz od razu). Bez planu endpoint tokenu odpowiada 403 access_denied.
Utwórz aplikację API na swoim koncie Fakturnia (Inne → Integracje → REST API). Otrzymasz client_id i client_secret oraz wybierzesz scope'y (zakresy uprawnień), z których aplikacja może korzystać (na przykład documents:create, documents:read).
Traktuj client_secret jak hasło. Nigdy nie umieszczaj go w przeglądarce, aplikacji mobilnej ani w publicznym repozytorium. Pracujesz z agentem AI? Wyklucz plik z sekretami z jego zasięgu, żeby nie trafił na zewnętrzne serwery.
2. Wymień dane uwierzytelniające na token dostępu
API korzysta z przepływu OAuth 2.0 client-credentials. Wymień swoje client_id / client_secret na krótkotrwały token typu bearer (JWT).
curl -s https://prod.api.fakturnia.pl/v1/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "client_credentials",
"client_id": "client_5c62e069...",
"client_secret": "secret_..."
}'
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "documents:create documents:read clients:create"
}
Wysyłaj token w nagłówku Bearer przy każdym żądaniu:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR...
Zobacz Uwierzytelnianie, aby poznać buforowanie tokenów, ich rotację oraz pełną listę scope'ów.
3. Utwórz swoją pierwszą fakturę
Nie musisz najpierw tworzyć nabywcy. Przekaż osadzony obiekt buyer, a Fakturnia odnajdzie lub utworzy kontrahenta za Ciebie. Sprzedawca jest zawsze pobierany z profilu Twojej firmy.
curl -s -X POST https://prod.api.fakturnia.pl/external/v1/documents \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 7c1f1d6e-0b2a-4a1e-9b1a-2a4e9b1a2a4e" \
-d '{
"documentType": "FakturaVAT",
"issueDate": "2026-06-04",
"buyer": {
"nip": "5261040828",
"name": "Acme Corp Sp. z o.o.",
"street": "Marszałkowska 1",
"postalCode": "00-001",
"city": "Warszawa",
"countryCode": "PL"
},
"products": [
{ "name": "Usługa programistyczna", "unitOfMeasure": "szt.", "quantity": 1, "netPrice": 100, "vatRate": 23 }
],
"paymentMethodId": 6,
"paymentStatusId": 1,
"paymentDeadlineDate": "2026-06-18"
}'
Każda odpowiedź jest opakowana w spójną kopertę:
{
"success": true,
"data": {
"document": {
"id": "681a3b2c4d5e6f7a8b9c0d1e",
"documentNumber": "FV/1/06/2026",
"documentType": "FakturaVAT",
"grossSum": 123,
"netSum": 100,
"vatSum": 23,
"products": [
{ "name": "Usługa programistyczna", "quantity": 1, "netPrice": 100, "netValue": 100, "amountOfVat": 23, "grossValue": 123, "vatRate": 23 }
]
}
},
"message": "DOCUMENT_CREATED",
"executionTime": 142
}
Ty przesyłasz ceny, a API wykonuje obliczenia. Przekaż
netPricelubgrossPriceorazvatRate; backend wyliczynetValue,amountOfVatigrossValueco do grosza. Dokładne reguły opisano w Typy dokumentów i kwoty.
Więcej szczegółów i porad znajdziesz w Tworzenie dokumentów: każde pole żądania, ustalanie nabywcy i odbiorcy, adnotacje oraz logika dla każdego typu dokumentu.
4. Pobierz PDF
curl -s -L https://prod.api.fakturnia.pl/external/v1/documents/681a3b2c4d5e6f7a8b9c0d1e/download \
-H "Authorization: Bearer $TOKEN" -o invoice.pdf
5. (Opcjonalnie) Wyślij ją do KSeF
Jeśli Twoje konto ma skonfigurowane połączenie z KSeF, prześlij fakturę do Krajowego Systemu e‑Faktur:
curl -s -X POST https://prod.api.fakturnia.pl/external/v1/documents/681a3b2c4d5e6f7a8b9c0d1e/send-to-ksef \
-H "Authorization: Bearer $TOKEN"
Wywołanie od razu zwraca ksefNumber, gdy KSeF działa szybko, w przeciwnym razie status processing. Jak prawidłowo poczekać na wynik — seria odpytań, webhook document.sentToKSeF i limit zapytań — opisuje Wysyłka do KSeF.
Następne kroki
- Uwierzytelnianie: tokeny, scope'y, bezpieczeństwo.
- Typy dokumentów i kwoty: faktury, zaliczki, rozliczenia, faktury korygujące oraz reguły obliczeń.
- Wysyłka do KSeF: wyślij fakturę i prawidłowo poczekaj na wynik.
- Webhooki: reaguj na zdarzenia zamiast odpytywania.
- Narzędzia: kolekcja Postman, CLI i generowanie klienta z OpenAPI.
- Dokumentacja API: każdy endpoint, generowany z OpenAPI.