Integracja z hurtownią dropshipping — API, XML, BaseLinker, webhooks
Wybór metody integracji z hurtownią determinuje, czy Twój sklep będzie sprzedawał gładko, czy będziesz codziennie ręcznie poprawiał stany. Ten przewodnik rozkłada na czynniki pierwsze 5 typów integracji, pokazuje co pytać hurtowni przed kontraktem i daje pseudokod do napisania własnego konektora.
5 sposobów integracji — porównanie
| Metoda | Częstotliwość | Trudność | Skalowalność |
|---|---|---|---|
| XML feed (cron) | co 30-60 min | łatwa | średnia |
| CSV (manual lub cron) | raz dziennie | łatwa | słaba |
| REST API hurtowni | real-time / 5 min | średnia | wysoka |
| BaseLinker (middleware) | 5-30 min (konfiguracja) | łatwa | wysoka |
| Webhooks (push) | real-time | trudna | bardzo wysoka |
XML feed — minimum, które działa
Hurtownia udostępnia URL z plikiem XML (np. https://hurtownia.pl/feed/products.xml). Plik zawiera wszystkie produkty, ceny i stany. Ty cyklicznie pobierasz go i parsujesz po swojej stronie. Plus: prosty i tani. Minus: brak push-u zmian — w przerwie między cyklami możesz sprzedać produkt którego już nie ma.
CSV — tylko jako start lub backup
Ręczny import raz dziennie, najczęściej Excel/Google Sheets. Tylko dla początkujących z 50-100 SKU. Nie skaluje się: jedno opóźnienie = klient zamawia produkt, którego już nie ma w hurtowni.
REST API — kontrola programistyczna
Hurtownia daje endpointy /products, /stock, /orders. Twój kod pyta je w czasie rzeczywistym, pushuje zamówienia, odbiera status. Wymaga klucza API i odpowiedniej logiki kodu po Twojej stronie.
BaseLinker — most pośredniczący po stronie sellera
BaseLinker (po Twojej stronie) łączy się z feedem XML/API hurtowni, z Allegro, z Twoim sklepem, z fakturownią i z modułem wysyłki. Płacisz miesięczną subskrypcję BaseLinkerowi, dostajesz gotową orkiestrację po swojej stronie. Dla 80% sprzedawców z polskimi hurtowniami to optymalny wybór do zarządzania ofertami na Allegro. Pamiętaj jednak: nie każda hurtownia daje bezpośrednią dwukierunkową integrację — niektóre (jak my) wymagają wpisywania zamówień w panelu B2B po Twojej stronie.
Webhooks — wersja premium
Push w czasie rzeczywistym: hurtownia wysyła HTTP request do Twojego endpointu, gdy stan się zmienia. Najszybszy mechanizm. Wymaga: publicznego endpointu HTTPS, weryfikacji podpisu (HMAC), idempotentności (ta sama wiadomość może przyjść dwa razy), retry logic po stronie hurtowni.
Co pytać hurtowni o integrację ZANIM kupisz dostęp
Większość sprzedawców pyta tylko o ceny i marżę. Tymczasem od strony technicznej można wpaść w pułapki, które kosztują tyle samo co złe ceny. Przed podpisaniem umowy:
Format danych
- Czy XML/JSON/CSV — w jakim kodowaniu? UTF-8 to standard, ale spotyka się też Windows-1250.
- Czy plik jest pełny czy delta (tylko zmienione produkty)?
- Jak są oznaczone SKU usunięte z katalogu?
Częstotliwość odświeżania
- Co jaki czas hurtownia regeneruje feed? Co 15 min? Co 60 min? Raz dziennie?
- Czy feed jest cache'owany (CDN) — czy aktualizacja czasu modyfikacji odzwierciedla faktyczną zmianę?
Liczba pól i parametrów
- Czy są EAN-y? Bez EAN-u tracisz pozycję na Allegro (zob. błędy w dropshippingu, pkt 01).
- Zdjęcia HD — w jakiej rozdzielczości? Allegro wymaga min. 600x600 px, najlepiej 1200x1200.
- Kategorie Allegro już zmapowane czy musisz sam mapować?
- Parametry: brand, model, kolor, materiał, wymiary?
Rate limit i SLA
- Ile requestów na minutę API akceptuje? Typowo 60-100/min.
- Jaki jest uptime API? Solidne hurtownie deklarują 99,5%+ i mają status page.
- Co się dzieje przy planowanej przerwie technicznej? Powinno być powiadomienie 48h wcześniej.
Webhook po stronie hurtowni
- Czy mogę otrzymywać webhook przy zmianie stanu / wysyłce zamówienia?
- Czy podpis HMAC jest weryfikowalny? Bez podpisu webhook to luka bezpieczeństwa.
- Polityka retry — ile razy hurtownia ponowi próbę, jeśli mój endpoint padnie?
BaseLinker — czemu w 80% przypadków to optymalny most
BaseLinker w 2026 ma natywne konektory do większości hurtowni polskich (m.in. Megamo, BiznesHurt, GreatStore) oraz do Allegro, Amazon, Ceneo, Empik, WooCommerce, PrestaShop, Shopify, Magento. Subskrypcja od ~40 zł netto miesięcznie, plus opcjonalne moduły (etykiety, magazyn).
Co zyskujesz: stany hurtowni → Allegro w 30 min, zamówienia z Allegro → automatycznie do hurtowni, faktury → Fakturownia/iFirma, etykiety → InPost/DPD. Bez pisania linijki kodu.
Kiedy własna integracja ma sens: powyżej 5000 zamówień miesięcznie (BaseLinker zaczyna być wąskim gardłem), unikalna logika biznesowa, własne narzędzia analityczne, multi-tenant.
Najczęstsze pułapki integracji XML
- Brak retry przy timeoucie. Twój cron pobiera feed, hurtownia jest pod obciążeniem, request padnie po 30s. Bez retry — przegapiasz cały cykl. Implementuj retry 3x z exp. backoff.
- Brak walidacji XML. Hurtownia czasem publikuje pusty plik lub uszkodzony XML. Twój parser pada cicho — Ty myślisz że feed się aktualizuje, w rzeczywistości stoi 12h.
- Brak monitoringu daty pliku. Plik się nie zmienił od 48h? Alert do Slacka. Coś się stało po stronie hurtowni.
- Hardcoded encoding. UTF-8 vs Windows-1250 vs ISO-8859-2. Polskie znaki sypie się przy złym deklarowanym kodowaniu.
- Brak idempotentności update'u. Pobierasz feed, wszystko aktualizujesz w bazie — przy 50 000 SKU to 50 000 UPDATE-ów. Pakuj batch lub używaj UPSERT.
Step-by-step: praca z naszą hurtownią + BaseLinker u siebie
- Rejestracja konta dropshippers.pl — przez formularz rejestracyjny. Weryfikacja ręczna w 1-2 dni robocze.
- Pobranie feedu XML z naszego panelu — w panelu sprzedawcy → Eksport katalogu → XML. Plik zawiera SKU, parametry Allegro, zdjęcia HD, EAN-y, opisy, ceny hurtowe, stany magazynowe.
- Import feedu do BaseLinkera u siebie — BaseLinker → Magazyn → Dodaj plik XML. Wybierz URL feedu albo wgraj plik. Ustaw cykl pobierania co 5-15 minut.
- Mapowanie kategorii Allegro — BaseLinker pozwala na mapowanie SKU → kategoria Allegro. Większość kategorii w naszym feedzie ma już sugerowane mapowania.
- Test synchronizacji — wystaw 10 produktów testowo z BaseLinkera na Allegro. Sprawdź czy zdjęcia, EAN-y, opisy, parametry przeniosły się poprawnie.
- Wystawienie na Allegro — partiami po 50-100 SKU. Oferty wystawiasz z BaseLinkera u siebie albo bezpośrednio w Allegro — Twoja decyzja.
- Realizacja zamówień — gdy klient kupi na Allegro, wpisujesz zamówienie w naszym panelu B2B (ręcznie albo importem CSV z eksportu BaseLinkera/Allegro), załączasz etykietę nadawczą. My pakujemy i wysyłamy.
Co jak chcesz robić własnym kodem (przykład dla dowolnej hurtowni z API)
Poniżej pseudokod (Python) trzech najczęstszych operacji. Idea jest taka sama w PHP, Node.js czy Go. Pamiętaj: nie każda hurtownia daje REST API — wiele (w tym my) udostępnia feed XML do pobrania i panel B2B do wpisywania zamówień. Sprawdź dokumentację swojej hurtowni przed kodowaniem.
Pobranie listy produktów
# GET /api/products?page=1&per_page=200
import requests, time
API_BASE = "https://api.your-supplier.com/v1"
HEADERS = {"Authorization": "Bearer " + API_KEY}
def fetch_products(page=1):
r = requests.get(
f"{API_BASE}/products",
params={"page": page, "per_page": 200},
headers=HEADERS,
timeout=30
)
if r.status_code == 429:
time.sleep(60) # rate limit hit, czekaj minute
return fetch_products(page)
r.raise_for_status()
return r.json()
# Paginacja: pobierz wszystko
products = []
page = 1
while True:
data = fetch_products(page)
products.extend(data["items"])
if data["page"] >= data["total_pages"]:
break
page += 1
time.sleep(1) # nie waliz API
Synchronizacja stanów
# GET /api/stock — endpoint zwraca tylko SKU + stan + cena
# Wywołuj co 15-30 min
def sync_stock():
r = requests.get(f"{API_BASE}/stock", headers=HEADERS, timeout=15)
r.raise_for_status()
items = r.json()["items"]
# UPSERT batch — aktualizuj lokalna baza
db.bulk_upsert("stock", items, key="sku")
# Push do Allegro/sklepu
for item in items:
if item["stock"] < 5:
allegro.set_quantity(item["sku"], item["stock"])
elif item["stock"] == 0:
allegro.deactivate(item["sku"])
Push zamówienia do hurtowni
# POST /api/orders — kiedy klient zapłaci na Allegro
def push_order(order):
payload = {
"external_id": order["allegro_id"],
"items": [{"sku": i["sku"], "qty": i["qty"]} for i in order["items"]],
"shipping": {
"name": order["buyer_name"],
"address": order["buyer_address"],
"city": order["buyer_city"],
"zip": order["buyer_zip"],
"phone": order["buyer_phone"]
},
"label_url": order["label_url"] # etykieta od Allegro
}
r = requests.post(f"{API_BASE}/orders", json=payload, headers=HEADERS)
r.raise_for_status()
return r.json()["order_id"]
external_id w payload-zie jest do tego kluczem.
Jak sprawdzić, czy oferta hurtowni jest realna
Zanim podpiszesz dostęp B2B, poproś o feed testowy lub dostęp demo do panelu. Sprawdź następujące rzeczy w godzinę:
- Pobierz feed i policz produkty z EAN-em — powinno być 90%+.
- Sprawdź czy ceny netto są ostateczne, czy zaszyte rabaty zależne od wolumenu.
- Skontroluj zdjęcia — minimum 600x600, najlepiej 1200x1200.
- Sprawdź, czy stany aktualizują się przy ręcznym requeście dwa razy w godzinie.
- Złóż testowe zamówienie — sprawdź czas reakcji i jakość pakowania (white-label?).
Dla pełniejszego widoku przeczytaj naszą checklist wyboru hurtowni oraz dane o warunkach współpracy. Jeśli budujesz panel sprzedażowy dla swojej drużyny, zerknij też na panel resellerski dropshippers.pl i automatyzację sprzedaży.
Najczęściej zadawane pytania
Czy XML feed wystarczy, czy potrzebuję pełnego API? +
Jak często synchronizować stany magazynowe z hurtownią? +
Co to jest rate limit i czemu jest ważny? +
Czy BaseLinker zastępuje własną integrację? +
Co to jest webhook i czym różni się od polling? +
Co zrobić, jeśli API hurtowni padnie? +
Jakie pola powinien zawierać feed produktów hurtowni? +
Co dalej
Integracja techniczna to dopiero połowa sukcesu — drugą jest dobra hurtownia i sensowna marża. Sprawdź naszą stronę o tym co realnie oferujemy (panel B2B, feed XML, import CSV) i jak to zestawić z narzędziami po Twojej stronie (BaseLinker, własny sklep). Jeśli chcesz porównać z innymi opcjami na rynku, mamy też pełen tekst o wyborze hurtowni dropshipping.