POST request vždy, keď nastane vybraná obchodná udalosť.
Webhooky v Fintoro API sú navrhnuté ako tenký trigger, nie ako paralelný snapshot API. Payload doručenia vždy obsahuje len identitu udalosti, jej typ a odkaz na resource cez resource.type + resource.id. Detail si následne dotiahnete z Fintoro API vo verzii, ktorú používa Vaša integrácia.
Kedy webhooky použiť
- keď potrebujete reagovať na vytvorenie, úpravu alebo zmazanie bez toho, aby ste stav zmien stavali na periodickom dotazovaní,
- keď si chcete lokálnu cache alebo downstream systém synchronizovať len pri reálnej zmene,
- keď potrebujete oddeliť prijatie udalosti od následného načítania detailu resource-u.
webhook-id na deduplikáciu a až potom si načítate detail resource-u z Fintoro API. Periodické dotazovanie nechajte len ako backfill alebo kontrolný fallback, nie ako primárny trigger zmien.
Správa odberov
Odbery webhookov spravujete priamo cez Fintoro API. Secret v otvorenej podobe sa zobrazí iba pri vytvorení odberu alebo pri jeho manuálnej rotácii. Presný CRUD kontrakt, request schémy a response payloady nájdete priamo v Webhook API referencii. Prakticky to znamená:- hodnotu
plainTextSecretsi musíte bezpečne uložiť pri create alebo rotate odpovedi, - zmena
urlanisubscribedEventssecret automaticky nerotuje, isActive = falsehistorické záznamy nevypína, len zastaví nové pokusy o doručenie.
Požiadavky na endpoint
Pri ukladaní alebo update odberu nestačí, abyurl bola len syntakticky validná HTTPS adresa. Fintoro endpoint overuje prísnejšie:
urlmusí používaťhttps://,urlnesmie obsahovať používateľské meno ani heslo,- hostname sa musí resolvnuť na verejnú IP adresu,
localhost,.local, privátne rozsahy, loopback, link-local a iné rezervované adresy backend odmietne.
Payload doručenia
Payload webhooku je zámerne tenký:Význam polí
Payload neobsahuje:
- verziu API,
- absolútnu ani relatívnu URL na resource,
- plný snapshot resource-u,
- vnorené lookupy alebo vnorené obchodné objekty.
Delivery headery
Každý webhook request obsahuje tieto hlavičky:webhook-id a webhook-timestamp nepodpisujete samostatne do vlastného kanonického reťazca. Podpis sa počíta nad raw request body presne v tvare, v akom prišiel.
Overenie podpisu
Overenie requestu by malo mať štyri vrstvy:- skontrolujte, že request obsahuje všetky webhook headery,
- skontrolujte, že
webhook-timestampnie je príliš starý alebo príliš ďaleko v budúcnosti, - vypočítajte HMAC SHA-256 nad raw request body a porovnajte ho v constant-time režime,
- deduplikujte podľa
webhook-id, aby ste vedeli bezpečne spracovať opakované doručenie.
Odporúčaný flow
Pseudokód
JavaScript / Node.js-like príklad
Ako odpovedať na delivery
- Vráťte
2xxaž keď ste request bezpečne prijali, overili a uložili na ďalšie spracovanie. - Ak signature alebo timestamp nesedia, vráťte
401alebo inú vlastnú autentifikačnú chybu podľa politiky prijímača webhookov. - Pri dočasnom downstream probléme vráťte non-
2xx, ak chcete, aby systém webhook zopakoval. - Ak request prijmete, ale ešte len zaraďujete interné spracovanie do fronty,
204 No Contentje úplne v poriadku.
- idempotentný,
- odolný voči duplicitám,
- schopný vrátiť
2xxaj pri znovu doručenom už spracovanomwebhook-id.
Mechanizmus opakovania
Fintoro považuje doručenie za neúspešné, keď:- prijímač webhookov vráti non-
2xxHTTP status, - request timeoutne,
- nastane sieťová chyba pri odoslaní.
- endpoint pri predodovacej kontrole už neprejde bezpečnostnou validáciou URL, DNS a IP adresy.
Prakticky to znamená tento typický priebeh:
Po vyčerpaní všetkých pokusov sa doručenie označí ako finálne neúspešné. Odber sa automaticky nevypína len preto, že jeden alebo viac pokusov zlyhalo.
Z pohľadu prijímača webhookov je dôležité:
- nepredpokladať exactly-once delivery,
- rátať s tým, že ten istý
webhook-idmôže prísť opakovane, - odpovedať rýchlo a ťažšiu logiku delegovať do internej fronty,
- vracať non-
2xxlen vtedy, keď naozaj chcete, aby Fintoro doručenie zopakovalo.
Thin payload a následné načítanie detailu
Odporúčaný integračný flow:- prijmite webhook a overte podpis,
- deduplikujte podľa
webhook-id, - podľa
typearesourceurčite, ktorý endpoint detailu potrebujete, - detail si načítajte z Fintoro API vo verzii, ktorú používa Vaša integrácia,
- business logiku robte až nad načítaným detailom.
clients.updated+resource.id = 42→GET /clients/42invoices.created+resource.id = 301→GET /invoices/301warehouse-outbound-receipts.deleted+resource.id = 88→ ak už detail neexistuje, spracujte delete lokálne len podľa payloadu eventu
Dostupné eventy
Master data
CRM
Sklady a katalóg
Doklady
Praktické odporúčania pre produkciu
- nepúšťajte ťažkú business logiku priamo vo vlákne HTTP requestu prijímača webhookov,
- raw payload aj
webhook-idsi ukladajte pred ďalším spracovaním, - secret rotujte kontrolovane a s plánom výmeny na strane prijímača webhookov,
- sledujte retry vzory a opakované non-
2xxodpovede ako indikátor incidentu na strane prijímača webhookov, - logujte si
webhook-id,type,resource.type,resource.idaX-Request-Idz následného načítania detailu, - pri delete eventoch sa nespoliehajte na to, že detail endpoint ešte stále vráti resource.

