FastTradein

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

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.

Instrukcja krok po kroku dla WooCommerce →

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.

Instrukcja krok po kroku dla OpenCart →

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.

Instrukcja krok po kroku dla Shopify →

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.

Instrukcja krok po kroku dla PrestaShop →

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.

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.

GET /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"
}
GET /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 €"
        }
    ]
}
POST /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)

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}/quotes Wycena 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.created Klient złożył zgłoszenie na stronie.
  • order.received Sklep oznaczył, że urządzenie trafiło do magazynu.
  • order.counter_offered Po kontroli w magazynie zmieniła się kwota. Klient otrzymał chroniony link oferty.
  • order.paid Sklep oznaczył zgłoszenie jako wypłacone.
  • order.accepted Klient przyjął nową cenę po kontroli.
  • order.declined Zgł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

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.