Skip to content
 
 

Latest commit

 

History

372 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fakturownia API

Opis jak zintegrować własną aplikację lub serwis z systemem Fakturownia.pl

Dzięki API można z innych systemów wystawiać faktury/rachunki/paragony oraz zarządzać tymi dokumentami, a także klientami i produktami.

Działające przykłady wywołania API Fakturowni znajdują się też w w systemie Fakturownia (po zalogowaniu) w menu Ustawienia > API oraz na stronie: https://app.fakturownia.pl/api

Spis treści

API token

API_TOKEN token trzeba pobrać z ustawień aplikacji ("Ustawienia -> Ustawienia konta -> Integracja -> Kod autoryzacyjny API")

Dodatkowe parametry dostępne przy pobieraniu listy rekordów

Do wywołań można przekazywać dodatkowe parametry - te same które są używane w aplikacji, np. page=, period= itp.

Parametr page= umożliwia iterowanie po paginowanych rekordach. Domyślnie przyjmuje wartość 1 i wyświetla pierwsze N rekordów, gdzie N to limit ilości zwracanych rekordów. Aby uzyskać kolejne N rekordów, należy wywołać akcję z parametrem page=2, itd.

N można ustawiać za pomocą parametru per_page= (gdzie 100 to jego maksymalna wartość).

Parametr period= umożliwia wybranie rekordów z zadanego okresu. Może przyjąć następujące wartości:

- last_12_months
- this_month
- last_30_days
- last_month
- this_year
- last_year
- all
- more (tutaj trzeba jeszcze dostarczyć dodatkowe parametry date_from (np. "2018-12-16") i date_to (np. "2018-12-21"))

Parametr include_positions= z wartością true umożliwia pobranie listy rekordów wraz z ich pozycjami

Parametr income= z wartością no umożliwia pobranie faktur kosztowych (wydatków)

Parametr invoice_ids umożliwia przekazanie id faktur do pobrania np.: invoice_ids=123,456,789

Parametr number= umożliwia pobranie faktury o wskazanym numerze

Parametr kind= pozwala pobrać tylko jeden konkretny rodzaj dokumentów np.: kind=accounting_note

Parametr kinds= pozwala wybrać kilka różnych rodzajów dokumentów np.: &kinds[]=vat&kinds[]=proforma

Parametr search_date_type= określa po jakiej dacie chcemy wyszukiwać dokumenty. Może przyjmować następujące wartości:

`issue_date` - data wystawienia
`paid_date` - data płatności
`transaction_date` - data sprzedaży

Domyślnie ustawiona jest data wystawienia issue_date.

Parametr order= pozwala wybrać wartość, według której będzie ustalona kolejność wyświetlania faktur.

`number` - numer faktury
`updated_at` - daty ostatniej modyfikacji
`price_net` - cena netto
`price_gross` - cena brutto
`price_tax` - podatek
`issue_date` - data wystawienia dokumentu
`payment_to` - termin płatności
`paid_date` - data płatności
`transaction_date` - data sprzedaży
`buyer_name` - nazwa kupującego
`buyer_tax_no` - nip kupującego
`seller_name` - nazwa sprzedającego
`oid` - zewnętrzny identyfikator faktury

Można dodać do parametru .desc aby zmienić kolejność sortowania na malejącą np. updated_at.desc.

Przykłady wywołania

Pobranie listy faktur z aktualnego miesiąca

curl https://twojaDomena.fakturownia.pl/invoices.json?period=this_month&api_token=API_TOKEN&page=1

Pobranie listy faktur wraz z ich pozycjami

curl https://twojaDomena.fakturownia.pl/invoices.json?include_positions=true&api_token=API_TOKEN&page=1

Faktury danego klienta

curl https://twojaDomena.fakturownia.pl/invoices.json?client_id=ID_KLIENTA&api_token=API_TOKEN

Pobranie faktury po ID

curl https://twojaDomena.fakturownia.pl/invoices/100.json?api_token=API_TOKEN

Pobranie PDF-a

curl https://twojaDomena.fakturownia.pl/invoices/100.pdf?api_token=API_TOKEN

Wysłanie faktury e-mailem do klienta (na e-mail klienta podany przy tworzeniu faktury, pole "buyer_email")

curl -X POST https://twojaDomena.fakturownia.pl/invoices/100/send_by_email.json?api_token=API_TOKEN

Opcjonalne parametry do wywołania send_by_email:

Parametr email_to= z wartością email1,email2,email3, umożliwia przekazanie listy adresatów emaila z fakturą. Można ustawić w ten sposób do 5 adresów email.

Parametr email_cc= z wartością email1,email2,email3 umożliwia przekazanie listy adresatów do których wyślemy kopię emaila (email cc).

Parametr email_pdf= z wartością true umożliwa dołączenie w załączniku pliku pdf z fakturą.

Parametr update_buyer_email= z wartością true umożliwa aktualizację emaila odbiorcy na fakturze (musimy również przekazać parametr email_to). Jeśli na fakturze jest ustawiony odbiorca (recipient) to aktualizujemy recipient_email, zamiast buyer_email.

inne opcje PDF:

  • print_option=original - Oryginał
  • print_option=copy - Kopia
  • print_option=original_and_copy - Oryginał i kopia
  • print_option=duplicate Duplikat

Dodanie nowej faktury

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "kind":"vat",
            "number": null,
            "sell_date": "2013-01-16",
            "issue_date": "2013-01-16",
            "payment_to": "2013-01-23",
            "seller_name": "Wystawca Sp. z o.o.",
            "seller_tax_no": "6272616681",
            "buyer_name": "Klient1 Sp. z o.o.",
            "buyer_email": "buyer@testemail.pl",
            "buyer_tax_no": "6272616681",
            "positions":[
                {"name":"Produkt A1", "tax":23, "total_price_gross":10.23, "quantity":1},
                {"name":"Produkt A2", "tax":0, "total_price_gross":50, "quantity":3}
            ]
        }
    }'

Klient: nowy lub istniejący
Podczas dodawania nowego dokumentu system automatycznie stara się dopasować przesłane dane nabywcy z istniejącym na koncie klientem. W dopasowaniu biorą udział następujące pola: "buyer_name", "buyer_tax_no", "buyer_email" (i/lub dla klienta prywatnego "buyer_first_name" i "buyer_last_name"). Jeśli nie uda się dopasować żadnego istniejącego klienta, system utworzy nowego. Gdy dodajemy dokument dla klienta, którego mamy już w bazie, zamiast pól zaczynających się od słowa "buyer" zaleca się używanie samego identyfikatora klienta - "client_id". Wówczas na wystawianym dokumencie dane nabywcy będą identyczne jak dane w karcie wskazanego klienta. Możesz zaktualizować niektóre dane na karcie klienta (np.: adres), dodając parametr "buyer_override": true. Przykład:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
	-H 'Accept: application/json' \
	-H 'Content-Type: application/json' \
	-d '{"api_token": "API_TOKEN",
		"invoice": {
            "kind":"vat",
            "number": null,
            "sell_date": "2013-01-16",
            "issue_date": "2013-01-16",
            "payment_to": "2013-01-23",
            "seller_name": "Wystawca Sp. z o.o.",
            "seller_tax_no": "6272616681",
            "client_id": 1,
                "buyer_post_code": "06000",
                "buyer_city": "Nice",
                "buyer_street": "Rue de la Joie 11",
                "buyer_country": "FR",
                "buyer_override": true,
            "positions":[
                {"name":"Produkt A1", "tax":23, "total_price_gross":10.23, "quantity":1},
                {"name":"Produkt A2", "tax":0, "total_price_gross":50, "quantity":3}
            ]
	    }}'

Dodanie nowej faktury - minimalna wersja (tylko pola wymagane), gdy mamy Id produktu (product_id), nabywcy (client_id) i sprzedawcy (department_id) wtedy nie musimy podawać pełnych danych. Opcjonalnie można podać również id odbiorcy (recipient_id). Zostanie wystawiona Faktura VAT z aktualnym dniem i z 5 dniowym terminem płatności.

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{"api_token": "API_TOKEN",
        "invoice": {
            "payment_to_kind": 5,
            "client_id": 1,
            "positions":[
                {"product_id": 1, "quantity":2}
            ]
        }}'

Dodanie nowej faktury – dokumentu podobnego do faktury o podanym ID (copy_invoice_from).

Dodanie identycznej faktury o podanym rodzaju

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "copy_invoice_from": ID_DOKUMENTU_ZRODLOWEGO,
            "kind": "RODZAJ_FAKTURY"
        }
    }'

Dodanie faktury zaliczkowej na podstawie zamówienia – % pełnej kwoty (podłączenie dokładnie 1 zamówienia jest wymagane; użycie advance_creation_mode: percent/amount od razu łączy z zamówieniem z copy_invoice_from)

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "copy_invoice_from": ID_ZAMOWIENIA,
            "kind": "advance",
            "advance_creation_mode": "percent",
            "advance_value": "10",
            "position_name": "Zaliczka na wykonanie zamówienia ZAM-NR"
        }
    }'

Dodanie faktury zaliczkowej na podstawie zamówienia – podana kwota brutto (podłączenie dokładnie 1 zamówienia jest wymagane; użycie advance_creation_mode: percent/amount od razu łączy z zamówieniem z copy_invoice_from)

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "copy_invoice_from": ID_ZAMOWIENIA,
            "kind": "advance",
            "advance_creation_mode": "amount",
            "advance_value": "150",
            "position_name": "Zaliczka na wykonanie zamówienia ZAM-NR"
        }
    }'

Dodanie faktury końcowej na podstawie zamówienia i faktur zaliczkowych (podłącznie przynajmniej jednej zaliczki przez invoice_ids jest wymagane)

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "copy_invoice_from": ID_ZAMOWIENIA,
            "kind": "final",
            "invoice_ids": [ID_ZALICZKI_1, ID_ZALICZKI_2, ...]
        }
    }'

Dodanie faktury VAT na podstawie faktury Proforma

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "copy_invoice_from": ID_PROFORMY,
            "kind": "vat"
        }
    }'

Dodanie faktury OSS

Jeśli w ustawieniach konta zaznaczyłeś opcję "Faktury OSS", możesz utworzyć fakturę oznaczoną jako sprzedaż OSS poprzez dopisanie parametru "use_oss":

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "kind":"vat",
            "seller_name": "Wystawca Sp. z o.o.",
            "seller_country": "PL",
            "buyer_name": "Klient1 Sp. z o.o."
            "buyer_country": "FR",
            "use_oss": true,
            "positions":[
                {"name":"Produkt A1", "tax":20, "total_price_gross":50, "quantity":3}
            ]
        }
    }'

Dodanie do żądania rekordu "identify_oss": "1" spowoduje, że system przed oznaczeniem dokumentu jako "OSS" najpierw sprawdzi, czy spełnia on odpowiednie warunki. W przypadku nieprawidłowych danych, system nie oznaczy faktury jako faktura "OSS" - na przykład, jeśli na przesłanej fakturze kraj Nabywcy będzie taki sam jak kraj Sprzedawcy. Rekord ten należy dodać w tym samym miejscu, co "api_token" i "invoice".

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "identify_oss": "1" ,
        "invoice": {
            "kind":"vat",
            "seller_name": "Wystawca Sp. z o.o.",
            "seller_country": "PL",
            "buyer_name": "Klient1 Sp. z o.o."
            "buyer_country": "FR",
            "use_oss": true,
            "positions":[
                {"name":"Produkt A1", "tax":20, "total_price_gross":50, "quantity":3}
            ]
        }
    }'

Dodanie nowej faktury korygującej

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{"api_token": "API_TOKEN",
        "invoice": {
            "kind": "correction",
            "correction_reason": "Zła ilość",
            "invoice_id": "2432393",
            "from_invoice_id": "2432393",
            "client_id": 1,
            "positions":[
                {"name": "Product A1",
                "quantity":-1,
                "total_price_gross":"-10",
                "tax":"23",
                "kind":"correction",
                "correction_before_attributes": {
                    "name":"Product A1",
                    "quantity":"2",
                    "total_price_gross":"20",
                    "tax":"23",
                    "kind":"correction_before"
                },
                "correction_after_attributes": {
                    "name":"Product A1",
                    "quantity":"1",
                    "total_price_gross":"10",
                    "tax":"23",
                    "kind":"correction_after"
                }
            }]
        }}'

Dodanie faktury kosztowej

W celu wystawienia faktury kosztowej konieczne jest przekazanie w parametrach pola income="0".

Ważne! W przypadku faktur kosztowych wszystkie pola zaczynające się od seller_ zostaną wyświetlone na fakturze w sekcji "Nabywca", a pola zaczynające się od buyer_ pokażą się w sekcji "Sprzedawca".

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "kind":"vat",
            "income": "0",
            "sell_date": "2013-01-16",
            "issue_date": "2013-01-16",
            "payment_to": "2013-01-23",
            "seller_name": "Wystawca Sp. z o.o.",
            "seller_tax_no": "5252445767",
            "buyer_name": "Klient1 Sp. z o.o.",
            "buyer_email": "buyer@testemail.pl",
            "buyer_tax_no": "5252445767",
            "positions":[
                {"name":"Produkt A1", "tax":23, "total_price_gross":10.23, "quantity":1},
            ]
        }
    }'

Pola zaczynające się od seller_ oraz buyer_ można odpowiednio zastąpić przez department_id oraz client_id.

Aktualizacja faktury

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/111.json \
    -X PUT \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "buyer_name": "Nowa nazwa klienta Sp. z o.o."
        }
    }'

Aktualizacja pozycji na fakturze - aby edytować pozycję na fakturze, należy podać id pozycji.

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/111.json \
    -X PUT \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "positions": [{"id":32649087, "name":"test"}]
        }
    }'

Usunięcie pozycji na fakturze - aby usunąć pozycję na fakturze, należy podać id pozycji wraz z parametrem _destroy=1.

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/111.json \
    -X PUT \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "positions": [{"id":32649087, "_destroy": 1}]
        }
    }'

Dodanie pozycji na fakturze. Pozycja zostanie dopisana jako ostatnia.

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/111.json \
    -X PUT \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "positions": [{"name":"Produkt A1", "tax":23, "total_price_gross":10.23, "quantity":1}]
        }
    }'

Dodanie pozycji na fakturze marża.

Faktura VAT marża (kind: "vat_margin") może zawierać mieszane pozycje - zwykłe (ze standardową stawką VAT) oraz marżowe (z tax: "disabled"). Dotyczy to np. biur podróży, które na jednej fakturze wykazują usługi turystyczne (marża) i usługi własne (zwykły VAT). Pola marżowe wymagają dodatkowych pól na poziomie pozycji.

Pola pozycji marżowej (tax: "disabled"):

Pole Wymagane Opis
tax tak Musi być "disabled" dla pozycji marżowej
total_purchase_price tak Cena zakupu (kwota nabycia)
vat_margin_tax tak Stawka VAT od marży (np. "23", "8")
name, quantity, total_price_gross tak Standardowe pola pozycji
vat_margin_total_price_net nie Kwota netto marży (wyliczana automatycznie)
vat_margin_total_price_tax nie Kwota podatku od marży (wyliczana automatycznie)
vat_margin_total_price_gross nie Kwota brutto marży (wyliczana automatycznie)

Przykład - faktura marża z pozycjami marżowymi:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "kind": "vat_margin",
            "number": null,
            "sell_date": "2025-01-16",
            "issue_date": "2025-01-16",
            "payment_to": "2025-01-23",
            "seller_name": "Biuro Podróży Sp. z o.o.",
            "seller_tax_no": "6272616681",
            "buyer_name": "Klient Sp. z o.o.",
            "buyer_tax_no": "5272616681",
            "procedure_vat_margin": "procedura marży dla biur podróży",
            "positions": [
                {
                    "name": "Wycieczka Grecja",
                    "tax": "disabled",
                    "quantity": 1,
                    "total_price_gross": 5000.00,
                    "total_purchase_price": 4200.00,
                    "vat_margin_tax": "23"
                },
                {
                    "name": "Wycieczka Włochy",
                    "tax": "disabled",
                    "quantity": 1,
                    "total_price_gross": 3500.00,
                    "total_purchase_price": 3100.00,
                    "vat_margin_tax": "23"
                }
            ]
        }
    }'

Przykład - faktura marża z pozycjami mieszanymi:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "kind": "vat_margin",
            "number": null,
            "sell_date": "2025-01-16",
            "issue_date": "2025-01-16",
            "payment_to": "2025-01-23",
            "seller_name": "Biuro Podróży Sp. z o.o.",
            "seller_tax_no": "6272616681",
            "buyer_name": "Klient Sp. z o.o.",
            "buyer_tax_no": "5272616681",
            "procedure_vat_margin": "procedura marży dla biur podróży",
            "positions": [
                {
                    "name": "Wycieczka Grecja (usługa turystyczna)",
                    "tax": "disabled",
                    "quantity": 1,
                    "total_price_gross": 5000.00,
                    "total_purchase_price": 4200.00,
                    "vat_margin_tax": "23"
                },
                {
                    "name": "Transfer lotniskowy (usługa własna)",
                    "tax": "23",
                    "quantity": 1,
                    "total_price_gross": 246.00
                }
            ]
        }
    }'

Zmiana statusu faktury

curl "https://YOUR_DOMAIN.fakturownia.pl/invoices/111/change_status.json?api_token=API_TOKEN&status=STATUS" -X POST

Pobranie listy definicji faktur cyklicznych

curl https://YOUR_DOMAIN.fakturownia.pl/recurrings.json?api_token=API_TOKEN

Dodanie definicji faktury cyklicznej

curl https://YOUR_DOMAIN.fakturownia.pl/recurrings.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{"api_token": "API_TOKEN",
        "recurring": {
            "name": "Nazwa cyklicznosci",
            "invoice_id": 1,
            "start_date": "2016-01-01",
            "every": "1m",
            "issue_working_day_only": false,
            "send_email": true,
            "buyer_email": "mail1@mail.pl, mail2@mail.pl",
            "end_date": "null"
        }}'

Aktualizacja definicji faktury cyklicznej (zmiana daty wystawienia następnej faktury)

curl https://YOUR_DOMAIN.fakturownia.pl/recurrings/111.json \
    -X PUT \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "recurring": {
            "next_invoice_date": "2016-02-01"
        }
    }'

Usunięcie faktury

curl -X DELETE "https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json?api_token=API_TOKEN"

Anulowanie faktury

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/cancel.json \
        -X POST \
	-H 'Accept:application/json' \
	-H 'Content-Type: application/json' \
	-d '{
	        "api_token": "API_TOKEN",
            "cancel_invoice_id": ID_FAKTURY,
		    "cancel_reason": "Powód anulowania (opcjonalnie)"
	 }'

Aby wyświetlić powód anulowania wskazany w anulowanym dokumencie, dołącz parametr additional_fields[invoice]=cancel_reason w adresie URL żądania. Przykład:

https://YOUR_DOMAIN.fakturownia.pl/invoices/ID_FAKTURY.json?api_token=API_TOKEN&additional_fields[invoice]=cancel_reason

Połączenie istniejącej faktury i paragonu

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/ID_FAKTURY.json \
    -X PUT \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "from_invoice_id": ID_PARAGONU,
            "invoice_id": ID_PARAGONU,
            "exclude_from_stock_level": true
        }
    }'

Dodawanie faktury do istniejącego paragonu

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -X POST \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "from_invoice_id": ID_PARAGONU,
            "additional_params":"for_receipt",
            "exclude_from_stock_level": true,
            "buyer_name": "Klient1 Sp. z o.o.",
            "buyer_tax_no": "6272616681",
            "positions": [
                {"name":"Produkt A1","quantity":"1","tax":"23","total_price_gross":"10,23"}
            ]
        }
    }'

Dane buyer_name, buyer_tax_no, positions wypełniamy danymi z paragonu.

Pobranie wszystkich załączników faktury w archiwum ZIP

curl -o attachments.zip https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID/attachments_zip.json?api_token=API_TOKEN

Dodanie nowego załącznika do faktury

  1. Pobranie danych niezbędnych do przesłania pliku:

    curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID/get_new_attachment_credentials.json?api_token=API_TOKEN
  2. Przesłanie pliku:

    curl -F 'AWSAccessKeyId=received_AWSAccessKeyId' \
         -F 'key=received_key' \
         -F 'policy=received_policy' \
         -F 'signature=received_signature' \
         -F 'acl=received_acl' \
         -F 'success_action_status=received_success_action_status' \
         -F 'file=@/file_path/name.ext' \
         received_url
  3. Dodanie załącznika (przesłanego pliku) do faktury:

    curl -X POST https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID/add_attachment.json?api_token=API_TOKEN&file_name=name.ext
  4. Domyślnie załączniki nie są widoczne dla klientów. Aby to zmienić, można wysłać następujące żądanie:

        curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json \
        -X PUT \
        -H 'Accept: application/json'  \
        -H 'Content-Type: application/json' \
        -d '{
            "api_token": "API_TOKEN",
            "invoice": {
                "show_attachments": true
            }
        }'

Wydruk fiskalny

curl https://twojaDomena.fakturownia.pl/invoices/fiscal_print?api_token=API_TOKEN&invoice_ids[]=111&invoice_ids[]=112&fiskator_name=NAZWA_DRUKARKI

Za pomocą parametru invoice_ids[] przekazujemy id faktur do wydrukowania.

Za pomocą parametru fiskator_name możemy przekazać nazwę drukarki, na której uruchomi się wydruk (przydatne jeśli mamy połączoną więcej niż jedną drukarkę).

Faktura korekta

  1. Pobranie faktury korekty wraz z dwoma dodatkowymi polami "Treść korygowana" i "Treść poprawiona":
curl https://twojaDomena.fakturownia.pl/invoices/INVOICE_ID.json?api_token=API_TOKEN&additional_fields[invoice]=corrected_content_before,corrected_content_after
  1. Dodanie nowej faktury korygującej
curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"api_token": "API_TOKEN",
    "invoice": {
        "kind": "correction",
        "correction_reason": "Zła ilość",
        "invoice_id": "2432393",
        "from_invoice_id": "2432393",
        "client_id": 1,
        "positions":[
            {"name": "Product A1",
            "quantity":-1,
            "total_price_gross":"-10",
            "tax":"23",
            "kind":"correction",
            "correction_before_attributes": {
                "name":"Product A1",
                "quantity":"2",
                "total_price_gross":"20",
                "tax":"23",
                "kind":"correction_before"
            },
            "correction_after_attributes": {
                "name":"Product A2",
                "quantity":"1",
                "total_price_gross":"10",
                "tax":"23",
                "kind":"correction_after"
            }
        }]
    }}'

Pobranie faktury korekty wraz z informacją "przed / po korekcie" w pozycjach:

curl https://twojaDomena.fakturownia.pl/invoices/INVOICE_ID.json?api_token=API_TOKEN&correction_positions=full

Dodanie domyślnych uwag z ustawień konta

Do faktury można dodać domyśle uwagi z ustawień konta korzystając z parametru: fill_default_descriptions:

Limit znaków: pola account.invoice_description i department.invoice_description (ustawiane przez POST/PUT /account.json i POST/PUT /departments.json) są ograniczone do 256 znaków — odpowiadają limitowi Invoice.description w schemie KSeF (zob. KSeF.md — Ograniczenia długości pól). Próba zapisania dłuższej wartości zwróci 422 Unprocessable Entity z błędem is too long (maximum is 256 characters).

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -X POST \
	-H 'Accept:application/json' \
	-H 'Content-Type: application/json' \
	-d '{
	        "api_token": "API_TOKEN",
            "fill_default_descriptions":true,
            "invoice": {
                "kind":"vat",
                "seller_name": "Wystawca Sp. z o.o.",
                "seller_tax_no": "6272616681",
                "buyer_name": "Klient1 Sp. z o.o.",
                "positions":[
                    {"name":"towar", "quantity":1, "total_price_gross": 123}
                ]
            }
	 }'

Zaczytanie cen produktów z cennika podczas wystawiania faktury

Jeśli cena produktu na fakturze ma pochodzić z cennika (a nie karty produktu), w żądaniu dodatkowo należy podać use_prices_from_price_lists: true oraz price_list_id: ID_CENNIKA.

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -X POST \
	-H 'Accept:application/json' \
	-H 'Content-Type: application/json' \
	-d '{
	        "api_token": "API_TOKEN",
            "invoice": {
                "use_prices_from_price_lists": true,
                "price_list_id": ID_CENNIKA,
                "seller_name": "Wystawca Sp. z o.o.",
                "buyer_name": "Klient1 Sp. z o.o.",
                "positions":[
                    { "product_id": id_produktu, "quantity": 1}
                ]
            }
	 }'

Jeśli w żądaniu przesyłamy client_id, a w karcie tego klienta mamy określony domyślny cennik, wówczas wystarczy przesłać samo "use_prices_from_price_lists": true bez konieczności podawania dodatkowo price_list_id.

Pobranie faktury razem z połączonymi płatnościami

curl https://twojaDomena.fakturownia.pl/invoices/INVOICE_ID.json?api_token=API_TOKEN&additional_fields[invoice]=connected_payments

Odbiorcy/Wystawcy na fakturze

Dodawanie:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -X POST \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "issue_date": "2024-08-01",
            "seller_name": "Wystawca Sp. z o.o.",
            "buyer_name": "Klient1 Sp. z o.o.",
            "positions":[
                {"name":"Produkt A1", "tax":23, "total_price_gross":10.23, "quantity":1},
                {"name":"Produkt A2", "tax":0, "total_price_gross":50, "quantity":3}
            ],
            "recipients": [
                {"name": "Odbiorca1", "company": "true", "email": "odbiorca1@email.pl"},
                {"name": "Odbiorca2", "company": "true", "email": "odbiorca2@email.pl"},
            ],
            "issuers": [
                {"name": "Wystawca1", "company": "true", "email": "wystawca1@email.pl"},
                {"name": "Wystawca2", "company": "true", "email": "wystawca2@email.pl"},
            ]
        }
    }'

Edytowanie:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/111.json \
    -X PUT \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "recipients": [{"id":1, "name": "Nowa nazwa"}]
        }
    }'

Usuwanie:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/111.json \
    -X PUT \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "recipients": [{"id":1, "_destroy": 1}]
        }
    }'

Pola odbiorcy/wystawcy (recipient/issuer):

   "name": "Nazwa"
   "first_name": "Imię"
   "last_name": "Nazwisko"
   "tax_no": "1000000000"
   "company":  true/false - pole określa, czy dany podmiot jest firmą
   "country": "Kraj"
   "city": "Miasto"
   "post_code": "00-000"
   "street": "Ulica 1"
   "phone": "711000000"
   "email": "email@test.pl"
   "note": "Dodatkowe uwagi"
   "role": "Dodatkowy odbiorca" - pole określa rodzaj podmiotów; przy tworzeniu faktur, jeżeli nie podano, zostanie domyślnie użyta pierwsza z dozwolonych wartości -> "Odbiorca"/"Wystawca faktury" (używane tylko przy włączonym KSEF na koncie)
	Dozwolone wartości dla odbiorcy (recipient):
		"Odbiorca"
		"Dodatkowy nabywca"
		"Dokonujący płatności"
		"JST – odbiorca"
		"Członek GV – odbiorca"
        "Pracownik"
        "Rola inna"
	Dozwolone wartości dla wystawcy (issuer):
	   	"Wystawca faktury"
		"Faktor"
		"Podmiot pierwotny"
		"JST – wystawca"
		"Członek GV – wystawca"
        "Rola inna"
   "participation": 10.00 - pole określa udział podmiotu (używane tylko przy włączonym KSEF na koncie)
   "role_description": "Opis roli nie zdefiniowanej w KSeF" - max 25 znaków, należy podać tylko jeżeli w "role" wybrano "Rola inna" (używane tylko przy włączonym KSEF na koncie)

Uwagi na fakturze (descriptions)

Uwagi (descriptions) to nowy model przechowywania dodatkowych opisów na fakturze, wprowadzony w związku z wymaganiami KSeF. Każda uwaga to osobny rekord z polami kind (rodzaj/nagłówek) i content (treść). Faktura może posiadać wiele uwag jednocześnie.

Kompatybilność wsteczna: Pole description (dotychczasowe uwagi) nadal działa. Przy wysłaniu description bez descriptions system automatycznie skonwertuje treść na nowy format (utworzy jeden rekord descriptions z przesłaną treścią). Pole description w odpowiedzi API zwraca zawartość pierwszej uwagi (descriptions[0].content).

Pobieranie uwag

Aby pobrać uwagi przypisane do faktury, należy użyć parametru include=descriptions:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json?api_token=API_TOKEN

Przykładowa odpowiedź (fragment):

{
    "id": 123,
    "description": "Treść pierwszej uwagi",
    "descriptions": [
        {
            "id": 1,
            "kind": "Uwaga",
            "content": "Treść pierwszej uwagi",
            "position_index": null,
            "row_number": 1
        },
        {
            "id": 2,
            "kind": "Informacja dodatkowa",
            "content": "Treść drugiej uwagi",
            "position_index": 1,
            "row_number": 2
        }
    ]
}

Dodawanie uwag przy tworzeniu faktury

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -X POST \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "kind": "vat",
            "seller_name": "Wystawca Sp. z o.o.",
            "buyer_name": "Klient1 Sp. z o.o.",
            "positions": [
                {"name": "Produkt 1", "quantity": 1, "tax": 23, "total_price_gross": 123}
            ],
            "descriptions": [
                {"kind": "Uwaga 1", "content": "Treść pierwszej uwagi", "position_index": 1},
                {"kind": "Uwaga 2", "content": "Treść drugiej uwagi"}
            ]
        }
    }'

Aktualizacja uwag na fakturze

Aby zaktualizować istniejącą uwagę, należy podać jej id. Aby dodać nową uwagę do istniejącej faktury, wystarczy nie podawać id:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json \
    -X PUT \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "descriptions": [
                {"id": 1, "kind": "Zmieniony nagłówek", "content": "Zmieniona treść", "position_index": 1},
                {"kind": "Nowa uwaga", "content": "Treść nowej uwagi"}
            ]
        }
    }'

Usuwanie uwag z faktury

Aby usunąć uwagę, należy przekazać jej id z parametrem _destroy: 1:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json \
    -X PUT \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "descriptions": [
                {"id": 1, "_destroy": 1}
            ]
        }
    }'

Uwaga: Wysłanie uwag z pustymi polami kind i content (bez id) spowoduje, że zostaną one zignorowane. Jeśli uwaga z podanym id ma puste kind i content, zostanie automatycznie usunięta.

Pola uwagi (description)

   "id": 1 - identyfikator uwagi (wymagany przy aktualizacji i usuwaniu)
   "kind": "Uwaga" - rodzaj/nagłówek uwagi (string, max 256 znaków)
   "content": "Treść uwagi" - treść uwagi (text, max 65535 znaków)
   "position_index": 1 - opcjonalny numer pozycji faktury, której dotyczy uwaga (integer lub null)
   "row_number": 1 - numer porządkowy uwagi, nadawany automatycznie (integer)
   "_destroy": 1 - oznaczenie do usunięcia (tylko przy aktualizacji)

Walidacje

  • Pola kind i content nie mogą zawierać emoji — wysłanie emoji spowoduje błąd walidacji.
  • Pole kind ma maksymalną długość 256 znaków.
  • Białe znaki na początku i końcu pól kind oraz content są automatycznie usuwane (strip).
  • Jeśli nie podano wartości kind, zostanie ustawiona wartość domyślna "Uwaga".
  • Maksymalna liczba uwag na jednej fakturze: 10 000.

KSeF: Przy wysyłce do KSeF pole content jest dodatkowo ograniczone do 256 znaków (wymóg schemy — element DodatkowyOpis.Wartość). Dla kont bez aktywnego KSeF limit pozostaje na poziomie 65535 znaków. Szczegóły i pełna lista ograniczeń długości pól KSeF: KSeF.md — Ograniczenia długości pól.

Rozliczenia na fakturze (settlement_positions)

Rozliczenia to mechanizm dodawania obciążeń i odliczeń na fakturze, wpływających na kwotę do zapłaty. Każda pozycja rozliczenia to osobny rekord z polami kind (rodzaj: charge lub deduction), amount (kwota) i reason (powód). Funkcja dostępna dla kont z włączonym ustawieniem "Używaj rozliczeń" (use_settlements).

Pobieranie rozliczeń

Rozliczenia są automatycznie dołączane do odpowiedzi JSON faktury, gdy konto ma aktywne rozliczenia:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json?api_token=API_TOKEN

Przykładowa odpowiedź (fragment):

{
    "id": 123,
    "settlement_positions": [
        {
            "id": 1,
            "kind": "charge",
            "amount": "100.0",
            "reason": "Koszty transportu"
        },
        {
            "id": 2,
            "kind": "deduction",
            "amount": "50.0",
            "reason": "Rabat za wcześniejszą zapłatę"
        }
    ]
}

Uwaga: Klucz settlement_positions pojawia się w odpowiedzi JSON tylko dla faktur, które mają przypisane pozycje rozliczenia. Faktury bez rozliczeń nie zawierają tego klucza.

Dodawanie rozliczeń przy tworzeniu faktury

Rozliczenia dodajemy przez pole settlement_positions, podając kind (charge dla obciążenia, deduction dla odliczenia):

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -X POST \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "kind": "vat",
            "seller_name": "Wystawca Sp. z o.o.",
            "buyer_name": "Klient1 Sp. z o.o.",
            "positions": [
                {"name": "Produkt 1", "quantity": 1, "tax": 23, "total_price_gross": 123}
            ],
            "settlement_positions": [
                {"kind": "charge", "amount": "100.00", "reason": "Koszty transportu"},
                {"kind": "charge", "amount": "50.00", "reason": "Opłata manipulacyjna"},
                {"kind": "deduction", "amount": "30.00", "reason": "Rabat za wcześniejszą zapłatę"}
            ]
        }
    }'

Aktualizacja rozliczeń na fakturze

Aby zaktualizować istniejące rozliczenie, należy podać jego id. Aby dodać nowe rozliczenie, wystarczy nie podawać id:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json \
    -X PUT \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "settlement_positions": [
                {"id": 1, "amount": "150.00", "reason": "Zmienione koszty transportu"},
                {"kind": "deduction", "amount": "25.00", "reason": "Nowe odliczenie"}
            ]
        }
    }'

Usuwanie rozliczeń z faktury

Aby usunąć rozliczenie, należy przekazać jego id z parametrem _destroy: 1:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json \
    -X PUT \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "settlement_positions": [
                {"id": 1, "_destroy": 1}
            ]
        }
    }'

Pola pozycji rozliczenia (settlement_position)

"id": 1 - identyfikator pozycji rozliczenia (wymagany przy aktualizacji i usuwaniu)
"kind": "charge" - rodzaj: "charge" (obciążenie) lub "deduction" (odliczenie)
"amount": "100.00" - kwota rozliczenia (decimal)
"reason": "Powód" - powód/opis rozliczenia (string)
"_destroy": 1 - oznaczenie do usunięcia (tylko przy aktualizacji)

Walidacje

  • Pole kind jest wymagane — dozwolone wartości to "charge" (obciążenie) lub "deduction" (odliczenie).
  • Pole amount jest wymagane — wartość musi być większa od 0, maksymalnie 9 999 999.99, z dokładnością do 2 miejsc po przecinku.
  • Pole reason jest wymagane — maksymalna długość 256 znaków.
  • Maksymalna liczba pozycji: 100 per rodzaj (100 obciążeń + 100 odliczeń).

Wykluczenia

Rozliczenia nie działają na fakturach zaliczkowych (kind: "advance"). Przesłanie settlement_positions na fakturze zaliczkowej zostanie zignorowane.

Wpływ na kwotę do zapłaty

Obciążenia (charge) zwiększają kwotę do zapłaty, a odliczenia (deduction) ją zmniejszają:

kwota_do_zapłaty = price_gross + suma_obciążeń - suma_odliczeń

Warunki transakcji KSeF FA(3)

Warunki transakcji to zestaw pól faktury odpowiadający węzłowi WarunkiTransakcji ze struktury logicznej faktury ustrukturyzowanej KSeF (schema FA(3)). Obejmuje 4 pola skalarne oraz 3 listy (umowy, zamówienia, numery partii towaru).

Uwaga: Opcja „Używaj sekcji «Warunki transakcji» na fakturach" w ustawieniach konta steruje wyłącznie formularzem w aplikacji — API przyjmuje i zwraca te pola niezależnie od tego ustawienia.

Kompatybilność wsteczna: Dotychczasowe pole oid (numer zamówienia) działa bez zmian. Nowe pola skalarne i listy są dodatkowe — integracje, które ich nie wysyłają, działają jak dotychczas, a integracje, które ignorują nieznane klucze w odpowiedzi JSON, nie wymagają żadnych zmian. Migrację oid → zamówienia opisano w sekcji Kompatybilność wsteczna — pole oid.

Pola skalarne

Pola skalarne przekazuje się bezpośrednio w obiekcie invoice (jak np. number czy sell_date):

Pole Typ Opis
delivery_terms string (max 256) Warunki dostawy (WarunkiDostawy). Można podać kod Incoterms 2020 lub dowolny własny opis (patrz niżej).
agreed_exchange_rate decimal (> 0) Kurs umowny (KursUmowny) uzgodniony między stronami. Zapisywany z dokładnością do 6 miejsc po przecinku (nadmiarowe cyfry są zaokrąglane). Musi być podany razem z agreed_currency.
agreed_currency string (kod ISO 4217, wielkie litery) Waluta umowna (WalutaUmowna), np. EUR, USD. Nie może być PLN. Musi być podana razem z agreed_exchange_rate.
intermediary_entity boolean Podmiot pośredniczący (PodmiotPośredniczący) — dostawa dokonana przez podmiot, o którym mowa w art. 22 ust. 2d ustawy o VAT.

Kody Incoterms 2020 akceptowane w polu delivery_terms:

Kod Znaczenie
EXW EX Works (z zakładu)
FCA Free Carrier (dostarczone do przewoźnika)
CPT Carriage Paid To (przewóz opłacony do)
CIP Carriage and Insurance Paid To (przewóz i ubezpieczenie opłacone do)
DAP Delivered at Place (dostarczone do miejsca)
DPU Delivered at Place Unloaded (dostarczone do miejsca wyładowania)
DDP Delivered Duty Paid (dostarczone, cło opłacone)

Wartość spoza tej listy zostanie zapisana jako własny opis warunków dostawy. W odpowiedzi API zwracana jest dokładnie zapisana wartość (kod lub tekst — bez tłumaczenia na pełną nazwę).

Listy: umowy, zamówienia, numery partii towaru

Trzy niezależne listy, każda przekazywana jako tablica obiektów w polu invoice:

Klucz w API Węzeł KSeF Pola wiersza Limit wierszy
transaction_contracts Umowy contract_number, contract_date 100
transaction_orders Zamówienia order_number, order_date 100
transaction_batches Numery partii towaru batch_number 1000

Listy działają tak samo jak uwagi (descriptions) i rozliczenia (settlement_positions): wiersze bez id są tworzone, wiersze z id — aktualizowane, a wiersze z id i _destroy: 1 — usuwane. Pole row_number (numer porządkowy) jest nadawane automatycznie na podstawie kolejności w tablicy — nie trzeba go przesyłać.

Pobieranie warunków transakcji

Na kontach PL pola skalarne oraz 3 listy są automatycznie dołączane do odpowiedzi JSON faktury:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json?api_token=API_TOKEN

Przykładowa odpowiedź (fragment):

{
    "id": 123,
    "kind": "vat",
    "oid": "ZAM/182/2026",
    "delivery_terms": "DDP",
    "agreed_exchange_rate": "4.5",
    "agreed_currency": "EUR",
    "intermediary_entity": true,
    "transaction_contracts": [
        {"id": 1, "contract_number": "UM/001/2026", "contract_date": "2026-02-01", "row_number": 1}
    ],
    "transaction_orders": [
        {"id": 2, "order_number": "ZAM/182/2026", "order_date": "2026-02-15", "row_number": 1}
    ],
    "transaction_batches": [
        {"id": 3, "batch_number": "PART/2026/001", "row_number": 1},
        {"id": 4, "batch_number": "PART/2026/002", "row_number": 2}
    ]
}

Puste listy zwracane są jako [], a niewypełnione pola skalarne jako null. Kurs (agreed_exchange_rate) zwracany jest bez zer końcowych (np. 4.5, nie 4.500000).

Dodawanie warunków transakcji przy tworzeniu faktury

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -X POST \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "kind": "vat",
            "seller_name": "Wystawca Sp. z o.o.",
            "buyer_name": "Klient1 Sp. z o.o.",
            "positions": [
                {"name": "Produkt 1", "quantity": 1, "tax": 23, "total_price_gross": 4500}
            ],
            "delivery_terms": "DDP",
            "agreed_exchange_rate": "4.500000",
            "agreed_currency": "EUR",
            "intermediary_entity": true,
            "transaction_contracts": [
                {"contract_number": "UM/001/2026", "contract_date": "2026-02-01"}
            ],
            "transaction_orders": [
                {"order_number": "ZAM/182/2026", "order_date": "2026-02-15"},
                {"order_number": "ZAM/183/2026"}
            ],
            "transaction_batches": [
                {"batch_number": "PART/2026/001"},
                {"batch_number": "PART/2026/002"}
            ]
        }
    }'

Aktualizacja warunków transakcji

Aby zaktualizować istniejący wiersz listy, podaj jego id; aby dodać nowy — pomiń id. Pola skalarne aktualizuje się przez zwykłe podanie nowej wartości:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json \
    -X PUT \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "delivery_terms": "FCA",
            "transaction_orders": [
                {"id": 2, "order_number": "ZAM/182/2026-POPR", "order_date": "2026-02-20"},
                {"order_number": "ZAM/199/2026"}
            ]
        }
    }'

Usuwanie pozycji z list

Aby usunąć wiersz listy, przekaż jego id z parametrem _destroy: 1:

curl https://YOUR_DOMAIN.fakturownia.pl/invoices/INVOICE_ID.json \
    -X PUT \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "invoice": {
            "transaction_orders": [
                {"id": 2, "_destroy": 1}
            ]
        }
    }'

Aby wyczyścić pole skalarne, prześlij dla niego wartość pustą (null lub "").

Pola wierszy list

Umowa (transaction_contracts):
   "id": 1                          - identyfikator wiersza (wymagany przy aktualizacji i usuwaniu)
   "contract_number": "UM/001/2026" - numer umowy (string, max 256 znaków)
   "contract_date": "2026-02-01"    - data umowy (nie wcześniejsza niż 1990-01-01)
   "row_number": 1                  - numer porządkowy, nadawany automatycznie
   "_destroy": 1                    - oznaczenie do usunięcia (tylko przy aktualizacji)

Zamówienie (transaction_orders):
   "id": 2                          - identyfikator wiersza
   "order_number": "ZAM/182/2026"   - numer zamówienia (string, max 256 znaków)
   "order_date": "2026-02-15"       - data zamówienia (nie wcześniejsza niż 1990-01-01)
   "row_number": 1
   "_destroy": 1

Numer partii towaru (transaction_batches):
   "id": 3                          - identyfikator wiersza
   "batch_number": "PART/2026/001"  - numer partii (string, max 256 znaków, wymagany)
   "row_number": 1
   "_destroy": 1

Walidacje

  • delivery_terms — maksymalnie 256 znaków.
  • agreed_exchange_rate — wartość liczbowa większa od 0.
  • agreed_currency — kod waluty ISO 4217 zapisany wielkimi literami (np. EUR, USD); nie może być PLN (KSeF wymaga waluty obcej).
  • agreed_exchange_rate i agreed_currency muszą być podane razem — podanie tylko jednego z nich zwróci błąd walidacji.
  • Wiersz transaction_contracts — musi mieć wypełnione co najmniej jedno z: contract_number lub contract_date. Wiersz z obydwoma pustymi jest ignorowany.
  • Wiersz transaction_orders — musi mieć wypełnione co najmniej jedno z: order_number lub order_date. Wiersz z obydwoma pustymi jest ignorowany.
  • Wiersz transaction_batches — pole batch_number jest wymagane. Wiersz z pustym batch_number jest ignorowany.
  • contract_number / order_number / batch_number — maksymalnie 256 znaków.
  • contract_date / order_date — nie mogą być wcześniejsze niż 1990-01-01.
  • Limity liczby wierszy: umowy — 100, zamówienia — 100, numery partii — 1000.

Kompatybilność wsteczna — pole oid

Dotychczasowe pole oid (numer zamówienia, opis w sekcji Faktury) pozostaje w pełni funkcjonalne — zapis, odczyt i wyszukiwanie faktur po oid działają jak dotychczas.

Aby ułatwić migrację integracji, które przekazują numer zamówienia wyłącznie przez oid, wprowadzono jednokierunkowe przepisywanie oidtransaction_orders:

  • Działa tylko dla żądań API, gdy w ustawieniach konta włączona jest opcja „Czy przepisywać stary Nr zamówienia (oid) do węzła Ksef: WarunkiTransakcji::Zamówienia::NrZamówienia" (show_po_number).
  • Przepisanie następuje przy każdym zapisie faktury przez API (create/update), jeśli faktura ma wypełnione oid — także wtedy, gdy oid nie zostało przekazane w danym żądaniu (jest już zapisane na fakturze) — i nie istnieje jeszcze zamówienie o tym samym numerze. System dodaje wówczas jeden wiersz transaction_orders z order_number równym oid.
  • Mechanizm jest idempotentny — ponowne wysłanie tego samego oid nie zduplikuje zamówienia. Uwzględniane są także zamówienia usunięte: po skasowaniu wiersza przez _destroy ponowny zapis z tym samym oid nie utworzy go ponownie.
  • Przepisywanie działa wyłącznie w kierunku oidtransaction_orders. Dodanie lub zmiana zamówień na liście nie modyfikuje pola oid — pozostaje ono niezależnym polem „legacy".

Jeśli chcesz w pełni przejść na nowy węzeł, przekazuj dane bezpośrednio przez transaction_orders. Wyszukiwanie faktur po numerze zamówienia działa w obu przypadkach: gdy oid jest puste, wyszukiwarka używa numeru pierwszego zamówienia z listy transaction_orders.

Wydruk i korekty/duplikaty: Faktura posiadająca zamówienia w warunkach transakcji nie pokazuje już na wydruku osobnej linii „Numer zamówienia" z pola oid (dane zamówień są prezentowane w sekcji Warunki transakcji). Przy wystawianiu korekty lub duplikatu warunki transakcji są kopiowane z faktury źródłowej — zbędne wiersze można usunąć przez _destroy.

Link do podglądu faktury i pobieranie do PDF

Po pobraniu danych faktury np. przez:

curl https://twojaDomena.fakturownia.pl/invoices/100.json?api_token=API_TOKEN

API zwraca nam m.in. pole token na podstawie którego możemy otrzymać linki do podglądu faktury oraz do pobrania PDF-a z wygenrowaną fakturą. Linki takie umożliwiają odwołanie się do wybranej faktury bez konieczności logowania - czyli możemy np. te linki przesłać klientowi, który otrzyma dostęp do faktury i PDF-a.

Linki te są postaci:

podgląd: https://twojaDomena.fakturownia.pl/invoice/{{token}} pdf: https://twojaDomena.fakturownia.pl/invoice/{{token}}.pdf, https://twojaDomena.fakturownia.pl/invoice/{{token}}.pdf?inline=yes

Np dla tokenu równego: HBO3Npx2OzSW79RQL7XV2 publiczny PDF będzie pod adresem https://twojaDomena.fakturownia.pl/invoice/HBO3Npx2OzSW79RQL7XV2.pdf

Przykłady użycia w PHP - zakup szkolenia

TODO

Przykład flow Portalu, który generuje dla klienta fakturę Proformę, wysyła ją klientowi i po opłaceniu wysyła do klienta bilet na szkolenie

  • Klient wypełnia dane w Portalu
  • Portal wywołuje API z fakturownia.pl i tworzy fakturę
  • Portal wysyła Klientowi fakturę Proforma w PDF wraz z linkiem do płatności
  • Klient opłaca fakturę Proforma (np. na PayPal lub PayU.pl)
  • Fakturownia.pl otrzymuje informację, że płatność została wykonana, tworzy Fakturę VAT i wysyła ją Klientowi oraz wywołuje API Portalu
  • Po otrzymaniu informacji o płatności (przez API) Portal wysyła Klientowi bilet na Szkolenie

Faktury

  • GET /invoices/1.json pobranie faktury
  • POST /invoices.json dodanie nowej faktury
  • PUT /invoices/1.json aktualizacja faktury
  • DELETE /invoices/1.json skasowanie faktury

Przykład - dodanie nowej faktury (minimalna wersja, gdy mamy Id produktu, nabywcy i sprzedawcy wtedy nie musimy podawać pełnych danych). Zostanie wystawiona Faktura VAT z aktualnym dniem i z 5 dniowym terminem płatności. Pole department_id określa firmę (lub dział) który wystawia fakturę (można go uzyskać klikając na firmę w menu Ustawienia > Dane firmy)

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{"api_token": "API_TOKEN",
        "invoice": {
            "payment_to_kind": 5,
            "client_id": 1,
            "positions":[
                {"product_id": 1, "quantity":2}
            ]
        }}'

Pola faktury

"number" : "13/2012", - numer faktury (jeśli nie będzie podany wygeneruje się automatycznie)
"kind" : "vat", - rodzaj faktury (vat, proforma, bill, receipt, advance, correction, vat_mp, invoice_other, vat_margin, kp, kw, final, estimate)
"income" : "1", - faktura przychodowa (1) lub kosztowa (0)
"issue_date" : "2013-01-16", - data wystawienia
"place" : "Warszawa", - miejsce wystawienia
"sell_date" : "2013-01-16", - data sprzedaży (może być data lub miesiąc postaci 2012-12)
"category_id" : "", - id kategorii
"department_id" : "1", - id działu firmy (w menu Ustawienia > Dane firmy należy kliknąć na firmę/dział i ID działu pojawi się w URL); Jeśli nie będzie tego pola oraz nie będzie pola 'seller_name' wtedy będą wstawione domyślne dane Twojej firmy
"accounting_kind": "", - rodzaj wydatku dla faktur kosztowych - (purchases, expenses, media, salary, incident, fuel0, fuel_expl75, fuel_expl100, fixed_assets, fixed_assets50, no_vat_deduction)
"seller_name" : "Radgost Sp. z o.o.", - sprzedawca
"seller_tax_no" : "525-244-57-67", - numer identyfikacji podatkowej sprzedawcy (domyślnie NIP)
"seller_tax_no_kind" : "", - rodzaj numeru identyfikacyjnego sprzedawcy; pole puste (domyślnie) jest interpretowane jako "NIP"; w innym wypadku traktowane jako dowolny wpis własny (np. PESEL, REGON); po wejściu KSeF jedynymi dopuszczalnymi wartościami (oprócz pustego pola) będą: "nip_ue" (NIP UE), "other" (Numer identyfikacji podatkowej), "empty" (Brak nr. id. podatkowej)
"seller_bank_account" : "24 1140 1977 0000 5921 7200 1001", - konto bankowe sprzedawcy
"seller_bank" : "BRE Bank",
"seller_post_code" : "02-548",
"seller_city" : "Warszawa",
"seller_street" : "ul. Olesińska 21",
"seller_country" : "", - kraj sprzedawcy (ISO 3166)
"seller_email" : "platnosci@radgost123.com",
"seller_www" : "",
"seller_fax" : "",
"seller_phone" : "",
"seller_bdo_no": "1234567899", - numer BDO
"seller_jst": "0", Czy faktura dotyczy jednostki samorządu terytorialnego? (tylko wydatki)
"seller_gv": "0", Czy faktura dotyczy członka grupy VAT? (tylko wydatki)
"use_invoice_issuer": "1",
"invoice_issuer": "Dane Wystawcy",
"client_id" : "-1" - id kupującego (jeśi -1 to klient zostanie utworzony w systemie)
"buyer_name" : "Nazwa klienta" - nabywca
"buyer_tax_no" : "525-244-57-67", - numer identyfikacji podatkowej nabywcy (domyślnie NIP)
"buyer_tax_no_kind" : "", - rodzaj numeru identyfikacyjnego nabywcy; pole puste (domyślnie) jest interpretowane jako "NIP"; w innym wypadku traktowane jako wpis własny (np. PESEL, REGON); po wejściu KSeF jedynymi dopuszczalnymi wartościami (oprócz pustego pola) będą: "nip_ue" (NIP UE), "other" (Numer identyfikacji podatkowej), "empty" (Brak nr. id. podatkowej)
"disable_tax_no_validation" : "",
"buyer_post_code" : "30-314", - kod pocztowy nabywcy
"buyer_city" : "Warszawa", - miasto nabywcy
"buyer_street" : "Nowa 44", - ulica nabywcy
"buyer_country" : "PL", - kraj nabywcy (ISO 3166)
"buyer_note" : "", - dodatkowy opis nabywcy
"buyer_email" : "", - email nabywcy
"buyer_jst": "1", Czy faktura dotyczy jednostki samorządu terytorialnego? (tylko przychody)
"buyer_gv": "1", Czy faktura dotyczy członka grupy VAT? (tylko przychody)
"recipient_id" : "", - id odbiorcy (id klienta z systemu)
"recipient_name" : "", - nazwa odbiorcy
"recipient_street" : "", - ulica odbiorcy
"recipient_post_code" : "", - kod pocztowy odbiorcy
"recipient_city" : "", - miasto odbiorcy
"recipient_country" : "", - kraj odbiorcy (ISO 3166)
"recipient_email" : "", - e-mail odbiorcy
"recipient_phone" : "", - numer telefonu odbiorcy
"recipient_note" : "", - dodatkowy opis odbiorcy
"additional_info" : "0" - czy wyświetlać dodatkowe pole na pozycjach faktury
"additional_info_desc" : "PKWiU" - nazwa dodatkowej kolumny na pozycjach faktury
"show_discount" : "0" - czy rabat
"payment_type" : "transfer",
"payment_to_kind" : pozwala określić termin płatności. Można tu podać liczbę np.: 5, wówczas mamy 5-dniowy termin płatności. Wpisanie "off" spowoduje, że faktura nie będzie miała wskazanego terminu płatności. Jeśli natomiast podamy "other_date", wówczas sami będziemy mogli zadeklarować ostateczną datę zapłaty poprzez uzupełnienie parametru "payment_to".
"payment_to" : "2013-01-16",
"status" : "issued",
"paid" : "0,00",
"oid" : "zamowienie10021", - numer zamówienia (np z zewnętrznego systemu zamówień)
"oid_unique" : jeśli to pole będzie ustawione na 'yes' wtedy nie system nie pozwoli stworzyc 2 faktur o takim samym OID (może to być przydatne w synchronizacji ze sklepem internetowym)
"warehouse_id" : "1090",
"seller_person" : imię i nazwisko wystawcy np.: "Imię Nazwisko",
"buyer_person": imię i nazwisko odbiorcy np.: "Imię Nazwisko". Jeśli pole "buyer_person" nie zostanie przesłane, będzie ono uzupełnione automatycznie danymi nabywcy ("buyer_first_name" i "buyer_last_name"). Jeśli jednak nie chcemy mieć podpisu odbiorcy na fakturze, możemy w żądaniu przesłać "buyer_person": "".
"buyer_first_name" : "Imie",
"buyer_last_name" : "Nazwisko",
"paid_date" : "",
"currency" : "PLN",
"lang" : "pl",
"use_oss" (wcześniej "use_moss"): "1", - 1 lub 0 w zależności, czy dokument ma zostać  sklasyfikowany jako sprzedaż "OSS" (dowiedz się więcej tutaj: https://fakturownia.pl/oss-zamiast-moss-czy-ciebie-takze-dotkna-zmiany-w-prawie).
"exchange_currency" : "", - przeliczona waluta (przeliczanie sumy i podatku na inną walutę), np. "PLN"
"exchange_kind" : "", - źródło kursu do przeliczenia waluty ("ecb", "nbp", "cbr", "nbu", "nbg", "own")
"exchange_currency_rate" : "", - własny kurs przeliczenia waluty (używany, gdy parametr exchange_kind ustawiony jest na "own")
"exchange_note": "", - notatka do kursu, generowana automatycznie dla kursów innych niż "own", dla "own" należy podać własną notatkę
"invoice_template_id" : "1",
"description" : "", - uwagi na fakturze
"description_footer" : "", - opis umieszczony w stopce faktury
"description_long" : "", - opis umieszczony na odwrocie faktury
"invoice_id" : "" - pole z id powiązanego dokumentu, np. id zamówienia przy zaliczce albo id wzorcowej faktury przy fakturze cyklicznej,
"from_invoice_id" : "" - id faktury na podstawie której faktura została wygenerowana (przydatne np. w przypadku generacji Faktura VAT z Faktury Proforma),
"delivery_date" : "" - data wpłynięcia dokumentu (tylko przy wydatkach),
"buyer_company" : "1" - czy klient jest firmą
"additional_invoice_field" : "" - wartość dodatkowego pola na fakturze, Ustawienia > Ustawienia Konta > Konfiguracja > Faktury i dokumenty > Dodatkowe pole na fakturze
"internal_note" : "" - treść notatki prywatnej na fakturze, niewidoczna na wydruku.
"exclude_from_stock_level" : "" - informacja, czy system powinien liczyć tę fakturę do stanów magazynowych (true np., gdy faktura wystawiona na podstawie paragonu)
"procedure_designations" : [] - oznaczenia dotyczące procedur
"positions":
        "product_id" : "1",
        "name" : "Fakturownia Start",
        "additional_info" : "", - dodatkowa informacja na pozycji faktury (np. PKWiU)
        "discount_percent" : "", - zniżka procentowa (uwaga: aby rabat był wyliczany trzeba ustawić pole: 'show_discount' na '1' oraz przed wywołaniem należy sprawdzić czy w Ustawieniach Konta pole: "Jak obliczać rabat" ustawione jest na "procentowo")
        "discount" : "", - zniżka kwotowa (uwaga: aby rabat był wyliczany trzeba ustawić pole: 'show_discount' na 1 oraz przed wywołaniem należy sprawdzić czy w Ustawieniach Konta pole: "Jak obliczać rabat" ustawione jest na "kwotowo")
        "quantity" : "1",
        "quantity_unit" : "szt",
        "price_net" : "59,00", - jeśli nie jest podana to zostanie wyliczona
        "tax" : "23", - może być stawka lub "np" - dla nie podlega, "zw" - dla zwolniona
        "price_gross" : "72,57", - jeśli nie jest podana to zostanie wyliczona
        "total_price_net" : "59,00", - jeśli nie jest podana to zostanie wyliczona
        "total_price_gross" : "72,57",
        "description" : opis pozycji faktury
        "code" : "" - kod produktu,
        "gtu_code" : "" - kod GTU produktu,
        "lump_sum_tax" : "17", - stawka ryczałtu (możliwa do ustawienia jedynie, gdy wystawiamy fakturę dla działu lub firmy z włączoną opcją "Płatnik zryczałtowanego podatku dochodowego")
"calculating_strategy":
{
  "position": "default" lub "keep_gross" - metoda wyliczania kwot na pozycjach faktury
  "sum": "sum" lub "keep_gross" lub "keep_net" - metoda sumowania kwot z pozycji
  "invoice_form_price_kind": "net" lub "gross" - cena jednostkowa na formatce faktury
},
"split_payment" : "1" - 1 lub 0 w zależności, czy faktura podlega pod split payment, czy nie
"accounting_vat_tax_date": "2020-12-18", Data księgowania podatku VAT (jeśli włączono w ustawieniach)
"accounting_income_tax_date": "2020-12-18", Data księgowania podatku dochodowego (jeśli włączono w ustawieniach)
"skonto_active": "1" - 1 lub 0 w zależności, czy faktura skonto ma być aktywne, czy nie
"skonto_discount_date": "2021-08-13", Termin płatności dla skonta
"skonto_discount_value": "10", Procent upustu
"exempt_tax_kind": "", Podstawa zwolnienia z podatku VAT (stosowana, gdy pozycja ma tax="zw", wcześniej należy również włączyć opcję "Wybór podstawy zastosowania stawki zw (zwolnione z opodatkowania) na fakturze" w ustawieniach konta)
"np_tax_kind": "", Podstawa zastosowania stawki NP (nie podlega) na fakturze
"reverse_charge": false, Odwrotne obciążenie. Oznaczenie faktury jako 'Odwrotne obciążenie' spowoduje wymuszenie na pozycjach (positions) odpowiedniej stawki podatku (tax) w zależności od kraju nabywcy (buyer_country): 'oo' dla 'PL' lub 'np' w pozostałych przypadkach
"triangular_transaction": false, Wewnątrzwspólnotowa transakcja trójstronna uproszczona (pole P_23 w KSeF; więcej informacji w KSeF.md)
"corrected_content_before": "", Treść korygowana (pole ma zastosowanie dla faktur korygujących)
"corrected_content_after": "", Treść prawidłowa (pole ma zastosowanie dla faktur korygujących)
"accounting_note_kind": "credit" lub "debit", w zależności, czy Nota księgowa jest obciążąjąca czy uznaniowa (pole ma zastosowanie tylko dla not księgowych)
"procedure_vat_margin": pole wymagane dla faktur Marża, przyjmuje jedną z 4 wartości:
	"procedura marży dla biur podróży"
	"procedura marży – towary używane"
	"procedura marży – dzieła sztuki"
    "procedura marży – przedmioty kolekcjonerskie i antyki"

Wartości pól

Pole: kind

	"vat" - faktura VAT
	"proforma" - faktura Proforma
	"bill" - rachunek
	"receipt" - paragon
	"advance" - faktura zaliczkowa
	"final" - faktura końcowa
	"correction" - faktura korekta
	"invoice_other" - inna faktura
	"vat_margin" - faktura marża
	"kp" - kasa przyjmie
	"kw" - kasa wyda
	"estimate" - zamówienie
	"vat_mp" - faktura MP
	"vat_rr" - faktura RR
	"correction_note" - nota korygująca
	"accounting_note" - nota księgowa
	"client_order" - własny dokument nieksięgowy
	"dw" - dowód wewnętrzny
	"wnt" - Wewnątrzwspólnotowe Nabycie Towarów
	"wdt" - Wewnątrzwspólnotowa Dostawa Towarów
	"import_service" - import usług
	"import_service_eu" - import usług z UE
	"import_products" - import towarów - procedura uproszczona
	"export_products" - eksport towarów

Pole: lang

	"pl" - faktura w języku polskim
	"en" - język angielski
	"en-GB" - język angielski UK
	"de" - język niemiecki
	"fr" - język francuski
	"cz" - język czeski
	"ru" - język rosyjski
	"es" - język hiszpański
	"it" - język włoski
	"nl" - język niderlandzki
	"hr" - język chorwacki
	"ar" - język arabski
	"sk" - język słowacki
	"sl" - język słoweński
	"el" - język grecki
	"et" - język estoński
	"cn" - język chiński
	"hu" - język węgierski
	"tr" - język turecki
	"fa" - język perski

	można tworzyć faktury dwujęzyczne łącząc symbole dwóch języków przy pomocy ukośnika, np:
	"pl/en" - język polski i angielski

Pole: income

	"1" - fakura przychodwa
	"0" - faktura kosztowa

Pole: accounting_kind

  "purchases" - Zakup towarów i materiałów
  "expenses" - Koszty prowadzenia działalności
  "media" - Media i usługi telekomunikacyjne
  "salary" - Wynagrodzenia
  "incident" - Koszty uboczne zakupu
  "fuel0" - Zakup paliwa do pojazdów 0%
  "fuel_expl75" - Zakup paliwa i eksploatacja pojazdu 75%
  "fuel_expl100" - Zakup paliwa i eksploatacja pojazdu 100%
  "fixed_assets" - Środki trwałe
  "fixed_assets50" - Środki trwałe 50%
  "no_vat_deduction" - Bez możliwości odliczenia podatku VAT

Pole: payment_type

	"transfer" - przelew
	"card" - karta płatnicza
	"cash" -  gotówka
	"barter" - barter
	"cheque" - czek
	"bill_of_exchange" - weksel
	"cash_on_delivery" - opłata za pobraniem
	"compensation" - kompensata
	"letter_of_credit" - akredytywa
	"payu" - PayU
	"paypal" - PayPal
	"off" - "nie wyświetlaj"
	"dowolny_inny_wpis_tekstowy"

Pole: status

	"issued" - wystawiona
	"sent" - wysłana
	"paid" - opłacona
	"partial" - częściowo opłacona
	"rejected" - odrzucona

Pole: discount_kind - rodzaj rabatu

	"percent_unit" - liczony od ceny jednostkowej netto
    "percent_unit_gross" - liczony od ceny jednostkowej brutto
	"percent_total" - liczony od ceny całkowitej
	"amount" - kwotowy

Pole: np_tax_kind - podstawa zastosowania stawki NP

Uwaga! Dla każdej pozycji, która nie podlega opodatkowaniu VAT należy podać jako stawkę podatku jeden z wariantów stawki "np" (przykład: "tax": "na").

Warianty stawki "np" rozpoznawane przez system: "np", "n/a", "nie podlega", "not applicable", "na" - lub ich wersje pisane z wielkich liter.

    "export_service" - dostawa towarów oraz świadczenie usług poza terytorium kraju
    "export_service_eu" - w tym świadczenie usług, o których mowa w art.100 ust.1 pkt 4 ustawy
    "not_specified" - nie określono

Wraz z wyborem export_service_eu, zgodnie z przepisami, należy również oznaczyć fakturę jako 'Odwrotne obciążenie' ("reverse_charge": true).

Pole: procedure_designations - oznaczenia dotyczące procedur

  "SW" - Dostawa w ramach sprzedaży wysyłkowej z terytorium kraju, o której mowa w art. 23 ustawy,
  "EE" - Świadczenie usług telekomunikacyjnych, nadawczych i elektronicznych, o których mowa w art. 28k ustawy,
  "TP" - Istniejące powiązania między nabywcą a dokonującym dostawy towarów lub usługodawcą, o których mowa w art. 32 ust. 2 pkt 1 ustawy,
  "TT_WNT" - Wewnątrzwspólnotowe nabycie towarów dokonane przez drugiego w kolejności podatnika VAT w ramach transakcji trójstronnej w procedurze uproszczonej, o której mowa w dziale XII rozdziale 8 ustawy,
  "TT_D" - Dostawa towarów poza terytorium kraju dokonana przez drugiego w kolejności podatnika VAT w ramach transakcji trójstronnej w procedurze uproszczonej, o której mowa w dziale XII rozdziale 8 ustawy,
  "MR_T" - Świadczenie usług turystyki opodatkowane na zasadach marży zgodnie z art. 119 ustawy,
  "MR_UZ" - Dostawa towarów używanych, dzieł sztuki, przedmiotów kolekcjonerskich i antyków, opodatkowana na zasadach marży zgodnie z art. 120 ustawy,
  "I_42" - Wewnątrzwspólnotowa dostawa towarów następująca po imporcie tych towarów w ramach procedury celnej 42 (import),
  "I_63" - Wewnątrzwspólnotowa dostawa towarów następująca po imporcie tych towarów w ramach procedury celnej 63 (import),
  "B_SPV" - Transfer bonu jednego przeznaczenia dokonany przez podatnika działającego we własnym imieniu, opodatkowany zgodnie z art. 8a ust. 1 ustawy,
  "B_SPV_DOSTAWA" - Dostawa towarów oraz świadczenie usług, których dotyczy bon jednego przeznaczenia na rzecz podatnika, który wyemitował bon zgodnie z art. 8a ust. 4 ustawy,
  "B_MPV_PROWIZJA" - Świadczenie usług pośrednictwa oraz innych usług dotyczących transferu bonu różnego przeznaczenia, opodatkowane zgodnie z art. 8b ust. 2 ustawy,
  "MPP" - Transakcja objęta obowiązkiem stosowania mechanizmu podzielonej płatności

Faktury - kody GTU

Więcej informacji o kodach GTU można znaleźć na naszej stronie pomocy: https://pomoc.fakturownia.pl/78131182-Kody-GTU-grupowanie-towarow-i-uslug Jeśli podczas tworzenia nowej faktury chcemy umieścic na niej kody GTU, możemy to zrobić na kilka sposobów.

  • Automatyczne pobieranie kodów z produktów istniejących - jeśli dodajemy pozycję na fakturze korzystając z ID produktu, które już ma zapisany kod GTU w systemie, wtedy nowa faktura automatycznie pobierze kody GTU wszystkich produktów i wyświetli je na wydruku (jeśli tylko jest włączona opcja zamieszczenia kodów na wydruku faktury)

  • Podanie kodów wraz z pozycjami na fakturze - możemy podać kod GTU bezpośrednio dla każdej pozycji na fakturze korzystając z pola gtu_code

curl https://YOUR_DOMAIN.fakturownia.pl/invoices.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{"api_token": "API_TOKEN",
        "invoice": {
            "payment_to_kind": 5,
            "client_id": 1,
            "positions":[
                {"name":"Produkt A1", "tax":23, "total_price_gross":10.23, "quantity":1, "gtu_code": "GTU_01"},
                {"name":"Produkt A2", "tax":0, "total_price_gross":50, "quantity":3,  "gtu_code": "GTU_04"}
            ]
        }}'

Pole: gtu_codes - typy kodów GTU

Dla produktów:
"GTU_01" - Dostawa napojów alkoholowych - alkoholu etylowego, piwa, wina, napojów fermentowanych i wyrobów pośrednich, w rozumieniu przepisów o podatku akcyzowym
"GTU_02" - Dostawa towarów, o których mowa w art. 103 ust. 5aa ustawy
"GTU_03" - Dostawa oleju opałowego w rozumieniu przepisów o podatku akcyzowym oraz olejów smarowych, pozostałych olejów o kodach CN od 2710 19 71 do 2710 19 99, z wyłączeniem wyrobów o kodzie CN 2710 19 85 (oleje białe, parafina ciekła) oraz smarów plastycznych zaliczanych do kodu CN 2710 19 99, olejów smarowych o kodzie CN 2710 20 90, preparatów smarowych objętych pozycją CN 3403, z wyłączeniem smarów plastycznych objętych tą pozycją
"GTU_04" - Dostawa wyrobów tytoniowych, suszu tytoniowego, płynu do papierosów elektronicznych i wyrobów nowatorskich, w rozumieniu przepisów o podatku akcyzowym
"GTU_05" - Dostawa odpadów - wyłącznie określonych w poz. 79-91 załącznika nr 15 do ustawy
"GTU_06" - Dostawa urządzeń elektronicznych oraz części i materiałów do nich, wyłącznie określonych w poz. 7-9, 59-63, 65, 66, 69 i 94-96 załącznika nr 15 do ustawy
"GTU_07" - Dostawa pojazdów oraz części samochodowych o kodach wyłącznie CN 8701 - 8708 oraz CN 8708 10
"GTU_08" - Dostawa metali szlachetnych oraz nieszlachetnych - wyłącznie określonych w poz. 1-3 załącznika nr 12 do ustawy oraz w poz. 12-25, 33-40, 45, 46, 56 i 78 załącznika nr 15 do ustawy
"GTU_09" - Dostawa leków oraz wyrobów medycznych - produktów leczniczych, środków spożywczych specjalnego przeznaczenia żywieniowego oraz wyrobów medycznych, objętych obowiązkiem zgłoszenia, o którym mowa w art. 37av ust. 1 ustawy z dnia 6 września 2001 r. - Prawo farmaceutyczne (Dz. U. z 2019 r. poz. 499, z późn. zm.)
"GTU_10" - Dostawa budynków, budowli i gruntów

Dla usług:
"GTU_11" - Świadczenie usług w zakresie przenoszenia uprawnień do emisji gazów cieplarnianych, o których mowa w ustawie z dnia 12 czerwca 2015 r. o systemie handlu uprawnieniami do emisji gazów cieplarnianych (Dz. U. z 2018 r. poz. 1201 i 2538 oraz z 2019 r. poz. 730, 1501 i 1532)
"GTU_12" - Świadczenie usług o charakterze niematerialnym - wyłącznie: doradczych, księgowych, prawnych, zarządczych, szkoleniowych, marketingowych, firm centralnych (head offices), reklamowych, badania rynku i opinii publicznej, w zakresie badań naukowych i prac rozwojowych
"GTU_13" - Świadczenie usług transportowych i gospodarki magazynowej - Sekcja H PKWiU 2015 symbol ex 49.4, ex 52.1

Klienci

Lista klientów

curl "https://YOUR_DOMAIN.fakturownia.pl/clients.json?api_token=API_TOKEN&page=1"

Wyszukiwanie klientów po nazwie, mailu, nazwie skróconej lub numerze NIP

curl "https://YOUR_DOMAIN.fakturownia.pl/clients.json?api_token=API_TOKEN&name=CLIENT_NAME"
curl "https://YOUR_DOMAIN.fakturownia.pl/clients.json?api_token=API_TOKEN&email=EMAIL_ADDRESS"
curl "https://YOUR_DOMAIN.fakturownia.pl/clients.json?api_token=API_TOKEN&shortcut=SHORT_NAME"
curl "https://YOUR_DOMAIN.fakturownia.pl/clients.json?api_token=API_TOKEN&tax_no=TAX_NO"

Pobranie wybranego klienta po ID

curl "https://YOUR_DOMAIN.fakturownia.pl/clients/100.json?api_token=API_TOKEN"

Pobranie wybranego klienta po zewnętrznym ID

curl "https://YOUR_DOMAIN.fakturownia.pl/clients.json?external_id=100&api_token=API_TOKEN"

Dodanie klienta

curl https://YOUR_DOMAIN.fakturownia.pl/clients.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{"api_token": "API_TOKEN",
        "client": {
            "name": "Klient1",
            "tax_no": "6272616681",
            "bank" : "bank1",
            "bank_account" : "bank_account1",
            "city" : "city1",
            "country" : "",
            "email" : "email@gmail.com",
            "person" : "person1",
            "post_code" : "post-code1",
            "phone" : "phone1",
            "street" : "street1"
        }}'

Tylko parametr "name" jest obowiązkowy. Domyślnie każdy nowy klient ma status firmy ("company": true). Aby utworzyć klienta ze wskazaniem, że jest to osoba prywatna należy przesłać parametr company (o wartości „false”) oraz parametr last_name (nazwisko):

curl https://YOUR_DOMAIN.fakturownia.pl/clients.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{"api_token": "API_TOKEN",
        "client": {
            "last_name": "LAST_NAME",
            "company": false
        }}'

Pola klienta

    "name": "Klient testowy" - nazwa klienta
    "shortcut": "Klient" - skrócona nazwa klienta
    "tax_no_kind": "NIP" - rodzaj numeru identyfikacyjnego np.: "NIP", "PESEL" itd.; po wejściu KSeF jedynymi dopuszczalnymi wartościami (oprócz pustego pola) będą: "nip_ue" (NIP UE), "other" (Numer identyfikacji podatkowej), "empty" (Brak nr. id. podatkowej)
    "tax_no": "1234567890" - numer identyfikacyjny
    "register_number": "123456789" - numer REGON
    "accounting_id": "" - identyfikator w programie księgowym
    "post_code": "00-100" - kod pocztowy
    "city": "Warszawa" - miasto
    "street": "Długa 1" - ulica
    "country": "PL" - kraj nabywcy (ISO 3166)
    "use_delivery_address": "1" lub "0", jeśli "1" wówczas można podać inny adres korespondencyjny w parametrze "delivery_address"
    "delivery_address": "" - inny adres korespondencyjny
    "first_name": "" - imię
    "last_name": "" - nazwisko
    "email": "" - email
    "phone": "" - telefon
    "mobile_phone": "" - telefon komórkowy
    "www": "" - strona www
    "fax": "" - fax
    "note": "" - dodatkowy opis klienta
    "tag_list": ["tag1", "tag2"] - lista tagów
    "company": "1" lub "0" (domyślna wartość tego parametru to "1"), użyj "1" - gdy klient jest firmą lub "0" - gdy klient jest osobą prywatną
    "kind": rodzaj klienta, możliwe opcje do wyboru:
        "buyer" - kupujący
        "seller" - sprzedający
        "both" - kupujący lub sprzedający
    "category_id": "" - id kategorii,
    "bank": "" - nazwa banku,
    "bank_account": "" - numer rachunku bankowego,
    "discount": "10" - domyślny rabat wyrażony w procentach, podajemy tylko liczbę np.: 15, oznacza to 15% rabatu
    "default_tax": "23" - domyślny podatek, podajemy wartość liczbową np.: 23
    "price_list_id": "" - domyślny cennik, podajemy id cennika
    "payment_to_kind": domyślny termin płatności, możliwe opcje do wyboru:
        liczba całkowita np.: "30" - co oznacza 30-dniowy termin płatności
        "0" - natychmiast
        "off" - nie wyświetlaj
        dowolna data np.: "2022-12-31"
    "default_payment_type": domyślny rodzaj płatności, możliwe opcje do wyboru:
        "transfer" - przelew
        "card" - karta płatnicza
        "cash" -  gotówka
        "barter" - barter
        "cheque" - czek
        "bill_of_exchange" - weksel
        "cash_on_delivery" - opłata za pobraniem
        "compensation" - kompensata
        "letter_of_credit" - akredytywa
        "payu" - PayU
        "paypal" - PayPal
        "off" - "nie wyświetlaj"
        "dowolny_inny_wpis_tekstowy"
    "disable_auto_reminders": "1" lub "0" - nie wysyłaj automatycznych przypomnień (domyślnie "0")
    "person": "Imię Nazwisko" - osoba przyjmująca fakturę
    "buyer_id": "" - powiązany nabywca, należy podać jego id
    "mass_payment_code": "" - indywidualne konto bankowe (lub końcówka konta)
    "external_id": "" - id klienta,
    "tp_client_connection": "1" lub "0"  - powiązania pomiędzy podmiotami (automatyczne dodanie kodu TP do dokumentu) (domyślnie "0")

Aktualizacja klienta

curl https://YOUR_DOMAIN.fakturownia.pl/clients/111.json \
    -X PUT \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json'  \
    -d '{"api_token": "API_TOKEN",
        "client": {
            "name": "Klient2",
            "tax_no": "62726166812",
            "bank" : "bank2",
            "bank_account" : "bank_account2",
            "city" : "city2",
            "country" : "PL",
            "email" : "email@gmail.com",
            "person" : "person2",
            "post_code" : "post-code2",
            "phone" : "phone2",
            "street" : "street2"
        }}'

Usunięcie klienta

curl -X DELETE "https://YOUR_DOMAIN.fakturownia.pl/clients/CLIENT_ID.json?api_token=API_TOKEN"

Produkty

Lista produktów

curl "https://YOUR_DOMAIN.fakturownia.pl/products.json?api_token=API_TOKEN&page=1"

Lista dodanych/zmienionych produktów (np. dostępna ilość, nazwa, cena) po wskazanej dacie np. 2025-11-01

curl "https://YOUR_DOMAIN.fakturownia.pl/products.json?api_token=API_TOKEN&date_from=DATA&page=1"

Lista produktów ze stanem magazynowym podanego magazynu

curl "https://YOUR_DOMAIN.fakturownia.pl/products.json?api_token=API_TOKEN&warehouse_id=WAREHOUSE_ID&page=1"

Pobranie wybranego produktu po ID

curl "https://YOUR_DOMAIN.fakturownia.pl/products/100.json?api_token=API_TOKEN"

Pobranie wybranego produktu po ID ze stanem magazynowym podanego magazynu

curl "https://YOUR_DOMAIN.fakturownia.pl/products/100.json?api_token=API_TOKEN&warehouse_id=WAREHOUSE_ID"

Dodanie produktu

curl https://YOUR_DOMAIN.fakturownia.pl/products.json \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json'  \
    -d '{"api_token": "API_TOKEN",
        "product": {
            "name": "PoroductAA",
            "code": "A001",
            "price_net": "100",
            "tax": "23"
        }}'

Dodanie produktu, który jest zestawem

curl https://YOUR_DOMAIN.fakturownia.pl/products.json \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json'  \
    -d '{"api_token": "API_TOKEN",
        "product": {
            "name": "zestaw",
            "price_net": "100",
            "tax": "23",
            "service": "true",
            "package": "true",
            "package_products_details": {
                "0": {
                    "quantity": 1,
                    "id": PRODUCT_ID
                },
                "1": {
                    "quantity": 1,
                    "id": PRODUCT_ID
                },
                "2": {
                    "quantity": 1,
                    "id": PRODUCT_ID
                }
            },
        }}'

Pola produktu

    "name": "Produkt testowy" - nazwa
    "code": "PT35610" - kod produktu
    "ean_code": "5901296385074"- kod EAN
    "description": "Opis produktu" - opis
    "price_net": "100" - cenna netto
    "tax": "23" - podatek VAT może być wyrażony jako konkretna stawka np.: "5", "17" lub:
        "np" - nie podlega
        "zw" - zwolniony
        "disabled" - nie wyświetlaj
    "price_gross": "123" - cenna brutto
    "currency": "PLN" - waluta
    "category_id": "" - id kategorii
    "tag_list": ["tag1", "tag2"] - lista tagów
    "service": "1" lub "0" - czy produkt jest usługą
    "electronic_service": "1" lub "0" - czy produkt jest usługą elektroniczną
    "gtu_codes": ["GTU_01"] - kod GTU
    "limited": "1" lub "0" - ograniczenie ilościowe (magazynowe)
    "stock_level": "9.0" - dostępna ilość
    "purchase_price_net": "10" - cena zakupu netto
    "purchase_tax": "23" - podatek VAT
    "purchase_price_gross": "12.30" - cena zakupu brutto
    "package": "1" lub "0" - czy jest zestawem
    "quantity_unit": "szt" - jednostka
    "quantity": "1.0" - domyślnie sprzedawana ilość
    "additional_info": "" - PKWiU
    "supplier_code": "" - kod u dostawcy
    "accounting_id": "" - kod księgowy (sprzedaż)
    "disabled": "1" lub "0" - czy nieaktywny
    "use_moss": "1" lub "0" - czy podlega pod OSS
    "use_product_warehouses": "1" lub "0" - czy osobne ceny sprzedaży dla magazynów
    "size": "" - rozmiar
    "size_width": "" - szerokość
    "size_height": "" - wysokość
    "size_unit": "m" lub "cm" - jednostka wysokości/szerokości
    "weight": "" - waga
    "weight_unit": "kg" lub "g" - jednostka wagi

Aktualizacja produktu

curl https://YOUR_DOMAIN.fakturownia.pl/products/333.json \
    -X PUT \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json'  \
    -d '{"api_token": "API_TOKEN",
        "product": {
            "name": "PoroductAA2",
            "code": "A0012",
            "price_gross": "102",
	    "tax": "23"
        }}'

Uwaga: Cenna netto jest wyliczana na podstawie wartości ceny brutto oraz podatku, nie można jej edytować wprost przez API.

Cenniki

Lista cenników

curl "https://YOUR_DOMAIN.fakturownia.pl/price_lists.json?api_token=API_TOKEN"

można przekazywać takie same parametry jakie są przekazywane w aplikacji (na stronie listy faktur)

Dodanie cennika

curl https://YOUR_DOMAIN.fakturownia.pl/price_lists.json
                -H 'Accept: application/json'
                -H 'Content-Type: application/json'
                -d '{
                "api_token": "API_TOKEN",
                "price_list": {
                    "name": "Nazwa cennika",
		    "description": "Opis",
		    "currency": "PLN",
                    "price_list_positions_attributes": {
		    	"0": {
				"priceable_id": "ID produktu",
				"priceable_name": "Nazwa produktu",
				"priceable_type": "Product",
				"use_percentage": "0",
				"percentage": "",
				"price_net": "111.0",
				"price_gross": "136.53",
				"use_tax": "1",
				"tax": "23"
			}
		    }
                }}'

Aktualizacja cennika

curl https://YOUR_DOMAIN.fakturownia.pl/price_lists/100.json
		-X PUT
                -H 'Accept: application/json'
                -H 'Content-Type: application/json'
                -d '{
                "api_token": "API_TOKEN",
                "price_list": {
                    "name": "Nazwa cennika",
                    "description": "Opis",
                    "currency": "PLN",
                    "price_list_positions_attributes": {
                        "0": {
                            "id": "ID pozycji",
                            "priceable_id": "ID produktu",
                            "price_net": "10.0",
                            "price_gross": "10.80"
                            "use_tax": "1",
                            "tax": "8"
                        }
                    }
                }}'

Usunięcie cennika

curl -X DELETE "https://YOUR_DOMAIN.fakturownia.pl/price_lists/100.json?api_token=API_TOKEN"

Dokumenty magazynowe

Wszystkie dokumenty magazynowe

curl "https://YOUR_DOMAIN.fakturownia.pl/warehouse_documents.json?api_token=API_TOKEN"

można przekazywać takie same parametry jakie są przekazywane w aplikacji (na stronie listy faktur)

Pobranie wybranego dokumentu po ID

curl "https://YOUR_DOMAIN.fakturownia.pl/warehouse_documents/555.json?api_token=API_TOKEN"

Dodanie dokumentu magazynowego MM

curl https://YOUR_DOMAIN.fakturownia.pl/warehouse_documents.json
                -H 'Accept: application/json'
                -H 'Content-Type: application/json'
                -d '{
                "api_token": "API_TOKEN",
                "warehouse_document": {
                    "kind":"mm",
                    "number": null,
                    "warehouse_id": "1",
                    "issue_date": "2017-10-23",
                    "department_name": "Department1 SA",
                    "client_name": "Client1 SA",
                    "warehouse_actions":[
                        {"product_name":"Produkt A1", "purchase_tax":23, "purchase_price_net":10.23, "quantity":1, "warehouse2_id":13}
                    ]
                }}'

Dodanie dokumentu magazynowego PZ

curl https://YOUR_DOMAIN.fakturownia.pl/warehouse_documents.json
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{
				"api_token": "API_TOKEN",
				"warehouse_document": {
					"kind":"pz",
					"number": null,
					"warehouse_id": "1",
					"issue_date": "2017-10-23",
					"department_name": "Department1 SA",
					"client_name": "Client1 SA",
					"warehouse_actions":[
						{"product_name":"Produkt A1", "purchase_tax":23, "purchase_price_net":10.23, "quantity":1},
						{"product_name":"Produkt A2", "purchase_tax":0, "purchase_price_net":50, "quantity":2}
					]
				}}'

Dodanie dokumentu magazynowego WZ

curl https://YOUR_DOMAIN.fakturownia.pl/warehouse_documents.json
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{
				"api_token": "API_TOKEN",
				"warehouse_document": {
					"kind":"wz",
					"number": null,
					"warehouse_id": "1",
					"issue_date": "2017-10-23",
					"department_name": "Department1 SA",
					"client_name": "Client1 SA",
					"warehouse_actions":[
						{"product_id":"333", "tax":23, "price_net":10.23, "quantity":1},
						{"product_id":"333", "tax":0, "price_net":50, "quantity":2}
					]
				}}'

Dodanie dokumentu magazynowego PZ dla istniejącego klienta, działu i produktu

curl https://YOUR_DOMAIN.fakturownia.pl/warehouse_documents.json
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{
				"api_token": "API_TOKEN",
				"warehouse_document": {
					"kind":"pz",
					"number": null,
					"warehouse_id": "1",
					"issue_date": "2017-10-23",
					"department_id": "222",
					"client_id": "111",
					"warehouse_actions":[
						{"product_id":"333", "purchase_tax":23, "price_net":10.23, "quantity":1},
						{"product_id":"333", "purchase_tax":0, "price_net":50, "quantity":2}
					]
				}}'

Aktualizacja dokumentu

curl https://YOUR_DOMAIN.fakturownia.pl/warehouse_documents/555.json
			 	-X PUT
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{"api_token": "API_TOKEN",
					"warehouse_document": {
						"client_name": "New client name SA"
				    }}'

Usunięcie dokumentu

curl -X DELETE "https://YOUR_DOMAIN.fakturownia.pl/warehouse_documents/100.json?api_token=API_TOKEN"

Połączenie istniejących faktur i dokumentu magazynowego

curl https://YOUR_DOMAIN.fakturownia.pl/warehouse_documents/555.json
				-X PUT
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{"api_token": "API_TOKEN",
					"warehouse_document": {
						"invoice_ids": [
							100,
							111
						]
					}}'

Płatności

Wszystkie płatności

curl "https://YOUR_DOMAIN.fakturownia.pl/banking/payments.json?api_token=API_TOKEN"

można przekazywać takie same parametry jakie są przekazywane w aplikacji (na stronie listy płatności)

Pobranie wybranej płatności po ID

curl "https://YOUR_DOMAIN.fakturownia.pl/banking/payment/100.json?api_token=API_TOKEN"

Dodawanie nowej płatności

curl https://YOUR_DOMAIN.fakturownia.pl/banking/payments.json \
				-H 'Accept: application/json' \
				-H 'Content-Type: application/json' \
				-d '{
					"api_token": "API_TOKEN",
					"banking_payment": {
						"name":"Payment 001",
						"price": 100.05,
						"invoice_id": null,
						"paid":true,
						"kind": "api"
				    }}'

Pobranie płatności wraz z danymi przypiętych faktur

curl "https://YOUR_DOMAIN.fakturownia.pl/banking/payments.json?include=invoices&api_token=API_TOKEN"

Dodanie nowej płatności powiązanej z istniejącymi fakturami

curl https://YOUR_DOMAIN.fakturownia.pl/banking/payments.json \
				-H 'Accept: application/json' \
				-H 'Content-Type: application/json' \
				-d '{
					"api_token": "API_TOKEN",
					"banking_payment": {
						"name":"Payment 003",
						"price": 200,
						"invoice_ids": [555, 666],
						"paid":true,
						"kind": "api"
						}}'

Trzeba pamiętać, że faktury zostaną opłacone w takiej kolejności, w jakiej zostały podane w atrybucie invoice_ids - jeśli faktura o id = 555 została wystawiona na kwotę 100 zł, a faktura o id = 666 na 200 zł, to po dodaniu płatności pierwsza faktura zostanie opłacona w całości, natomiast druga zostanie opłacona w połowie.

Aktualizacja płatności

curl https://YOUR_DOMAIN.fakturownia.pl/banking/payments/555.json
				-X PATCH
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{"api_token": "API_TOKEN",
					"banking_payment": {
						"name": "New payment name",
						"price": 100
						}}'

Usuwanie płatności

curl -X DELETE "https://YOUR_DOMAIN.fakturownia.pl/banking/payments/555.json?api_token=API_TOKEN"

Kategorie

Lista wszystkich kategorii

curl "https://YOUR_DOMAIN.fakturownia.pl/categories.json?api_token=API_TOKEN"

Pobranie pojedycznej kategorii po ID

curl "https://YOUR_DOMAIN.fakturownia.pl/categories/100.json?api_token=API_TOKEN"

Dodanie nowej kategorii

curl https://YOUR_DOMAIN.fakturownia.pl/categories.json
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{
				"api_token": "API_TOKEN",
				"category": {
					"name":"my_category",
					"description": null
				}}'

Aktualizacja kategorii

curl https://YOUR_DOMAIN.fakturownia.pl/categories/100.json
				-X PUT
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{
				"api_token": "API_TOKEN",
				"category": {
					"name":"my_category",
					"description": "new_description"
				}}'

Usunięcie kategorii o podanym ID

curl -X DELETE "https://YOUR_DOMAIN.fakturownia.pl/categories/100.json?api_token=API_TOKEN"

Magazyny

Lista wszystkich magazynów

curl "https://YOUR_DOMAIN.fakturownia.pl/warehouses.json?api_token=API_TOKEN"

Pobranie pojedycznego magazynu po ID

curl "https://YOUR_DOMAIN.fakturownia.pl/warehouses/100.json?api_token=API_TOKEN"

Dodanie nowego magazynu

curl https://YOUR_DOMAIN.fakturownia.pl/warehouses.json
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{
				"api_token": "API_TOKEN",
				"warehouse": {
					"name":"my_warehouse",
					"kind": null,
					"description": null
				}}'

Aktualizacja magazynu

curl https://YOUR_DOMAIN.fakturownia.pl/warehouses/100.json
				-X PUT
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{
				"api_token": "API_TOKEN",
				"warehouse": {
					"name":"my_category",
					"kind": null,
					"description": "new_description"
				}}'

Usunięcie magazynu o podanym ID

curl -X DELETE "https://YOUR_DOMAIN.fakturownia.pl/warehouses/100.json?api_token=API_TOKEN"

Akcje magazynowe

Lista wszystkich akcji magazynowych

curl "https://YOUR_DOMAIN.fakturownia.pl/warehouse_actions.json?api_token=API_TOKEN"

Do wywołań można przekazywać dodatkowe parametry - takie same, które są używane w aplikacji, np. page=, per_page= itp.

Parametr warehouse_id= wypisze tylko akcje dla danego id magazynu

Parametr kind= wypisze tylko akcje danego rodzaju

Parametr product_id= wypisze tylko akcje dla danego id produktu

Parametr date_from= akcje utworzone po wybranej dacie

Parametr date_to= akcje utworzone przed wybraną datą

Parametr from_warehouse_document= akcje wydań połączone do wybranego dokumentu magazynowego

Parametr to_warehouse_document= akcje przyjęcia połączone do wybranego dokumentu magazynowego

Parametr warehouse_document_id= wszystkie akcje magazynowego dla wybranego dokumentu magazynowego

Działy

Lista wszystkich działów

curl "https://YOUR_DOMAIN.fakturownia.pl/departments.json?api_token=API_TOKEN"

Pobranie pojedycznego działu po ID

curl "https://YOUR_DOMAIN.fakturownia.pl/departments/100.json?api_token=API_TOKEN"

Dodanie nowego działu

curl https://YOUR_DOMAIN.fakturownia.pl/departments.json
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{
				"api_token": "API_TOKEN",
				"department": {
					"name":"my_warehouse",
					"shortcut": "short_name",
					"tax_no": "-"
				}}'

Aktualizacja działu

curl https://YOUR_DOMAIN.fakturownia.pl/departments/100.json
        -X PUT
        -H 'Accept: application/json'
        -H 'Content-Type: application/json'
        -d '{
        "api_token": "API_TOKEN",
        "department": {
          "name":"new_name",
          "shortcut": "new_short_name",
          "tax_no": "xxx-xxx-xx-xx"
        }}'

Usunięcie działu o podanym ID

curl -X DELETE "https://YOUR_DOMAIN.fakturownia.pl/departments/100.json?api_token=API_TOKEN"

Dodanie logo

curl -X PUT  https://YOUR_DOMAIN.fakturownia.pl/departments/DEPARTMENT_ID.json \
    -F 'api_token=API_TOKEN' \
    -F 'department[logo]=@/file_path/logo.png'

Wystawcy

Lista wszystkich wystawców

curl "https://YOUR_DOMAIN.fakturownia.pl/issuers.json?api_token=API_TOKEN"

Pobranie wystawcy po ID

curl "https://YOUR_DOMAIN.fakturownia.pl/issuers/1.json?api_token=API_TOKEN"

Dodanie nowego wystawcy

curl https://YOUR_DOMAIN.fakturownia.pl/issuers.json
				-H 'Accept: application/json'
				-H 'Content-Type: application/json'
				-d '{
				"api_token": "API_TOKEN",
				"issuer": {
					"name":"Issuer",
					"tax_no": "4170106662"
				}}'

Aktualizacja wystawcy

curl https://YOUR_DOMAIN.fakturownia.pl/issuers/1.json
        -X PUT
        -H 'Accept: application/json'
        -H 'Content-Type: application/json'
        -d '{
        "api_token": "API_TOKEN",
        "issuer": {
          "name":"new_name",
        }}'

Usunięcie wystawcy po ID

curl -X DELETE "https://YOUR_DOMAIN.fakturownia.pl/issuers/1.json?api_token=API_TOKEN"

Logowanie i pobranie danych przez API

curl https://app.fakturownia.pl/login.json \
    -H 'Accept: application/json'  \
    -H 'Content-Type: application/json' \
    -d '{
            "login": "login_or_email",
            "password": "password",
	    "integration_token": ""
    }'

To zapytanie zwraca token i informacje o URL konta w Fakturowni (pola prefix i url):

{
	"login":"marcin",
	"email":"email@test.pl",
	"prefix":"YYYYYYY",
	"url":"https://YYYYYYY.fakturownia.pl",
	"first_name":"Jan",
	"last_name":"Kowalski",
	"api_token":"XXXXXXXXXXXXXX"
}

UWAGA: api_token jest zwracany tylko jeśli dany użytkownik ma wygenerowany API Token (użytkownik może go dodać w ustawieniach konta)

Dodawanie użytkowników

Po utworzeniu konta API i określeniu właściciela (patrz wyżej), możesz dodać innych użytkowników do konta poprzez API i zdefiniować ich rolę.
Aby dodać użytkownika do konta, musisz wysłać:

  • kod API Twojego konta (api_token)
  • Twój kod do umieszczenia na stronie (integration_token). Aby go otrzymać skontaktuj się z nami poprzez wiadomość e-mail info@fakturownia.pl.
  • określenia parametru invite :
    • jeśli użytkownik musi zostać stworzony ("false"): oprócz przesłania adresu e-mail należy także wybrać hasło
    • jeśli użytkownik już istnieje i jest powiązany z kontem w Fakturowni ("true"): wymagany jest tylko jego adres e-mail
  • rola użytkownika (role)
    • dla jednej z domyślnych ról wybierz wartość: "member" dla zwykłego użytkownika, "admin" dla administratora lub "accountant" dla księgowego.
    • w przypadku niestandardowej roli wpisz wartość "role_1234" lub 1234, która reprezentuje niestandardowy identyfikator roli konta.
  • identyfikatory działu (department_ids), do których ma dostęp użytkownik nie będący administratorem.

Aby dowiedzieć się więcej o rolach użytkowników zapraszamy do bazy wiedzy: https://pomoc.fakturownia.pl/28889135-Wlasne-role-uprawnienia-uzytkownika-w-Fakturowni.

POST https://YOUR_DOMAIN.fakturownia.pl/account/add_user.json
Content-Type: application/json
{
  "api_token": "API_TOKEN",
  "integration_token": "INTEGRATION_TOKEN",
  "user": {
    "invite": true,
    "email": "email@test.pl",
    "password": "Password123",
    "role": "member",
    "department_ids": []
  }
}

Konta Systemowe

Zakładanie konta

Jest to opcja dla Partnerów, którzy chcą zakładać konta Fakturowni z poziomu swojej aplikacji. Np. mogą to być dostawcy sklepów internetowych, systemów rezerwacji itp lub innych systemów którzy chcą udostępnić swoim użytkownikom funkcjonalność wystawiania faktur.

Klient w portalu Partnera jednym przyciskiem może założyć konto i od razu zacząć wystawiać faktury (nie musi samodzielnie zakładać konta w Fakturownia.pl)

Pola: user.login, user.from_partner, user, company nie są wymagane

curl https://YOUR_DOMAIN.fakturownia.pl/account.json \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
            "api_token": "API_TOKEN",
            "account": {
                "prefix": "prefix1",
		"lang": "pl"
            },
            "user": {
                "login": "login1",
                "email": "email1@email.pl",
                "password": "password1",
                "from_partner": "PARTNER_CODE"
            },
            "company": {
                "name": "Company1",
                "tax_no": "5252445700",
                "post_code": "00-112",
                "city": "Warsaw",
                "street": "Street 1/10",
                "person": "Jan Nowak",
                "bank": "Bank1",
                "bank_account": "111222333444555666111"
            },
	    "integration_token": ""
        }'

UWAGA: parametr integration_token jest wymagany, jeśli chcemy pobrać aktualny api_token użytkownika (aby otrzymać integration_token dla Twojej zintegrowanej aplikacji prosimy o kontakt z nami)

Po utworzeniu konta zwracane są:

{
	"prefix":"prefix126", - prefix utworzonego konta (moze byc innny niz podany, gdy podany już istniał)
	"api_token":"62YPJfIekoo111111", - kod dostepu do utworzonego konta
	"url":"https://prefix126.fakturownia.pl", - url utworzonego konta
	"login":"login1", - login użytkownika  (moze byc innny niz podany, gdy podany już istniał)
	"email":"email1@email.pl"
}

Inne pola dostępne przy tworzeniu nowego konta (pomocne przy integracji)

	"account": {
		"prefix": "prefix-konta",
		"lang": "pl",
		"integration_fast_login": true - umożliwia automatyczne logowanie Twoich użytkowników w Fakturowni
		"integration_logout_url": "http://twojastrona.pl/" - umożliwia powrót Twoich użytkowników na Twoją stronę po ich wylogowaniu się z Fakturowni
	}

Pobranie informacji o koncie:

curl "https://YOUR_DOMAIN.fakturownia.pl/account.json?api_token=API_TOKEN&integration_token="

Usuwanie konta

Po wysłaniu żądania dalsza procedura usunięcia konta jest identyczna, jak przy zrobieniu tego przez aplikację tj. zostanie wysłany e-mail z linkiem potwierdzającym usunięcie konta.

curl https://YOUR_DOMAIN.fakturownia.pl/account/delete.json \
    -X POST \
    -H 'Accept:application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN"
    }'

przykład odpowiedzi:

{
    "code": "success",
    "message": "Link do usunięcia konta wysłany!"
}

Odłączanie konta

Ten endpoint służy do odłączania konta (dalej SUB_DOMAIN) od biura księgowego.

curl https://YOUR_DOMAIN.fakturownia.pl/account/unlink.json \
    -X PATCH \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "prefix": "SUB_DOMAIN_1"
    }'

albo

curl https://YOUR_DOMAIN.fakturownia.pl/account/unlink.json \
    -X PATCH \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "api_token": "API_TOKEN",
        "prefix": ["SUB_DOMAIN_1", "SUB_DOMAIN_2", "SUB_DOMAIN_3"]
    }'

przykłady odpowiedzi:

SUB_DOMAIN_3 nie było podpięte

{
    "code": "success",
    "message": "Konta odłączone",
    "result": {
        "unlinked": [
            "SUB_DOMAIN_1",
            "SUB_DOMAIN_2"
        ],
        "not_unlinked": [
            "SUB_DOMAIN_3"
        ]
    }
}

żadne konto nie było podpięte

{
    "code": "error",
    "message": "Brak kont do odłączenia",
    "result": {
        "not_unlinked": [
            "SUB_DOMAIN_1",
            "SUB_DOMAIN_2",
            "SUB_DOMAIN_3"
        ]
    }
}

Przykłady w PHP i Ruby

https://github.com/radgost/fakturownia-api/blob/master/example1.php

https://github.com/radgost/fakturownia-api/blob/master/example1.rb

Ruby Gem do integracji z Fakturownia.pl: https://github.com/kkempin/fakturownia

Webhooki

  • GET /webhooks.json - pobranie listy webhooków
  • GET /webhooks/1.json - pobranie webhooka
  • POST /webhooks.json - dodanie nowego webhooka
  • PUT /webhooks/1.json - aktualizacja webhooka
  • DELETE /webhooks/1.json - skasowanie webhooka

Przykład:

curl "https://YOUR_DOMAIN.fakturownia.pl/webhooks.json?api_token=API_TOKEN"

E-paragony i Paragony papierowe

tu opis: https://github.com/e-paragony/api

About

faktury online API

Resources

Stars

69 stars

Watchers

22 watching

Forks

Releases

Packages

Contributors

Languages