← Powrót do strony Integrator V-Desk  ·  Instrukcja obsługi

Integracja z API V-Desk — dokumentacja techniczna

Intuiti Integrator V-Desk do Symfonii — Intuiti sp. z o.o.
Zakres dokumentu. Opisano tu wyłącznie te końcówki API systemu V-Desk, z których korzysta aplikacja Intuiti Integrator V-Desk do Symfonii, oraz format danych, jakiego aplikacja oczekuje i jaki wysyła. Dokument nie jest pełną specyfikacją API V-Desk. W razie rozbieżności obowiązuje dokumentacja producenta.
Kto jest kim. Producentem i właścicielem systemu V-Desk — oraz jego API — jest PrimeSoft Polska Sp. z o.o. To ona wydaje klucze API, udostępnia adresy instalacji i decyduje, które końcówki są włączone dla danego klienta. Producentem aplikacji Intuiti Integrator V-Desk do Symfonii, która z tego API korzysta, jest Intuiti sp. z o.o. — i to ona jest autorem niniejszego opracowania.
Producent systemu V-Desk i APIProducent aplikacji Integrator
PrimeSoft Polska Sp. z o.o.
ul. Piątkowska 161, 60-650 Poznań
tel. +48 (61) 833-17-72
biuro@primesoft.pl · primesoft.pl/kontakt
NIP 7831592998 · REGON 634610845
Intuiti sp. z o.o.
tel. (61) 307 40 00
biuro@intuiti.pl · intuiti.pl/kontakt
Do kogo z jakim problemem. Klucz API, adres bazowy, kod firmy, zakres udostępnionych końcówek i zawartość dokumentów w obiegu — PrimeSoft albo konsultant projektu wdrożeniowego V-Desk. Sposób, w jaki aplikacja przetwarza pobrane dane i zapisuje je w Symfonii — Intuiti.
Dane w przykładach są fikcyjne. Adresy serwerów, klucze API, kody firm, numery NIP, nazwy kontrahentów i numery dokumentów zostały wymyślone na potrzeby tej dokumentacji. Żaden z nich nie wskazuje na rzeczywistą instalację ani rzeczywisty podmiot.
Spis treści
  1. Co robi integracja — przegląd
  2. Podstawy: adres, uwierzytelnianie, nagłówki
  3. Parametr company — kod firmy
  4. Formaty danych i konwencje
  5. Wykaz wykorzystywanych końcówek
  6. GET /invoice/export — pobranie faktur
  7. POST /company/import — wysyłka kontrahentów
  8. POST /invoice/import/pk — zwrot numeru dokumentu Symfonii
  9. POST <słownik> — wysyłka słowników
  10. Obsługa błędów
  11. Jak dane z V-Desk trafiają do Symfonii FK
  12. Bezpieczeństwo i dobre praktyki

1. Co robi integracja — przegląd

Aplikacja Intuiti Integrator V-Desk do Symfonii jest pośrednikiem między obiegiem dokumentów V-Desk a księgami Symfonii Finanse i Księgowość. Nie zapisuje niczego wprost do bazy Symfonii — po jednej stronie rozmawia z REST API V-Desk, po drugiej z obiektami integracji dostarczanymi przez producenta Symfonii.

V-Desk obieg dokumentów Integrator aplikacja na stanowisku Symfonia FK księgi rachunkowe • rozpoznanie typu i rejestru VAT • dopasowanie schematu księgowania • uzgodnienie kontrahenta • przeliczenie walut i kursów • kontrola duplikatów • budowa dekretu i rejestrów GET /invoice/export faktury + dekret POST /invoice/import/pk numer dokumentu Symfonii POST /company/import kontrahenci, słowniki obiekty integracji dokument do bufora plan kont, rejestry kontrahenci, definicje Ustawienia lokalne lub wspólne: klucz API · bazowy endpoint · kod firmy · wzorce dokumentów · schematy księgowania
Ilustracja poglądowa. Linią ciągłą zaznaczono przepływ dokumentów, przerywaną — dane słownikowe i pomocnicze.

1.1 Zakres funkcjonalny

FunkcjaKierunekCo się dzieje
Pobranie faktur zakupu V-Desk → Integrator Aplikacja pobiera dokumenty z zadanego zakresu dat wraz z pozycjami VAT, danymi kontrahenta i gotowym dekretem przygotowanym w obiegu. Zobacz rozdział 6.
Przygotowanie dekretu wewnątrz Integratora Dokument dostaje typ, rejestr VAT i schemat księgowania — z wzorca dokumentów zakupu albo z dopasowania po frazie. Kwoty walutowe przeliczane są kursem dokumentu.
Wysyłka do bufora FK Integrator → Symfonia Dokument trafia do bufora Symfonii jako zapis księgowy z rejestrami VAT, rozrachunkiem i ewentualnymi księgowaniami równoległymi. Zobacz rozdział 11.
Zwrot numeru dokumentu Integrator → V-Desk Po zaksięgowaniu numer nadany przez Symfonię wraca do V-Desk, dzięki czemu w obiegu widać, że dokument został już zaksięgowany. Zobacz rozdział 8.
Wysyłka kontrahentów Symfonia → V-Desk Kartoteka kontrahentów z FK jest przekazywana do V-Desk, żeby w obiegu można było wskazywać istniejące podmioty zamiast wpisywać je ręcznie. Zobacz rozdział 7.
Wysyłka słowników Symfonia → V-Desk Wymiary analityczne i inne słowniki z FK, wykorzystywane przy opisywaniu dokumentów w obiegu. Zobacz rozdział 9.
Rozpoznanie dokumentów już zaksięgowanych wewnątrz Integratora Przed wysyłką lista jest porównywana z zawartością FK — po numerze KSeF, a gdy go brak, po numerze dokumentu, kwocie brutto i NIP-ie kontrahenta.

1.2 Czego integracja nie robi

Gdzie to ustawić. Klucz API, bazowy endpoint i kod firmy podaje się w programie w Ustawienia → Integracje. Tam też działa przycisk Test połączenia, który sprawdza, czy podane dane pozwalają odpytać API.

2. Podstawy: adres, uwierzytelnianie, nagłówki

2.1 Adres bazowy

Każda instancja V-Desk ma własny adres bazowy. Aplikacja przechowuje go w ustawieniach jako bazowy endpoint i dokleja do niego ścieżkę końcówki. Adres bazowy podaje się bez ukośnika na końcu i bez ścieżki końcówki:

# poprawnie
https://firma-przykladowa.vdesk.przyklad.pl/api

# niepoprawnie — końcówka i ukośnik doklejane są przez aplikację
https://firma-przykladowa.vdesk.przyklad.pl/api/
https://firma-przykladowa.vdesk.przyklad.pl/api/invoice/export

Adres złożony wygląda więc tak: <bazowy endpoint> + <ścieżka końcówki> + ? + parametry zapytania.

2.2 Uwierzytelnianie

Uwierzytelnianie odbywa się kluczem API przekazywanym w query stringu jako parametr apikey. Nie jest używany nagłówek Authorization ani ciasteczka sesyjne — każde żądanie jest samodzielne i musi nieść klucz.

GET /invoice/export?apikey=a1b2c3d4e5f60718293a4b5c6d7e8f90&dateFrom=2026-08-01&dateTo=2026-08-31&showImported=0
Klucz API jest częścią adresu URL. Adresy z kluczem nie powinny trafiać do logów, zgłoszeń serwisowych ani zrzutów ekranu — w razie ujawnienia klucz należy unieważnić po stronie dostawcy V-Desk. Cała komunikacja musi iść po HTTPS.

2.3 Nagłówki żądania

NagłówekWartośćUwagi
Acceptapplication/jsonUstawiany przy każdym wywołaniu.
User-AgentC# AppUstawiany przez aplikację. Niektóre konfiguracje serwerów odrzucają żądania bez nagłówka User-Agent.
Content-Typeapplication/jsonTylko dla żądań z ciałem (POST).

3. Parametr company — kod firmy

Jedna instancja V-Desk może obsługiwać kilka firm. Parametr company zawęża operację do jednej z nich. Dopuszczalne wartości są zależne od instancji i podaje je dostawca V-Desk — nie jest to lista globalna.

KońcówkaCzy company jest wymaganyZachowanie bez parametru
/invoice/exportopcjonalnyZwracane są faktury wszystkich firm instancji (zachowanie sprzed wprowadzenia parametru).
/company/importwymaganySerwer odpowiada HTTP 500 z komunikatem company parameter is mandatory.
/invoice/import/pknie stosowanyAplikacja nie wysyła tego parametru do tej końcówki.

Wartość jest kodowana procentowo przed doklejeniem do adresu, więc kody zawierające znaki specjalne są bezpieczne. Podanie wartości spoza listy dozwolonej kończy się odpowiedzią HTTP 400:

HTTP/1.1 400 Bad Request

Invalid company type [XYZ]. Allowed values: [FIRMA, ODDZIAL]
W aplikacji kod firmy ustawia się w Ustawienia → Wszystkie ustawienia importu → Integracje → Firma w V-Desk. Jest zapisywany osobno dla każdej firmy Symfonii (po numerze NIP), więc jedna instalacja programu może obsługiwać kilka firm V-Desk.

4. Formaty danych i konwencje

ZagadnienieKonwencja
Format wymianyJSON, kodowanie UTF-8.
Daty w parametrach zapytaniayyyy-MM-dd — np. 2026-08-01.
Daty w treści JSONdd.MM.yyyy — np. 01.08.2026. Uwaga: format jest inny niż w parametrach zapytania.
Wartości liczboweLiczby JSON z kropką dziesiętną, bez separatora tysięcy i bez symbolu waluty.
Wartości logicznePrzekazywane jako tekst — np. "czyB2B": "TAK", "isActive": "1".
Ciało żądań POSTZawsze tablica obiektów, nawet gdy wysyłany jest jeden rekord.
StronicowanieBrak. Końcówka pobierania zwraca cały zbiór z zadanego zakresu dat — zakres jest jedynym mechanizmem ograniczania rozmiaru odpowiedzi.

4.1 Standardowa odpowiedź operacji zapisu

Końcówki przyjmujące dane (POST) odpowiadają jednolitym obiektem statusu:

{
  "status": "ok",
  "msg": ""
}
PoleTypOpis
statusstring"ok" oznacza powodzenie. Każda inna wartość traktowana jest jako niepowodzenie.
msgstringOpis przyczyny niepowodzenia. Przy powodzeniu zwykle pusty.

5. Wykaz wykorzystywanych końcówek

MetodaŚcieżkaPrzeznaczenieGdzie w aplikacji
GET/invoice/exportPobranie faktur z zakresu datMenu Wczytaj → V-Desk; przycisk Test połączenia w ustawieniach
POST/company/importWysyłka kartoteki kontrahentów z Symfonii do V-DeskMenu Kartoteki → Wyślij kontrahentów do V-Desk
POST/invoice/import/pkZwrot numeru dokumentu nadanego przez SymfonięAutomatycznie po zaksięgowaniu; menu Ustawienia → Aktualizacja ID w V-Desk
POST<konfigurowalna>Wysyłka słowników (rodzaje kosztów, marki, analityki…)Okno definicji słowników — ścieżkę podaje użytkownik
Aplikacja nie korzysta z żadnej końcówki modyfikującej dane faktur po stronie V-Desk poza zwrotem numeru dokumentu. Faktury są tylko odczytywane.

6. GET /invoice/export — pobranie faktur

GET/invoice/export?dateFrom={data}&dateTo={data}&showImported={0|1}&apikey={klucz}[&company={kod}]

Zwraca listę faktur, których data zatwierdzenia mieści się w podanym zakresie. Jest to podstawowa operacja aplikacji.

Parametry zapytania

ParametrTypWymaganyOpis
apikeystringtakKlucz API instancji.
dateFromyyyy-MM-ddtakPoczątek zakresu dat zatwierdzenia dokumentu (włącznie).
dateToyyyy-MM-ddtakKoniec zakresu (włącznie).
showImported0 | 1tak0 — pomiń dokumenty mające już nadany numer dokumentu Symfonii; 1 — zwróć wszystkie, także już przeniesione do księgowości.
companystringnieKod firmy — patrz rozdział 3.

Przykładowe żądanie

GET /api/invoice/export?dateFrom=2026-08-01&dateTo=2026-08-31&showImported=0
        &apikey=a1b2c3d4e5f60718293a4b5c6d7e8f90&company=FIRMA HTTP/1.1
Host: firma-przykladowa.vdesk.przyklad.pl
Accept: application/json
User-Agent: C# App

Przykładowa odpowiedź

HTTP/1.1 200 OK
Content-Type: application/json

[
  {
    "id": 104821,
    "czyB2B": "TAK",
    "rodzajDokumentu": "FZ",
    "numerFaktury": "FZ/2026/08/017",

    "kontrahentNazwa": "Kontrahent A Sp. z o.o.",
    "kontrahentNip": "1111111111",
    "kontrahentMiasto": "Miasto Przykładowe",
    "kontrahentKodPocztowy": "00-001",
    "kontrahentUlica": "Przykładowa",
    "kontrahentUlicaNumer": "12/3",

    "dataWystawienia": "01.08.2026",
    "dataSprzedazy": "01.08.2026",
    "dataWplywu": "05.08.2026",
    "terminPlatnosci": "15.08.2026",
    "formaPlatnosci": "przelew",

    "opis": "Zakup materiałów biurowych",
    "pozycjaNetto": 10000.00,
    "pozycjaBrutto": 12300.00,
    "waluta": "PLN",
    "kurs": 1.0,

    "pozycjeVAT": [
      {
        "pozycjaNetto": 10000.00,
        "pozycjaVAT": "23",
        "pozycjaKwotaVat": 2300.00,
        "pozycjaBrutto": 12300.00
      }
    ],

    "dekret": [
      { "strona": "winien", "konto": "401-1", "kwota": 10000.00, "opis": "Materiały biurowe" },
      { "strona": "ma",     "konto": "202",   "kwota": 12300.00, "opis": "Materiały biurowe" },
      { "strona": "winien", "konto": "501-1", "kwota": 12300.00, "zapisRownolegly": 33 },
      { "strona": "ma",     "konto": "490",   "kwota": 12300.00, "zapisRownolegly": 33 }
    ],

    "nrKSEF": "1111111111-20260801-AB01CD23EF45-6A",
    "dataKSEF": "01.08.2026"
  }
]

Pola obiektu faktury

PoleTypOpis
idintIdentyfikator dokumentu w V-Desk. Używany później przy zwrocie numeru Symfonii (rozdział 8).
czyB2BstringZnacznik transakcji B2B. Wartość "TAK" interpretowana jest jako prawda, każda inna jako fałsz.
rodzajDokumentustringSymbol rodzaju dokumentu w V-Desk. Aplikacja tworzy z niego definicję dokumentu, jeżeli pole jest wypełnione.
numerFakturystringNumer własny faktury.
kontrahentNazwastringNazwa kontrahenta.
kontrahentNipstringNIP kontrahenta — podstawa dopasowania do kartoteki Symfonii.
kontrahentMiastostringMiejscowość. Gdy pole jest puste, aplikacja próbuje wydzielić miejscowość i kod pocztowy z pozostałych pól adresowych.
kontrahentKodPocztowystringKod pocztowy.
kontrahentUlicastringNazwa ulicy.
kontrahentUlicaNumerstringNumer budynku/lokalu.
dataWystawieniadd.MM.yyyyData wystawienia faktury.
dataSprzedazydd.MM.yyyyData sprzedaży / wykonania usługi.
dataWplywudd.MM.yyyyData wpływu dokumentu. Może być null.
terminPlatnoscidd.MM.yyyyTermin płatności. Gdy brak — aplikacja przyjmuje 14 dni od daty transakcji.
formaPlatnoscistringOpisowa forma płatności.
opisstringOpis dokumentu.
pozycjaNettodecimalWartość netto dokumentu.
pozycjaBruttodecimalWartość brutto dokumentu.
walutastringKod waluty. Wartość inna niż PLN uruchamia obsługę walutową przy księgowaniu.
kursdoubleKurs waluty. Dla dokumentów złotówkowych 1.0.
pozycjeVATarrayRozbicie na stawki VAT — patrz niżej.
dekretarrayGotowa dekretacja z V-Desk — patrz niżej.
nrKSEFstringNumer faktury w Krajowym Systemie e-Faktur. Pusty, jeżeli dokument nie przeszedł przez KSeF.
dataKSEFdd.MM.yyyyData wystawienia w KSeF. Gdy brak, przyjmowana jest data wystawienia faktury.

Obiekt pozycjeVAT[]

PoleTypOpis
pozycjaVATstringStawka VAT. Oprócz wartości liczbowych (np. "23", "8", "5", "0") obsługiwane są oznaczenia ZW, NP, OO, BP.
pozycjaNettodecimalPodstawa opodatkowania dla tej stawki.
pozycjaKwotaVatdecimalKwota podatku.
pozycjaBruttodecimalWartość brutto dla tej stawki.

Obiekt dekret[]

PoleTypOpis
stronastring"winien" albo "ma".
kontostringNumer konta księgowego. Może być samą syntetyką (np. "202") albo kontem z analityką (np. "401-1").
kwotadecimalKwota zapisu w walucie dokumentu.
opisstringTreść zapisu. Pozycje równoległe zwykle nie mają tego pola.
zapisRownoleglyint?Znacznik księgowania równoległego. Maska bitowa, nie wartość wyliczeniowa — spotykana wartość 33 to 0x01 | 0x20. Pole występuje wyłącznie na pozycjach równoległych; jego brak oznacza zapis podstawowy.
Pozycje z wypełnionym zapisRownolegly należy traktować jako osobny zbiór, a nie jako kolejne pozycje dekretu podstawowego. Dekret podstawowy ma jedną pozycję po stronie ma (konto zobowiązania); wrzucenie do niego równoległej pozycji ma nadpisuje to konto i gubi rozrachunek.
Dekret nie zawiera zapisu VAT. Tablica dekret[] ma wyłącznie pozycje kosztowe (winien, w kwocie netto) i jedną pozycję zobowiązania (ma, w kwocie brutto) — kwoty celowo się nie bilansują, bo brakującego wiersza podatku V-Desk nie przysyła. Zapis VAT tworzy integrator, a konto bierze z pola Konto VAT schematu księgowania skonfigurowanego po stronie Symfonii. Nie ma więc ustawienia „konto VAT z V-Desk” i nie może być — nie ma czego pobierać. Dotyczy to również VAT-u należnego przy samoopodatkowaniu (WNT, import usług, odwrotne obciążenie), który pochodzi z domyślnego schematu sprzedaży.

Księgowanie równoległe — pełny przykład

Księgowanie równoległe to drugi, towarzyszący zapis tego samego zdarzenia — najczęściej przeksięgowanie kosztu z zespołu 4 (koszty rodzajowe) na zespół 5 (koszty według miejsc powstawania) przez konto 490. V-Desk przysyła je w tej samej tablicy dekret[], co zapisy podstawowe, odróżnione wyłącznie obecnością pola zapisRownolegly.

Dokument z jednym kosztem, rozdzielonym równolegle na dwa miejsca powstawania:

{
  "id": 40251,
  "rodzajDokumentu": "FZ",
  "numerFaktury": "FV/2026/08/0042",
  "kontrahentNazwa": "Kontrahent B Sp. z o.o.",
  "kontrahentNip": "2222222222",

  "dataWystawienia": "04.08.2026",
  "dataWplywu": "06.08.2026",
  "terminPlatnosci": "18.08.2026",

  "opis": "Energia elektryczna 07/2026",
  "pozycjaNetto": 8000.00,
  "pozycjaBrutto": 9840.00,
  "waluta": "PLN",
  "kurs": 1.0,

  "pozycjeVAT": [
    { "pozycjaNetto": 8000.00, "pozycjaVAT": "23", "pozycjaKwotaVat": 1840.00, "pozycjaBrutto": 9840.00 }
  ],

  "dekret": [
    // --- zapisy podstawowe: brak pola zapisRownolegly ---
    { "strona": "winien", "konto": "402-1", "kwota": 8000.00, "opis": "Energia elektryczna 07/2026" },
    { "strona": "ma",     "konto": "202",   "kwota": 9840.00, "opis": "Energia elektryczna 07/2026" },

    // --- zapisy równoległe: rozksięgowanie kosztu 4 -> 5 przez 490 ---
    { "strona": "ma",     "konto": "490",     "kwota": 8000.00, "zapisRownolegly": 33 },
    { "strona": "winien", "konto": "550-1",   "kwota": 5000.00, "zapisRownolegly": 33 },
    { "strona": "winien", "konto": "527-3",   "kwota": 3000.00, "zapisRownolegly": 33 }
  ],

  "nrKSEF": "2222222222-20260804-BC02DE34FG56-7B",
  "dataKSEF": "04.08.2026"
}

Jak aplikacja przenosi to do Symfonii FK

ZasadaSzczegóły
Osobna grupa zapisów Pozycje równoległe trafiają do własnej grupy księgowej, dodawanej po zapisach podstawowych i po zapisach VAT. Nie są doklejane do grupy podstawowej.
Znacznik przekazywany bez zmian Wartość zapisRownolegly z JSON-a idzie do FK taka, jaka przyszła. Aplikacja nie wpisuje 33 na sztywno, więc inna kombinacja bitów zadziała bez zmian w programie.
Strona zapisu "ma" → strona MA, każda inna wartość → strona WN.
Opis Pozycje równoległe nie mają w JSON-ie pola opis, więc aplikacja podstawia opis pierwszego podstawowego zapisu WN — bez tego zapisy w księgach byłyby bezopisowe.
Konto zobowiązania Jeżeli pozycja równoległa wskazuje to samo konto, co podstawowy zapis MA (zwykle 202, dla dokumentów FZJP 213), jest rozwijana identycznie jak on — kontem ze schematu dekretacji z analityką kontrahenta. Inaczej trafiłaby na nagą syntetykę i rozrachunek by się nie sparował. Pozostałe konta brane są wprost z JSON-a.
Brak rozrachunku Dla pary równoległej nie jest zakładany rozrachunek, ponieważ API nie przekazuje dla niej terminu płatności.
Komunikat „Nie wypełniono rozrachunków”. Symfonia zgłasza go bez wskazania, którego zapisu dotyczy. Przy dokumencie z księgowaniem równoległym aplikacja dopisuje własne ostrzeżenie z listą kont zapisów równoległych oraz kontem podstawowego MA — żeby dało się odróżnić brak rozrachunku wynikający z konstrukcji zapisu równoległego od realnego błędu konfiguracji konta.
Kolejność pozycji w tablicy dekret[] nie ma znaczenia — aplikacja rozdziela je po obecności pola zapisRownolegly, a nie po pozycji w tablicy. Suma kwot równoległych nie musi się równać sumie zapisów podstawowych: powyżej koszt 8 000,00 rozdzielono na dwa miejsca powstawania, a zapis podstawowy MA opiewa na kwotę brutto.

Odporność na błędne rekordy

Odpowiedź jest przetwarzana rekord po rekordzie: pojedyncza faktura o nieoczekiwanej strukturze jest raportowana użytkownikowi i pomijana, a pozostałe dokumenty z odpowiedzi zostają wczytane. Awaria jednego dokumentu nie przerywa całego pobrania.

7. POST /company/import — wysyłka kontrahentów

POST/company/import?apikey={klucz}&company={kod}

Przenosi kartotekę kontrahentów z bazy Symfonii FK do V-Desk. Aplikacja wysyła po jednym kontrahencie na żądanie (tablica jednoelementowa), dzięki czemu błąd jednego rekordu nie przerywa całej operacji — na końcu użytkownik dostaje zbiorczy raport.

Parametry zapytania

ParametrTypWymaganyOpis
apikeystringtakKlucz API instancji.
companystringtakKod firmy. Bez niego serwer odpowiada HTTP 500 company parameter is mandatory.

Przykładowe żądanie

POST /api/company/import?apikey=a1b2c3d4e5f60718293a4b5c6d7e8f90&company=FIRMA HTTP/1.1
Host: firma-przykladowa.vdesk.przyklad.pl
Content-Type: application/json
Accept: application/json
User-Agent: C# App

[
  {
    "id": 1042,
    "name": "Kontrahent A Sp. z o.o.",
    "nip": "1111111111",
    "city": "Miasto Przykładowe",
    "country": "PL",
    "postalCode": "00-001",
    "address": "Przykładowa 12/3",
    "postOffice": null,
    "phone": "+48 00 000 00 00",
    "email": "kontakt@przyklad.example",
    "description": "Kontrahent przeniesiony z Symfonia FK",
    "nrb": "PL00 0000 0000 0000 0000 0000 0000",
    "status": 1
  }
]

Pola obiektu kontrahenta

PoleTypŹródło w Symfonii FK
idintPozycja kontrahenta w kartotece Symfonii — pełni rolę klucza dopasowania po stronie V-Desk.
namestringNazwa kontrahenta.
nipstringNIP.
citystringMiejscowość.
countrystringKod kraju.
postalCodestringKod pocztowy.
addressstringUlica z numerem.
postOfficestringPoczta. Pole obsługiwane przez API, ale aplikacja go obecnie nie wypełnia.
phonestringTelefon.
emailstringAdres e-mail.
descriptionstringOpis kontrahenta.
nrbstringNumer rachunku bankowego. Pole jest pomijane, gdy w Symfonii nie ma zapisanego rachunku.
statusintStatus aktywności kontrahenta.

Odpowiedź

{ "status": "ok", "msg": "" }

Odpowiedź inna niż status: "ok", kod HTTP spoza zakresu sukcesu albo treść, która nie jest poprawnym JSON-em, kończą się dopisaniem kontrahenta do raportu błędów wraz z dosłowną treścią odpowiedzi serwera (przycinaną do 600 znaków).

8. POST /invoice/import/pk — zwrot numeru dokumentu Symfonii

POST/invoice/import/pk?apikey={klucz}

Po zaksięgowaniu faktury w buforze Symfonii aplikacja może odesłać do V-Desk numer nadanego dokumentu (PK). Dzięki temu w V-Desk widać, że dokument został już przeniesiony do księgowości — i to właśnie na tej podstawie działa filtr showImported przy pobieraniu.

Przykładowe żądanie

POST /api/invoice/import/pk?apikey=a1b2c3d4e5f60718293a4b5c6d7e8f90 HTTP/1.1
Host: firma-przykladowa.vdesk.przyklad.pl
Content-Type: application/json
Accept: application/json
User-Agent: C# App

[
  {
    "id": 104821,
    "numerDokumnetuSymfonia": "3/2026"
  }
]

Pola

PoleTypOpis
iduintIdentyfikator dokumentu w V-Desk — ten sam, który przyszedł w /invoice/export.
numerDokumnetuSymfoniastringNumer dokumentu nadany przez Symfonię FK przy zapisie do bufora.
Nazwa pola numerDokumnetuSymfonia zawiera literówkę (Dokumnetu zamiast Dokumentu), ale jest częścią kontraktu API — należy ją stosować dosłownie. Poprawienie pisowni po stronie klienta spowoduje, że serwer nie rozpozna wartości.
Stan na dziś: na części instancji V-Desk ta końcówka odpowiada błędem HTTP 500 niezależnie od poprawności ciała żądania. Przyczyna leży po stronie serwera. Jeżeli zwrot numeru nie działa, funkcję automatycznego odsyłania ID można wyłączyć w ustawieniach aplikacji — nie blokuje to księgowania, a jedynie oznaczanie dokumentów jako przeniesionych.

9. POST <słownik> — wysyłka słowników

POST{ścieżka słownika}?apikey={klucz}

V-Desk przyjmuje słowniki pomocnicze (rodzaje kosztów, marki, wymiary analityczne itp.). Ścieżka końcówki nie jest zaszyta w aplikacji — użytkownik definiuje ją samodzielnie razem z nazwą słownika, ponieważ zestaw słowników różni się między wdrożeniami. Przykładowe ścieżki spotykane we wdrożeniach: /import/costtype, /brand/import.

Przykładowe żądanie

POST /api/import/costtype?apikey=a1b2c3d4e5f60718293a4b5c6d7e8f90 HTTP/1.1
Host: firma-przykladowa.vdesk.przyklad.pl
Content-Type: application/json
Accept: application/json
User-Agent: C# App

[
  { "value": "MAT", "description": "Materiały",        "isActive": "1" },
  { "value": "USL", "description": "Usługi obce",      "isActive": "1" },
  { "value": "TRA", "description": "Transport",        "isActive": "0" }
]

Pola pozycji słownika

PoleTypOpis
valuestringKod pozycji słownika.
descriptionstringNazwa opisowa pozycji.
isActivestring"1" — pozycja aktywna, "0" — nieaktywna. Wartość tekstowa, nie logiczna.

W jednym żądaniu wysyłane są wszystkie zaznaczone pozycje danego słownika. Odpowiedź ma standardowy format statusu (rozdział 4.1).

10. Obsługa błędów

Kod / objawTypowa przyczynaCo zrobić
400Invalid company type [X]. Allowed values: [...] — kod firmy spoza listy dozwolonej dla instancji.Ustawić kod firmy zgodnie z listą podaną w komunikacie.
401 / 403Nieprawidłowy, wygasły lub cofnięty klucz API.Uzyskać nowy klucz od dostawcy V-Desk.
404Zły adres bazowy albo końcówka nieudostępniona na tej instancji.Sprawdzić adres bazowy (bez ukośnika i bez ścieżki) oraz to, czy dana operacja jest w ogóle włączona dla klienta.
500company parameter is mandatory — brak wymaganego kodu firmy.Uzupełnić kod firmy w ustawieniach.
500Błąd wewnętrzny serwera — m.in. znany problem końcówki /invoice/import/pk.Zgłosić dostawcy V-Desk z dokładną treścią odpowiedzi (bez klucza API).
200, ale nie JSONSerwer zwrócił stronę HTML (np. ekran logowania portalu albo komunikat serwera pośredniczącego).Sprawdzić, czy adres bazowy prowadzi do API, a nie do interfejsu przeglądarkowego.
200, statusokŻądanie doszło, ale operacja została odrzucona logicznie — przyczyna w polu msg.Przeczytać msg; przy wysyłce kontrahentów treść trafia do raportu zbiorczego.
Niepowodzenie testu połączenia w aplikacji nie zawsze oznacza błędną konfigurację — część instancji ma wyłączone poszczególne końcówki. Rozstrzygająca jest treść odpowiedzi serwera, nie sam fakt niepowodzenia.

11. Jak dane z V-Desk trafiają do Symfonii FK

Aplikacja nie zapisuje niczego wprost do bazy danych Symfonii — korzysta wyłącznie z obiektów integracji dostarczanych przez producenta systemu Symfonia. Poniżej skrót odwzorowania danych z API na dokument księgowy.

Dane z APIOdwzorowanie w Symfonii FK
pozycjeVAT[]Osobny rejestr VAT dla każdej stawki, z podstawą i kwotą podatku przeliczonymi na złote według kurs. Stawki NP/OO, ZW i BP mapowane są na odpowiadające im oznaczenia Symfonii.
dekret[] bez zapisRownoleglyZapisy podstawowe grupy księgowej: pozycje winien na kontach kosztowych, jedna pozycja ma na koncie zobowiązania. Do zapisu ma zakładany jest rozrachunek z terminem płatności.
dekret[] z zapisRownoleglyOsobna grupa zapisów równoległych, dodawana po zapisach podstawowych i po VAT. Rozrachunek nie jest zakładany, ponieważ API nie przekazuje terminu płatności dla pary równoległej.
nrKSEF, dataKSEFNumer i data KSeF na nagłówku dokumentu. Numer służy też do rozpoznawania dokumentów już zaksięgowanych.
brak nrKSEFNagłówek dokumentu dostaje znacznik JPK_V7 BFK (faktura poza KSeF).
walutaPLNNa każdym zapisie ustawiane są waluta, kurs i kwota walutowa; kwoty księgowe przeliczane są na złote.
idZapamiętywany, żeby po zaksięgowaniu odesłać numer PK końcówką /invoice/import/pk.

12. Bezpieczeństwo i dobre praktyki