Faktura korygująca jest osobnym dokumentem, tworzonym przez POST /corrective_invoices.json. Każdą korygowaną pozycję podaje się dwukrotnie: w stanie przed korektą i w stanie po korekcie.
Wymagania
- Klucz API z zakresem
api:invoices:writew zmiennejINFAKT_API_KEY. - Numer,
uuidi data faktury korygowanej (GET /invoices/{id}.json).
Kroki
Przygotowanie pozycji przed korektą i po niej
Pozycja przed korektą ma
"correction": falsei dane zgodne z fakturą korygowaną. Pozycja po korekcie ma"correction": truei nowe dane. Obie pozycje mają ten sam numergroup.Pole
correction_reasonprzyjmuje wartośćmistake(błąd rachunkowy lub oczywista pomyłka) alboother(np. zwrot towaru lub rabat).Wysłanie korekty
Przykład obniża cenę usługi ze 100,00 zł do 80,00 zł netto:
curl -X POST "https://api.sandbox-infakt.pl/v3/corrective_invoices.json" \ -H "X-inFakt-ApiKey: $INFAKT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "corrective_invoice": { "corrected_invoice_number": "1/10/2026", "corrected_invoice_uuid": "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f", "corrected_invoice_date": "2026-10-01", "invoice_date": "2026-10-05", "payment_date": "2026-10-19", "client_id": 1003, "correction_reason": "other", "services": [ { "name": "Usługa programistyczna", "tax_symbol": "23", "unit": "godz.", "quantity": 1, "unit_net_price": 10000, "group": 1, "correction": false }, { "name": "Usługa programistyczna", "tax_symbol": "23", "unit": "godz.", "quantity": 1, "unit_net_price": 8000, "group": 1, "correction": true } ] } }'const res = await fetch("https://api.sandbox-infakt.pl/v3/corrective_invoices.json", { method: "POST", headers: { "X-inFakt-ApiKey": process.env.INFAKT_API_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ "corrective_invoice": { "corrected_invoice_number": "1/10/2026", "corrected_invoice_uuid": "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f", "corrected_invoice_date": "2026-10-01", "invoice_date": "2026-10-05", "payment_date": "2026-10-19", "client_id": 1003, "correction_reason": "other", "services": [ { "name": "Usługa programistyczna", "tax_symbol": "23", "unit": "godz.", "quantity": 1, "unit_net_price": 10000, "group": 1, "correction": false }, { "name": "Usługa programistyczna", "tax_symbol": "23", "unit": "godz.", "quantity": 1, "unit_net_price": 8000, "group": 1, "correction": true } ] } }), }); const data = await res.json(); console.log(res.status, data);import os import requests res = requests.post( "https://api.sandbox-infakt.pl/v3/corrective_invoices.json", headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]}, json={ "corrective_invoice": { "corrected_invoice_number": "1/10/2026", "corrected_invoice_uuid": "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f", "corrected_invoice_date": "2026-10-01", "invoice_date": "2026-10-05", "payment_date": "2026-10-19", "client_id": 1003, "correction_reason": "other", "services": [ { "name": "Usługa programistyczna", "tax_symbol": "23", "unit": "godz.", "quantity": 1, "unit_net_price": 10000, "group": 1, "correction": False }, { "name": "Usługa programistyczna", "tax_symbol": "23", "unit": "godz.", "quantity": 1, "unit_net_price": 8000, "group": 1, "correction": True } ] } }, ) print(res.status_code, res.json())<?php $ch = curl_init('https://api.sandbox-infakt.pl/v3/corrective_invoices.json'); curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'X-inFakt-ApiKey: ' . getenv('INFAKT_API_KEY'), 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'corrective_invoice' => [ 'corrected_invoice_number' => '1/10/2026', 'corrected_invoice_uuid' => '9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f', 'corrected_invoice_date' => '2026-10-01', 'invoice_date' => '2026-10-05', 'payment_date' => '2026-10-19', 'client_id' => 1003, 'correction_reason' => 'other', 'services' => [ [ 'name' => 'Usługa programistyczna', 'tax_symbol' => '23', 'unit' => 'godz.', 'quantity' => 1, 'unit_net_price' => 10000, 'group' => 1, 'correction' => false, ], [ 'name' => 'Usługa programistyczna', 'tax_symbol' => '23', 'unit' => 'godz.', 'quantity' => 1, 'unit_net_price' => 8000, 'group' => 1, 'correction' => true, ], ], ], ]), ]); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo $status, ' ', $response, PHP_EOL;
Weryfikacja
Odpowiedź 201 zawiera fakturę korygującą z kind: "correction", własnym numerem i polem parent_id wskazującym fakturę korygowaną:
{
"id": 1004,
"uuid": "f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b",
"parent_id": 999,
"number": "1/KOR/10/2026",
"kind": "correction",
"status": "draft"
}Kod 422 z polem errors wskazuje brakujące dane. Pola corrected_invoice_number i correction_reason są wymagane.
Następne kroki
- Wysyłka faktury do KSeF: korektę faktury wysłanej do KSeF również należy wysłać do KSeF.
- Typy dokumentów
- Operacja w referencji API