inFakt przygotowuje archiwum z plikami PDF w tle. Proces składa się z trzech kroków: zlecenia, sprawdzenia gotowości i pobrania pliku.
Wymagania
- Klucz API z zakresami
api:invoices:writeiapi:invoices:readw zmiennejINFAKT_API_KEY. uuiddokumentów: faktur (z wyjątkiem faktur wewnętrznych i raportów fiskalnych), dowodów wewnętrznych, utargów dziennych lub faktur OSS.
Kroki
Zlecenie przygotowania archiwum
API uwzględnia pierwsze 100 identyfikatorów
uuid.curl -X POST "https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many.json" \ -H "X-inFakt-ApiKey: $INFAKT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "uuids": [ "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f", "f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b" ] }'const res = await fetch("https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many.json", { method: "POST", headers: { "X-inFakt-ApiKey": process.env.INFAKT_API_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ "uuids": [ "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f", "f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b" ] }), }); const data = await res.json(); console.log(res.status, data);import os import requests res = requests.post( "https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many.json", headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]}, json={ "uuids": [ "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f", "f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b" ] }, ) print(res.status_code, res.json())<?php $ch = curl_init('https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many.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([ 'uuids' => ['9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f', 'f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b'], ]), ]); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo $status, ' ', $response, PHP_EOL;Odpowiedź
201zawieradownload_tokenoraz listy przyjętych i odrzuconych dokumentów:{ "download_token": "<token>", "accepted_uuids": [ "9bdc76fd-7a02-42ec-a4a3-42bc867b9a9f" ], "rejected_uuids": [ "f1e2d3c4-b5a6-4789-8a9b-0c1d2e3f4a5b" ] }Token zapisuje się w zmiennej:
export DOWNLOAD_TOKEN=<token>.Sprawdzenie gotowości
Żądanie należy ponawiać, aż odpowiedź będzie zawierać
{"ready":true}:curl "https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/$DOWNLOAD_TOKEN/check.json" \ -H "X-inFakt-ApiKey: $INFAKT_API_KEY"const res = await fetch(`https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/${process.env.DOWNLOAD_TOKEN}/check.json`, { method: "GET", headers: { "X-inFakt-ApiKey": process.env.INFAKT_API_KEY, }, }); const data = await res.json(); console.log(res.status, data);import os import requests res = requests.get( f"https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/{os.environ['DOWNLOAD_TOKEN']}/check.json", headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]}, ) print(res.status_code, res.json())<?php $ch = curl_init('https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/' . getenv('DOWNLOAD_TOKEN') . '/check.json'); curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'X-inFakt-ApiKey: ' . getenv('INFAKT_API_KEY'), ], ]); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo $status, ' ', $response, PHP_EOL;Pobranie pliku
curl "https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/$DOWNLOAD_TOKEN.json" \ -H "X-inFakt-ApiKey: $INFAKT_API_KEY" \ -o faktury.zipconst res = await fetch(`https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/${process.env.DOWNLOAD_TOKEN}.json`, { method: "GET", headers: { "X-inFakt-ApiKey": process.env.INFAKT_API_KEY, }, }); const fs = await import("node:fs/promises"); await fs.writeFile("faktury.zip", Buffer.from(await res.arrayBuffer())); console.log(res.status);import os import requests res = requests.get( f"https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/{os.environ['DOWNLOAD_TOKEN']}.json", headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]}, ) open("faktury.zip", "wb").write(res.content) print(res.status_code)<?php $ch = curl_init('https://api.sandbox-infakt.pl/v3/async/incomes/pdf_many/' . getenv('DOWNLOAD_TOKEN') . '.json'); curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'X-inFakt-ApiKey: ' . getenv('INFAKT_API_KEY'), ], ]); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); file_put_contents('faktury.zip', $response); echo $status, PHP_EOL;
Weryfikacja
Plik faktury.zip zawiera PDF każdego dokumentu z listy accepted_uuids. Próba pobrania przed uzyskaniem ready: true kończy się kodem 422. Identyfikatory z listy rejected_uuids nie istnieją na koncie lub dotyczą dokumentów bez wersji PDF.
Następne kroki
- Typy dokumentów: które dokumenty mają wersję PDF.
- Operacja w referencji API