← Sunrise Market

API dla sprzedawców

Wystawiaj oferty, aktualizuj ceny i stany oraz odbieraj zamówienia prosto ze swojego systemu — sklepu, hurtowni albo integratora. Bez logowania się do panelu i bez plików CSV.

1. Klucz

Klucz tworzysz w panelu: Sprzedawca → Integracje. Pokazujemy go jeden raz — trzymamy wyłącznie jego skrót, więc nie odtworzymy go ani my, ani nikt, kto dostałby się do bazy. Klucz należy do jednego sprzedawcy i nie sięgnie cudzych ofert ani cudzych zamówień.

Authorization: Bearer sm_live_...

Adres bazowy:

https://ihehncaaokbwbdqdztna.supabase.co/functions/v1/market-api/v1
Limity. Domyślnie 120 zapytań na minutę na klucz i ustawiony przez sprzedawcę limit aktywnych ofert. Limit ofert to świadoma bariera: katalog integratora potrafi mieć milion pozycji, a milion ofert wysyłkowych utopiłby oferty lokalne i zrobiłby z Marketu kopię wszystkich innych sklepów. Po przekroczeniu limitu dostajesz limit_ofert przy tej pozycji, reszta paczki przechodzi normalnie.

2. Punkty

MetodaŚcieżkaPo co
GET/pingsprawdzenie klucza
GET/categoriesdrzewo kategorii (slug + rodzic)
GET/offers?since=&limit=Twoje oferty
POST/offerswystawienie i aktualizacja (paczka do 200)
GET/orders?since=&limit=zamówienia do realizacji
POST/orders/<id>/shippednumer przesyłki

3. Wystawienie oferty

Ofertę rozpoznajemy po sku — Twoim identyfikatorze. Ten sam plik możesz wysyłać codziennie: pozycja, która już istnieje, zostanie zaktualizowana, a nie zduplikowana.

curl -X POST "$BASE/offers" \
  -H "Authorization: Bearer $KLUCZ" \
  -H "Content-Type: application/json" \
  -d '[{
    "sku": "PV-450-MONO",
    "title": "Panel fotowoltaiczny 450 W mono",
    "description": "Pełny opis oferty — to on trafia do wyszukiwarek.",
    "price_gross": 549.00,
    "stock": 24,
    "status": "active",
    "category_slug": "oze-i-energia-fotowoltaika",
    "image_url": "https://twoj-serwer/zdjecia/pv-450.jpg",
    "location": "Nowy Tomyśl"
  }]'
PoleWymaganeUwagi
skutakTwój identyfikator, po nim rozpoznajemy ofertę
titletakbez WIELKICH LITER i bez numeru telefonu
price_grosstakbrutto w PLN, większe od zera
category_slugtakz /categories
stockniedomyślnie 0
statusnieactive (domyślnie), draft, ended
image_urlniepubliczny adres; nie kopiujemy pliku do siebie
locationniemiejscowość — dzięki niej oferta trafia na strony lokalne

Odpowiedź jest pozycja po pozycji, więc jedna zła oferta nie wywraca całej paczki:

{
  "przyjeto": 1,
  "odrzucono": 1,
  "wyniki": [
    { "ok": true, "sku": "PV-450-MONO", "offer_id": "…", "utworzono": true },
    { "error": "nieznana_kategoria", "sku": "PV-999", "detal": "panele-sloneczne" }
  ]
}

4. Zamówienia

Pobierasz zamówienia zawierające Twoje pozycje wraz z danymi do wysyłki, a po nadaniu odsyłasz numer przesyłki.

curl "$BASE/orders?since=2026-09-01T00:00:00Z" -H "Authorization: Bearer $KLUCZ"

curl -X POST "$BASE/orders/<order_id>/shipped" \
  -H "Authorization: Bearer $KLUCZ" -H "Content-Type: application/json" \
  -d '{"carrier":"InPost","tracking_no":"6200000000000"}'

5. Zasady, o których warto wiedzieć wcześniej

6. Błędy

KodZnaczenie
401brak_klucza, zly_klucz, klucz_odwolany
429za_duzo_zapytan — odczekaj minutę
400błąd danych; szczegóły przy pozycji
500nasza awaria — powtórz za chwilę, zgłoś, jeśli wraca