Przesłany plik zostaje zapisany jako skan dokumentu, na podstawie którego inFakt tworzy koszt. Jedno żądanie może zawierać wiele plików.
Wymagania
- Klucz API z zakresem
api:costs:writew zmiennejINFAKT_API_KEY. - Plik PDF, JPG lub PNG o rozmiarze do 15 MB. Zawartość pliku musi odpowiadać jego rozszerzeniu.
Żądanie
Każdy plik przesyła się jako osobną część uploads[] żądania multipart/form-data:
curl -X POST "https://api.infakt.pl/v3/documents/costs/upload.json" \
-H "X-inFakt-ApiKey: $INFAKT_API_KEY" \
-F "uploads[]=@faktura.pdf"import { readFile } from "node:fs/promises";
const form = new FormData();
form.append("uploads[]", new Blob([await readFile("faktura.pdf")], { type: "application/pdf" }), "faktura.pdf");
const res = await fetch("https://api.infakt.pl/v3/documents/costs/upload.json", {
method: "POST",
headers: { "X-inFakt-ApiKey": process.env.INFAKT_API_KEY },
body: form,
});
console.log(res.status, await res.json());import os
import requests
with open("faktura.pdf", "rb") as f:
res = requests.post(
"https://api.infakt.pl/v3/documents/costs/upload.json",
headers={"X-inFakt-ApiKey": os.environ["INFAKT_API_KEY"]},
files=[("uploads[]", ("faktura.pdf", f, "application/pdf"))],
)
print(res.status_code, res.json())<?php
$ch = curl_init('https://api.infakt.pl/v3/documents/costs/upload.json');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-inFakt-ApiKey: ' . getenv('INFAKT_API_KEY')],
CURLOPT_POSTFIELDS => ['uploads[]' => new CURLFile('faktura.pdf', 'application/pdf')],
]);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), ' ', curl_exec($ch), PHP_EOL;Weryfikacja
Odpowiedź 201 zawiera wynik dla każdego pliku:
{
"entities": [
{
"success": true,
"name": "faktura.pdf",
"document_scan_uuid": "8b9c0d1e-2f3a-4b5c-8d6e-7f8a9b0c1d2e",
"download_url": "/app/uploads/c4d5e6f7-8a9b-4c0d-9e1f-2a3b4c5d6e7f"
}
]
}Kod 422 oznacza, że co najmniej jeden plik został odrzucony. Poprawne pliki z tego samego żądania są mimo to zapisywane i mają success: true. Koszty zwraca GET /documents/costs.json, a nie /costs.json (403 Forbidden przy pobieraniu kosztów).