API widgetu trade-in i webhooki
Osadzenie widgetu, synchronizacja statusów webhookami HMAC-SHA256 i katalog po stronie FastTradein.
Szybki start
Osadźcie widget za pomocą dwóch linii kodu HTML, a następnie dodajcie domenę sklepu do listy dozwolonych. Skrypt komunikuje się wyłącznie z FastTradein, a nie z waszym CMS-em.
Wklejcie fragment w HTML strony trade-in. Zamieńcie klucz w kodzie na publiczny klucz widgetu z panelu.
<!-- FastTradein Widget -->
<script src="https://fasttradein.app/widget/fasttradein.js" async data-no-optimize="1" data-no-defer="1"></script>
<fasttradein-widget key="WASZ_KLUCZ_PUBLICZNY" api="https://fasttradein.app" lang="pl"></fasttradein-widget>
Snippet ustawia api na ten host FastTradein. Bez niego widget używa adresu, z którego wczytano skrypt fasttradein.js.
Parametry snippetu
| Parametr | Wymagany | Znaczenie |
|---|---|---|
| key | Wymagany: Tak | Publiczny klucz sklepu z ustawień panelu. Pozwala odczytywać katalog, pobierać wyceny i wysyłać zgłoszenia trade-in. Nie pozwala zmieniać cen ani uzyskać dostępu do innych sklepów. |
| data-key | Wymagany: Nie | Ten sam klucz publiczny co key. React i Vue rezerwują atrybut key i nie przekazują go do elementu, więc tam użyjcie data-key. Widget czyta najpierw key, potem data-key i uruchamia się ponownie, gdy któryś się zmieni. |
| lang | Wymagany: Nie | Początkowy język interfejsu (klient może go zmienić): en, de, es, pl, ru, uk. |
| api | Wymagany: Nie | Origin FastTradein, na przykład https://fasttradein.app. Zostawcie go w snippecie. |
| currency | Wymagany: Nie | To nie atrybut HTML. Waluta witryny (EUR, PLN, UAH, USD i inne z panelu) pochodzi z ustawień sklepu. Ceny katalogowe pozostają w euro i są przeliczane po kursie platformy. |
Zdarzenia do mierzenia konwersji
Element wysyła zdarzenie fasttradein:quote, gdy klient dostaje wycenę, i fasttradein:order, gdy zgłoszenie zostanie wysłane. Oba propagują się w górę i przechodzą przez shadow DOM (composed), więc nasłuchujcie ich na elemencie albo na document. event.detail zawiera device i blocked (wycena) albo device i payout_method (zgłoszenie), nigdy danych klienta.
Snippety CMS
Instrukcje dla 111 platform. Przed publikacją dodajcie domenę sklepu do dozwolonych domen widgetu.
Pokazano platform: 111 z 111
WooCommerce Światowe
Strony → strona trade-in → blok „Własny HTML”: wklejcie kod na karcie HTML i zapiszcie stronę. Dla wielu stron linię <script> można załadować w stopce motywu (Wygląd → Edytor → Wzorce → Stopka, po angielsku Footer) lub wtyczką WPCode, a na stronach zostawić tylko tag widgetu.
OpenCart Światowe
Wygląd → Układy: dodajcie moduł HTML Content ze snippetem do układu strony trade-in. Możecie też wczytać samą linię <script> w catalog/view/theme/<theme>/template/common/footer.twig (OpenCart 3) albo catalog/view/template/common/footer.twig (OpenCart 4), a tag <fasttradein-widget …></fasttradein-widget> zostawić tylko w module na stronie trade-in, bo stopka wyświetla się na każdej stronie.
Shopify Światowe
Sklep online → Edytuj szablon: utwórzcie szablon strony (Strony → Utwórz szablon), dodajcie do niego sekcję Niestandardowy kod Liquid (Custom Liquid) z kodem i zapiszcie. Potem w sekcji Sklep online → Strony wybierzcie ten szablon dla strony trade-in. Jeśli motyw nie ma tej sekcji, wklejcie kod do szablonu strony w edytorze kodu motywu.
PrestaShop Światowe
Zainstalujcie bezpłatny moduł FastTradein: Moduły → Menedżer modułów → Załaduj moduł, potem Konfiguruj, i wklejcie kod albo klucz. Wpiszcie [fasttradein] w osobnej linii w treści strony w Wygląd → Strony. PrestaShop nie zapisuje <script> w treści strony i usuwa tag widgetu, dlatego widget wstawia moduł przy wyświetlaniu strony.
Magento / Adobe Commerce Światowe
Content → Elements → Blocks → Utwórzcie statyczny blok HTML i wyświetlcie go przez Content → Pages.
Wix Światowe
Dodaj elementy → Osadź kod → Element niestandardowy (Custom Element). Źródło: Server URL = https://fasttradein.app/widget/fasttradein.js, Tag Name = fasttradein-widget. Atrybuty: data-key = WASZ_KLUCZ_PUBLICZNY, api = https://fasttradein.app, lang = pl. Wymaga planu Premium z podłączoną domeną. Nie używajcie elementu „Osadź HTML” (Embed HTML): ten kod działa w iframe w innej domenie i widget go odrzuci.
BigCommerce Światowe
Storefront → Script Manager dla skryptu, a znacznik <fasttradein-widget> umieśćcie przez Page Builder (widget HTML).
Squarespace Światowe
Edytujcie stronę trade-in: dodajcie blok Code (HTML) i wklejcie snippet. JavaScript w bloku Code działa tylko w planach Core, Plus, Advanced i Commerce, a widget widać dopiero na opublikowanej stronie.
Shopware 6 Europa
Od wersji 6.5 sanitizer HTML Shopware domyślnie usuwa z treści edytora nieznane tagi i <script>, dlatego najpierw dopuśćcie tag fasttradein-widget w shopware.html_sanitizer (config/packages/z-shopware.yaml). Potem w Content → Shopping Experiences (Erlebniswelten) → układ strony trade-in dodajcie element Text, przełączcie jego edytor w widok kodu HTML i wklejcie tylko tag <fasttradein-widget …></fasttradein-widget>. Linię <script> wczytajcie w footer.html.twig motywu.
Ecwid by Lightspeed Światowe
Instant Site: dodajcie sekcję Custom code na stronie trade-in (plany Ecwid: Venture, Business lub Unlimited). Na własnej witrynie wklejcie snippet na stronie trade-in obok kodu Ecwid.
Webflow Światowe
Add Elements → Components → Embed (HTML Embed Code) na stronie trade-in, potem opublikujcie witrynę. Code Embed wymaga płatnego planu Site lub Workspace.
Drupal Commerce Światowe
Structure → Block layout → Dodajcie Custom Block w formacie Full HTML w wybranym regionie albo w Layout Builderze.
Framer Światowe
Dodajcie komponent Embed na planszy, ustawcie typ HTML i wklejcie skrypt oraz znacznik <fasttradein-widget>.
nopCommerce Światowe
Administration → Content Management → Topics (Pages) → Otwórzcie stronę trade-in i wklejcie snippet w trybie Source code.
Salesforce Commerce Cloud Światowe
Merchant Tools → Content → Content Assets → Utwórzcie zasób HTML i umieśćcie go w Page Designer.
HubSpot CMS Światowe
Content → Design Manager: utwórzcie moduł Custom HTML ze snippetem i dodajcie go do strony trade-in albo wklejcie snippet w trybie Source Code edytora Rich Text.
Ghost Światowe
Na stronie trade-in dodajcie w edytorze kartę HTML ze snippetem. Możecie też wkleić samą linię <script> w Settings → Code injection (Site Footer), a tag <fasttradein-widget …></fasttradein-widget> zostawić w karcie HTML.
Weebly Światowe
Przeciągnijcie element Embed Code (HTML) na stronę trade-in i kliknijcie Edit Custom HTML.
SAP Commerce Cloud Światowe
SmartEdit → Dodajcie komponent CMS typu Paragraph lub Custom HTML na stronie trade-in w katalogu WCMS.
Oracle Commerce Światowe
Design Studio → Utwórzcie Custom Widget z kodem HTML i umieśćcie go w układzie strony.
Square Online Światowe
Edytor witryny → Dodaj sekcję → Kod osadzony (Embed code): wklejcie snippet i opublikujcie. Wymaga planu Square Online Plus lub Premium.
Volusion Światowe
Design → Site Designer: dodajcie blok Custom Code (HTML) ze snippetem na stronie trade-in. Jeśli używacie pliku footer_custom.html, wklejcie tam tylko linię <script>, a tag <fasttradein-widget …></fasttradein-widget> zostawcie w bloku na stronie trade-in.
Shift4Shop Światowe
Content → Site Pages → Edit Page → Przełączcie edytor w tryb źródła HTML i wklejcie kod.
NetSuite SuiteCommerce Światowe
SuiteCommerce Advanced → Dodajcie blok CMS Custom Content albo umieśćcie snippet w szablonie layoutu motywu.
Zoho Commerce Światowe
Settings → Visual Builder → Dodajcie element Embed code na stronie trade-in i zapiszcie zmiany.
VTEX Światowe
VTEX IO / Site Editor → Utwórzcie własny blok albo dodajcie web component widgetu w layoucie Store Framework.
Carrd Światowe
+ → Embed → Type: Code, Style: Inline: wklejcie skrypt i tag <fasttradein-widget>, następnie opublikujcie stronę. Element Embed wymaga planu Carrd Pro Standard lub wyższego.
Hostinger Światowe
Kreator stron → dodajcie element Embed code i wklejcie snippet.
MODX Światowe
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
GoDaddy Światowe
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Miva Światowe
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Nuvemshop / Tiendanube Światowe
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Cafe24 Światowe
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
SHOPLINE Światowe
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
thebase Światowe
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Salla Światowe
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Tray Commerce Światowe
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Shoper Europa
Ustawienia → Zaawansowane → Bezpieczeństwo: włączcie „Wyłącz czyszczenie kodu HTML”. Potem Wygląd i treści → Wygląd sklepu → Obecny szablon graficzny → Moduły → Moduł własny w trybie HTML: wklejcie snippet i umieśćcie moduł na stronie trade-in.
IdoSell Europa
Sklep → Dodatki HTML/JS: dodajcie nowy dodatek, w „Wyświetlaj na podstronach” wybierzcie „Wybranych” i podajcie adres strony trade-in, a snippet wklejcie w polu kodu HTML.
JTL-Shop Europa
JTL-Shop 5 nie ma wbudowanego pola na własny kod: wczytajcie <script> przez szablon potomny (layout/footer.tpl, blok layout-footer-js) albo wtyczkę z JTL-Store do kodu w nagłówku i stopce, a tag <fasttradein-widget …></fasttradein-widget> wklejcie na stronie trade-in w trybie kodu HTML.
Gambio Europa
Inhalte → Content Manager: utwórzcie stronę trade-in i przełączcie edytor w tryb źródła HTML.
Sylius Europa
Wczytajcie linię <script> w nadpisanym szablonie templates/bundles/SyliusShopBundle/layout.html.twig (@SyliusShop/layout.html.twig), a tag <fasttradein-widget …></fasttradein-widget> umieśćcie na stronie trade-in.
Lightspeed eCom Europa
Settings → Web Extras → Custom JavaScript / HTML albo wklejcie kod w szablon motywu.
Spryker Europa
Wbudujcie komponent web w szablon Yves storefront (Twig) lub dołączcie skrypt w głównym layoucie witryny.
Plentymarkets Europa
CMS → Kontener → Wklejcie kod HTML widgetu w szablon Ceres lub do bloku własnej zawartości.
OXID eShop Europa
Customer Info → CMS Pages: utwórzcie stronę trade-in i wklejcie snippet w trybie źródła HTML. Jeśli edytor usuwa skrypt, wczytajcie linię <script> w bazowym layoucie motywu (OXID 6: Application/views/<theme>/tpl/layout/base.tpl; OXID 7: odpowiedni szablon Twig), a na stronie zostawcie tylko tag <fasttradein-widget …></fasttradein-widget>.
Shoptet Europa
Wygląd → Kody HTML albo dodajcie blok HTML na stronie trade-in.
Webnode Europa
Otwórzcie stronę trade-in i dodajcie element HTML ze snippetem.
Sky-Shop Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
RedCart Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
AtomStore Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Comarch e-Sklep Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Sote Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Selly Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Unas Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
ShopRenter Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
CloudCart Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
MerchantPro Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Gomag Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
CCV Shop Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Mijnwebwinkel Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
MyOnlineStore Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
modified eCommerce Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
xt:Commerce Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Intershop Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
TYPO3 Europa
Dodajcie element treści HTML na stronie trade-in albo wstawcie snippet do szablonu strony.
Jimdo Europa
Dodajcie element HTML na stronie trade-in i wklejcie snippet.
ePages Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Vilkas Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
MyCashflow Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
DanDomain Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
SmartWeb Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Abicart Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Starweb Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Jetshop Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Mystore Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
VirtueMart Europa
Artykuł Joomla strony trade-in → tryb źródła. Jeśli edytor wycina skrypt, podepnijcie go w szablonie, a tag widgetu zostawcie w artykule.
Odoo Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
JouwWeb Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Webador Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Upgates Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
EKM Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Visualsoft Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
IONOS Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Strato Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Mozello Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Litium Europa
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Medusa.js Headless
Podłączcie skrypt widgetu w layoucie storefrontu Next.js albo Remix i dodajcie web component <fasttradein-widget> na stronie trade-in. W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
Saleor Headless
Podłączcie skrypt widgetu w storefront (React / Next.js) i użyjcie web componentu <fasttradein-widget> w JSX. W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
Vendure Headless
Podłączcie skrypt widgetu w layoucie storefrontu (aplikacji frontendowej) i dodajcie znacznik <fasttradein-widget> na stronie trade-in. W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
commercetools Headless
Dołączcie skrypt widgetu do waszego storefrontu w React, Vue albo Next.js i użyjcie znacznika <fasttradein-widget>. W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
Swell Headless
Dołączcie skrypt widgetu do szablonu storefrontu Swell (Next.js storefront / custom theme) i dodajcie tag na stronie trade-in. W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
Strapi Headless
Użyjcie komponentu widgetu we frontendzie pobierającym treści ze Strapi (Next.js, Gatsby, Nuxt, Astro). W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
Contentful Headless
Osadźcie znacznik widgetu w szablonie strony trade-in w aplikacji frontendowej połączonej z Contentful API. W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
Sanity Headless
Wstawcie web component widgetu do waszej aplikacji frontendowej (Next.js / Remix / SvelteKit) zintegrowanej z Sanity Studio. W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
Next.js Storefront Headless
Wczytajcie skrypt przez <Script src="https://fasttradein.app/widget/fasttradein.js" strategy="afterInteractive" /> z next/script w app/layout. Na stronie trade-in wstawcie <fasttradein-widget data-key="WASZ_KLUCZ_PUBLICZNY" api="https://fasttradein.app" lang="pl"></fasttradein-widget>. React nie przekazuje atrybutu key do elementu, dlatego użyjcie data-key. W TypeScript zadeklarujcie fasttradein-widget w JSX.IntrinsicElements.
Nuxt.js Storefront Headless
Wczytajcie skrypt przez useHead({ script: [{ src: "https://fasttradein.app/widget/fasttradein.js", defer: true }] }) i oznaczcie tag jako element niestandardowy w nuxt.config: vue.compilerOptions.isCustomElement = (tag) => tag === "fasttradein-widget". Na stronie trade-in dodajcie <fasttradein-widget data-key="WASZ_KLUCZ_PUBLICZNY" api="https://fasttradein.app" lang="pl"></fasttradein-widget>. Vue zatrzymuje atrybut key dla siebie, dlatego użyjcie data-key.
Vue Storefront Headless
Podepnijcie skrypt widgetu w layoucie witryny i umieśćcie tag <fasttradein-widget> na stronie trade-in. W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
Commerce Layer Headless
Podepnijcie skrypt widgetu w layoucie witryny i umieśćcie tag <fasttradein-widget> na stronie trade-in. W React i Vue podajcie klucz jako data-key: nie przekazują one atrybutu key do elementu.
Django Framework
Podepnijcie skrypt w szablonie bazowym i umieśćcie tag <fasttradein-widget> na stronie trade-in.
Laravel Framework
Podepnijcie skrypt w layoucie Blade i umieśćcie tag <fasttradein-widget> na widoku trade-in.
Ruby on Rails Framework
Podepnijcie skrypt w application layout i umieśćcie tag <fasttradein-widget> na widoku trade-in.
Symfony Framework
Podepnijcie skrypt w bazowym szablonie Twig i umieśćcie tag <fasttradein-widget> na stronie trade-in.
Horoshop Ukraina
Settings → General settings → Scripts: wklejcie linię <script> w pole „before the </body> tag” i zapiszcie. Potem otwórzcie stronę trade-in, przełączcie edytor opisu w tryb kodu HTML i wklejcie tag <fasttradein-widget …></fasttradein-widget>.
Cartum Ukraina
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
OkayCMS Ukraina
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
SoloMono Ukraina
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
ImageCMS Ukraina
Wklejcie snippet na stronie trade-in w trybie HTML lub źródła. Jeśli edytor usuwa skrypt, umieśćcie skrypt w nagłówku lub stopce strony, a tag widgetu zostawcie na stronie.
Prom.ua Ukraina
Prom.ua nie pozwala dodawać własnych skryptów do strony firmy, więc widget tam nie zadziała. Umieśćcie widget na własnej stronie lub landing page i dodajcie do niej link ze swojego sklepu na Prom.
Shop-Express Ukraina
Panel → Ustawienia → Własne skrypty / HTML → Wklejcie kod na stronie trade-in.
Weblium Ukraina
Ustawienia witryny → Własny kod (Custom code) w Head/Body albo blok Kod osadzony (Embed code) na stronie trade-in. Własny kod wymaga planu Pro w Weblium.
Brak wyników. Zmieńcie zapytanie albo zresetujcie filtr.
Bezpieczeństwo i dozwolone domeny
API widgetu jest publiczne z założenia, ale przypisane do waszego sklepu. Nie daje dostępu do logowania w panelu, edycji cen ani do innych sklepów.
Dozwolone domeny (CORS / Origin)
To adresy stron, na których może działać wasz widget. Przeglądarka wysyła Origin albo Referer. FastTradein wpuszcza tylko hosty z listy dozwolonych domen w panelu oraz sam host FastTradein. Żądanie z obcej strony dostaje odpowiedź 403 Forbidden.
Publiczny klucz
widgetKey w URL to publiczny identyfikator. Można nim czytać katalog sklepu i składać zgłoszenie. Nie pozwala zmieniać cen, eksportować danych innych klientów ani otwierać panelu.
Limity żądań
Endpointy widgetu przyjmują do 120 żądań na minutę z jednego adresu IP dla każdego sklepu. Wyszukiwanie ma niższy limit (20/min), a tworzenie zgłoszenia jeszcze niższy: 10 na minutę i 10 na dobę z jednego IP dla każdego sklepu oraz 8 na godzinę na e-mail klienta. Po przekroczeniu limitu API zwraca kod 429.
Ochrona przed botami
Tworzenie zgłoszenia ma ukryte pole honeypot. Spam, który je wypełnia, jest odrzucany bez zapisania zgłoszenia. Z własnej aplikacji klienckiej nie wysyłajcie dodatkowych nieznanych pól.
REST API witryny
Ścieżka bazowa: /api/widget/{widgetKey}. To ten sam publiczny interfejs, z którego korzysta skrypt witryny. Trasy panelu i administratora platformy nie należą do tego interfejsu.
Język katalogu, tekstów widgetu i kwot do wyświetlania ustawia parametr ?locale=pl. Pola formatted_amount i max_buyback_formatted zawierają gotowy tekst dla klienta: kwotę zaokrągloną do pełnych jednostek, z symbolem waluty i separatorem tysięcy, np. „1 235 €”. Format tego tekstu zależy od języka i waluty. Do obliczeń używajcie pól max_buyback i quoted_amount_cents: zawierają one kwoty w najmniejszych jednostkach waluty (dla euro są to centy). Na przykład quoted_amount_cents = 123456 oznacza 1234,56 euro.
/api/widget/{widgetKey}
Konfiguracja witryny
Zwraca nazwę sklepu, kolory, walutę, locale, włączone kategorie, metody wypłaty i teksty widgetu.
Przykład cURL
curl -sS "https://fasttradein.app/api/widget/WASZ_KLUCZ_PUBLICZNY?locale=pl" \
-H "Origin: https://shop.example" \
-H "Accept: application/json"
Przykład odpowiedzi 200 OK
{
"tenant": {
"name": "Your Store",
"currency": "EUR",
"locale": "pl",
"primary_color": "#1f3a8a",
"logo_url": null
},
"locale": "pl",
"accepting_orders": true,
"payout_methods": [
{
"value": "bank_transfer",
"label": "Przelew bankowy"
},
{
"value": "store_credit",
"label": "Środki na zakupy w tym sklepie"
}
],
"categories": [
{
"id": 1,
"slug": "smartphones",
"name": "Smartfony"
}
],
"catalog_version": "3f9a1c0b7e"
}
/api/widget/{widgetKey}/search?q=iPhone+13
Wyszukiwanie modeli
Szuka modeli po nazwie. Jeśli q ma mniej niż 2 znaki, odpowiedź zawiera do 6 popularnych modeli z "popular": true. Wyniki zawierają aktualną maksymalną kwotę skupu w tym sklepie (najwyżej 8 pozycji). Ukryte warianty nie są uwzględniane w wynikach.
Przykład cURL
curl -sS "https://fasttradein.app/api/widget/WASZ_KLUCZ_PUBLICZNY/search?q=iPhone+13" \
-H "Origin: https://shop.example" \
-H "Accept: application/json"
Przykład odpowiedzi 200 OK
{
"results": [
{
"model_id": 42,
"name": "iPhone 13",
"brand": "Apple",
"max_buyback": 42000,
"max_buyback_formatted": "420 €"
}
]
}
/api/widget/{widgetKey}/orders
Złożenie zgłoszenia skupu
Zgłoszenie skupu z widgetu albo z waszej własnej aplikacji. POST bez nagłówka Origin ani Referer dostaje 403, więc serwer lub aplikacja musi wysłać Origin: https://<wasza dozwolona domena>. Najpierw zbierzcie variant_id i answer_ids. Sukces to HTTP 201 z polem order_number.
Treść żądania (JSON)
| Pole | Wymagany | Znaczenie |
|---|---|---|
| variant_id | Wymagany: Tak | Aktywny wariant z katalogu. |
| answer_ids | Wymagany: Tak | ID odpowiedzi z kwestionariusza kategorii. Jedna odpowiedź na pytanie; pytanie z multiple: true przyjmuje kilka, a odpowiedź z exclusive: true musi być jedyną wybraną. |
| customer_name | Wymagany: Tak | Imię klienta. |
| customer_email | Wymagany: Tak | E-mail klienta. |
| customer_phone | Wymagany: Nie | Telefon, opcjonalnie. |
| payout_method | Wymagany: Nie | bank_transfer albo store_credit; store_voucher, jeśli sklep włączył bony sklepowe. Bez tego pola zgłoszenie dostaje bank_transfer. |
Przykład cURL
curl -sS -X POST "https://fasttradein.app/api/widget/WASZ_KLUCZ_PUBLICZNY/orders" \
-H "Origin: https://shop.example" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"variant_id":101,"answer_ids":[11,24],"customer_name":"Ada Lovelace","customer_email":"ada@example.com","customer_phone":"+49 170 000000","payout_method":"bank_transfer"}'
Zamieńcie https://shop.example na jedną z dozwolonych domen widgetu.
Przykład odpowiedzi 201 Created
{
"order_number": "TF-8PGPFFNLM6",
"quoted_amount_cents": 38000,
"formatted_amount": "380 €",
"currency": "EUR",
"status": "submitted"
}
Pozostałe publiczne trasy widgetu
Potrzebne, żeby zebrać variant_id i answer_ids przed POST /orders. Ten sam klucz, te same reguły CORS.
-
GET
/api/widget/{widgetKey}/catalog/{category}Marki, modele i warianty pamięci w kategorii (id albo slug). -
GET
/api/widget/{widgetKey}/questionnaire/{category}Grupy checklisty, pytania i ID odpowiedzi tej kategorii. multiple oznacza pytanie z kilkoma odpowiedziami, exclusive odpowiedź, która musi być jedyną wybraną. -
POST
/api/widget/{widgetKey}/quotesWycena wariantu z wybranymi odpowiedziami przed utworzeniem zgłoszenia. JSON: variant_id, answer_ids.
Webhooki
Webhooki są dostępne w planach Business i Pro. W panelu otwórzcie Ustawienia → Zgłoszenia do CRM, podajcie adres HTTPS i wygenerujcie tajny klucz. Potem FastTradein wysyła tam JSON o zdarzeniach poniżej, więc możecie zsynchronizować dowolny CRM albo ERP.
Zdarzenia
-
order.createdKlient złożył zgłoszenie na stronie. -
order.receivedSklep oznaczył, że urządzenie trafiło do magazynu. -
order.counter_offeredPo kontroli w magazynie zmieniła się kwota. Klient otrzymał chroniony link oferty. -
order.paidSklep oznaczył zgłoszenie jako wypłacone. -
order.acceptedKlient przyjął nową cenę po kontroli. -
order.declinedZgłoszenie zakończyło się bez transakcji: klient odrzucił nową cenę, urządzenie okazało się zablokowane przy kontroli albo sklep odmówił przyjęcia. data.status to declined lub cancelled.
Payload JSON
Treść żądania to zwarty JSON: ukośniki i znaki Unicode nie są escapowane. HMAC-SHA256 liczcie dokładnie z tych bajtów, bez żadnych zmian. order_number to ciąg w rodzaju TF-8PGPFFNLM6, a event_id to evt_ i UUID. Pola voucher_* są wypełniane dla zgłoszeń z bonem sklepowym po jego wydaniu, w innym przypadku mają wartość null.
{
"event": "order.created",
"event_id": "evt_c800a9c7-b11c-4b75-810e-e667544d825d",
"timestamp": 1788550000,
"tenant_id": 12,
"data": {
"order_number": "TF-8PGPFFNLM6",
"status": "submitted",
"currency": "EUR",
"quoted_amount_cents": 38000,
"inspected_amount_cents": null,
"final_amount_cents": null,
"device": "Apple iPhone 13 128GB",
"customer": {
"name": "Ada Lovelace",
"email": "ada@example.com",
"phone": "+49 170 000000"
},
"parcel_tracking_number": null,
"payout_method": "bank_transfer",
"voucher_code": null,
"voucher_amount_cents": null,
"voucher_url": null,
"voucher_expires_at": null
}
}
Nagłówki
X-FastTradein-Event: nazwa zdarzenia, ta sama co payload.event.X-FastTradein-Signature: HMAC-SHA256, HMAC surowej treści żądania z prefiksem sha256=.User-Agent: FastTradein-Webhook/1.0
Odpowiedzcie dowolnym statusem 2xx w ciągu 10 sekund. Inny status, przekroczenie czasu lub przekierowanie to błąd: ponawiamy wysyłkę dwa razy, po 10 i po 60 sekundach, z tym samym event_id i podpisem. Przekierowania nie są wykonywane, dlatego zapiszcie docelowy adres https. Duplikaty rozpoznawajcie po event_id i odrzucajcie.
Weryfikacja HMAC-SHA256
Policzcie HMAC-SHA256 z surowej treści żądania POST, używając tajnego klucza z panelu. Porównajcie wynik z X-FastTradein-Signature w czasie stałym. Wartość nagłówka zaczyna się od sha256=.
PHP
$signature = $_SERVER['HTTP_X_FASTTRADEIN_SIGNATURE'] ?? '';
$payload = file_get_contents('php://input');
$expected = 'sha256='.hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('Invalid signature');
}
Node.js
const crypto = require('crypto');
const express = require('express');
const app = express();
// express.raw keeps the exact POST bytes; JSON.stringify(req.body) would not match the signature.
app.post('/fasttradein-webhook', express.raw({ type: 'application/json' }), (req, res) => {
const signature = String(req.get('X-FastTradein-Signature') || '');
const expected = 'sha256=' + crypto
.createHmac('sha256', process.env.FASTTRADEIN_WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (
signature.length !== expected.length ||
!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))
) {
return res.status(401).end('Invalid signature');
}
const event = JSON.parse(req.body.toString('utf8'));
// Skip an event_id you have already processed: a retry sends the same one.
res.status(200).end();
});
Kody odpowiedzi
| Kod | Znaczenie |
|---|---|
| 200 | OK. GET zwraca konfigurację, wyniki wyszukiwania, katalog i kwestionariusz, a POST /quotes zwraca wycenę. |
| 201 | Created. POST /orders się powiódł; numer zgłoszenia jest w polu order_number. |
| 402 | Sklep nie przyjmuje teraz nowych zgłoszeń z widgetu: okres próbny się skończył albo subskrypcja jest anulowana (TENANT_BILLING_INACTIVE), albo miesięczny limit zgłoszeń się wyczerpał (TENANT_LIMIT_EXCEEDED). |
| 403 | Domena niedozwolona: Origin / Referer nie ma wśród dozwolonych domen sklepu (błąd WIDGET_DOMAIN_DENIED) albo POST przyszedł bez obu nagłówków. |
| 404 | Nieznany klucz widgetu (błąd WIDGET_NOT_FOUND), kategoria albo numer zgłoszenia. |
| 422 | Błąd walidacji: brak odpowiedzi, nieaktywny wariant albo wyłączona kategoria. |
| 429 | Przekroczono limit żądań. Odczekajcie chwilę i spróbujcie ponownie. |