API dla Autoryzowanych Partnerów LEDMESEE
Pełna wymiana danych dla partnerów z umową: katalog z Twoimi cenami, wyceny jak w kasie, zamówienia Twojej firmy i cennik XML/CSV do Twojego sklepu.
Start w 3 krokach
- Podpisz umowę partnerską — nadamy numer partnera (LMP-…) i poziom.
- Zaloguj się na swoje konto na ledmesee.com → sekcja „Autoryzowany Partner” → „Nowy klucz API”. Klucz pokazujemy tylko raz — zapisz go w menedżerze haseł.
- Wyślij zapytanie z nagłówkiem Authorization: Bearer TWÓJ_KLUCZ.
Base URL: https://ledmesee.com/partner-api/v1
Klucz API
Klucz tworzy właściciel konta firmy albo administrator firmy. Zakresy: catalog (produkty), quote (wyceny), orders (odczyt zamówień), feed (cennik), ordering (składanie i anulowanie zamówień, saldo), webhooks (powiadomienia). Zakresy ordering i webhooks zaznaczasz osobno — klucz do sklepu internetowego, który ma składać zamówienia, trzymaj tylko na serwerze. Zamiast nagłówka Authorization możesz wysłać klucz w nagłówku X-API-Key. Klucz trzymaj na serwerze — nigdy w kodzie strony w przeglądarce. Nieużywany albo ujawniony klucz wyłącz jednym kliknięciem w koncie.
Operacje
GET | /meTwój status: numer, poziom, rabat, obrót kwartału i ile brakuje do kolejnego poziomu. |
GET | /productsKatalog: SKU, warianty, cena katalogowa netto, Twoja cena netto, sugerowana cena detaliczna brutto, dostępność, wymiary i plik do druku, zdjęcia. Parametry: lang, currency, country, category, q. |
GET | /products/{klucz|SKU|id}Jeden produkt z opisem, parametrami i wszystkimi zdjęciami. |
POST | /quoteWycena jak w kasie dla Twojego konta: produkty, rabat, dostawa (przewoźnicy na żywo), VAT, suma. |
GET | /ordersZapłacone zamówienia Twojej firmy (wszystkie osoby z firmy): status, etap produkcji, przesyłka i numer śledzenia, faktura. Parametry: limit, updated_since, order (id_desc | updated_asc), cursor. |
GET | /orders/{numer}Jedno zamówienie. |
GET | /feed.csv, /feed.xmlCennik z Twoimi cenami (odświeżany co 10 minut). |
POST | /ordersZłóż zamówienie po Twoich cenach (zakres ordering). Płatność: transfer, balance, term, card_link. Wysyłka do Ciebie albo do Twojego klienta (ship_to, przesyłka neutralna). |
POST | /orders/{numer}/cancelAnuluj zamówienie przed zapłatą. |
GET | /orders/{numer}/invoice.pdfFaktura PDF (?kind=proforma — proforma do przelewu). |
GET | /balanceSaldo LEDMESEE (PLN, EUR). |
GET | /shipping-methods?country=DEMetody dostawy do kraju. |
GET / POST | /webhooksLista i dodawanie webhooków (zakres webhooks). |
DELETE | /webhooks/{id}Usuń webhook. |
POST | /webhooks/{id}/testWyślij zdarzenie testowe „ping”. |
GET | /webhooks/{id}/deliveriesOstatnie dostarczenia i błędy. |
GET | /webhooks/{id}/sample?type=order.shippedPrzykładowe zdarzenie z podpisem do testu u siebie (nic nie wysyłamy). |
GET | /plugins, /plugins/{platforma}Wtyczki do sklepu: wersja, wymagania, sha256, lista zmian; /plugins/{platforma}/download — plik ZIP. |
Przykłady
curl https://ledmesee.com/partner-api/v1/me \
-H "Authorization: Bearer lmp_live_…"curl "https://ledmesee.com/partner-api/v1/products?currency=PLN&lang=pl&category=frames" \
-H "Authorization: Bearer lmp_live_…"curl https://ledmesee.com/partner-api/v1/quote \
-H "Authorization: Bearer lmp_live_…" \
-H "Content-Type: application/json" \
-d '{"country":"PL","postal_code":"00-001","items":[{"sku":"LM-SINGLE-A1-BLACK","quantity":10}]}'curl "https://ledmesee.com/partner-api/v1/orders?updated_since=2026-11-01T00:00:00Z" \
-H "Authorization: Bearer lmp_live_…"Zamówienia przez API
- Przed pierwszym zamówieniem zaakceptuj umowę partnerską w koncie (sekcja „Autoryzowany Partner” → „Umowa partnerska”; właściciel konta albo administrator firmy). Bez tego POST /orders zwraca 403 contract_required; status umowy: GET /me → agreement.
- Wyślij POST /orders z polami: external_id (Twój numer zamówienia), items (sku albo variant_id + quantity), payment i opcjonalnie ship_to, shipping_method, print_files_url, expected_total.
- Ten sam external_id zawsze zwraca to samo zamówienie (duplicate: true) — bezpiecznie ponawiaj zapytanie po błędzie sieci.
- payment: transfer — proforma i dane do przelewu w payment.bank, produkcja po wpłacie; balance — płatność od razu z salda LEDMESEE; term — faktura VAT z terminem (tylko gdy włączymy ją w umowie); card_link — link do płatności kartą / BLIK w payment.payment_url.
- Podaj expected_total z wyceny (POST /quote): gdy suma się zmieni, odpowiemy 409 price_changed i nic nie utworzymy.
- ship_to = wysyłka do Twojego klienta. Domyślnie przesyłka neutralna (dropship): bez cen i bez naszej faktury w paczce. Fakturę zawsze wystawiamy na Twoją firmę.
- Kody błędów: 400 invalid (error.missing i error.fields wskazują pola), 400 unsupported_currency, 402 insufficient_balance, 403 term_not_allowed, 409 price_changed / in_progress, 422 out_of_stock (error.issues).
curl https://ledmesee.com/partner-api/v1/orders \
-H "Authorization: Bearer lmp_live_…" \
-H "Content-Type: application/json" \
-d '{"external_id":"SHOP-1001","payment":"transfer","expected_total":1234.56,
"items":[{"sku":"LM-SINGLE-A1-BLACK","quantity":2}],
"ship_to":{"name":"Jan Kowalski","street":"Długa 1","postal_code":"00-001","city":"Warszawa","country":"PL","phone":"+48600000000"}}'Webhooki
- Dodaj adres https (publiczny serwer, port 443 lub 8443) w koncie albo przez POST /webhooks. Sekret whsec_… pokazujemy raz.
- Zdarzenia: order.created, order.paid, order.status_changed, order.shipped (z numerem śledzenia), order.delivered, order.cancelled, order.refunded, invoice.issued. Treść: { id, type, created, partner, data: { order, previous } } — order ma ten sam format co GET /orders/{numer}.
- Podpis: nagłówek X-LEDMESEE-Signature: t=…,v1=…; v1 = HMAC-SHA256(sekret, t + "." + surowa treść). Odrzuć, gdy podpis się nie zgadza albo t jest starszy niż 5 minut.
- Odpowiedz kodem 2xx w ciągu 10 s. Inaczej ponawiamy po 1 min, 5 min, 30 min, 2 h, 6 h i 24 h. To samo zdarzenie może przyjść dwa razy — sprawdzaj id.
// Node.js — weryfikacja podpisu / signature check
const crypto = require('crypto');
function verify(rawBody, header, secret) {
const p = Object.fromEntries(header.split(',').map(x => x.split('=')));
if (Math.abs(Date.now() / 1000 - Number(p.t)) > 300) return false;
const v = crypto.createHmac('sha256', secret).update(p.t + '.' + rawBody).digest('hex');
return crypto.timingSafeEqual(Buffer.from(v), Buffer.from(p.v1 || ''));
}Wtyczki do sklepu: WooCommerce i PrestaShop
Gotowe wtyczki łączą Twój sklep z LEDMESEE przez to API: import katalogu z Twoimi cenami i marżą, zamówienia przekazywane do LEDMESEE (przelew, saldo, termin, link do płatności), statusy i numery przesyłek z webhooków, faktury i dane GPSR przy produktach. Pobierzesz je w koncie LEDMESEE → „Autoryzowany Partner” → „Wtyczki do Twojego sklepu” albo kluczem API: GET /plugins/{woocommerce|prestashop}/download. Nową wersję sprawdza GET /plugins/{platforma}.
| LEDMESEE Partner for WooCommerce | 1.1.0 · 2026-11-13 wymaga: PHP 7.4+, WordPress 6.0+, WooCommerce 8.0+ (HPOS) sha256 d319c757ac2478844c1eef994b4cc9266cb08883df2a465ca568b612ca2f17a0 |
| LEDMESEE Partner for PrestaShop | 1.1.0 · 2026-11-13 wymaga: PHP 7.1+, PrestaShop 1.7.8 – 8.x sha256 6fa1fbab32c090688a07ac50fab3d9419edfe60602b7276b5acf7d1644bfffe8 |
Nowe w API 2.1: formaty danych, błędy, GPSR
- Zamówienia stronami: GET /orders?order=updated_asc&updated_since=… zwraca zmiany od najstarszej. Gdy has_more = true, pobierz kolejną stronę z cursor=next_cursor (filtry wyślij ponownie). Domyślna kolejność (najnowsze pierwsze) bez zmian.
- Waluty: currency z listy currencies (GET /partner-api/v1/). Inna waluta → 400 unsupported_currency z listą. Bez currency — waluta kraju dostawy.
- Błędy: POST /quote zwraca issues [{ code, sku, message }] — out_of_stock, unavailable, limit, shipping, blocked, other. Odpowiedzi 400 mają error.fields [{ field, code, message }] (required, invalid, unknown). Komunikaty po polsku przy lang=pl albo Accept-Language: pl, inaczej po angielsku; error.message, error.missing i errors zostają jak w 2.0.
- GPSR: każdy produkt ma pole gpsr — producent (nazwa, adres, e-mail), kraj pochodzenia, ostrzeżenia i link do informacji o bezpieczeństwie. Pokaż je przy produkcie w swoim sklepie (wymóg rozporządzenia UE 2023/988 przy sprzedaży konsumentom).
- Webhook bez publicznego adresu (sklep testowy, localhost): GET /webhooks/{id}/sample?type=order.shipped zwraca gotowe zdarzenie z nagłówkami i podpisem Twoim sekretem — nic nie wysyłamy. Podaj je swojemu kodowi; pole "sample": true oznacza zdarzenie testowe.
- ship_to.region: kod ISO 3166-2 bez prefiksu kraju, maks. 3 znaki (USA: CA, Kanada: ON, Australia: NSW). Wymagany tylko tam, gdzie potrzebuje go przewoźnik — wtedy 400 z polem ship_to.region. W UE zwykle niepotrzebny.
- Numer zamówienia: LM-, potem 8 znaków A–Z i 0–9, np. LM-26X4QP2A (sklep testowy: LMT-). Zapisuj go jako tekst do 20 znaków.
- Sklep testowy: zdjęcia produktów prowadzą do publicznego ledmesee.com (sklep testowy jest za hasłem).
curl "https://ledmesee.com/partner-api/v1/orders?order=updated_asc&updated_since=2026-11-01T00:00:00Z&limit=100" \
-H "Authorization: Bearer lmp_live_…"
# has_more: true →
curl "https://ledmesee.com/partner-api/v1/orders?order=updated_asc&updated_since=2026-11-01T00:00:00Z&limit=100&cursor=NEXT_CURSOR" \
-H "Authorization: Bearer lmp_live_…"Cennik XML / CSV do sklepu
Do czytnika cennika (np. import produktów w WooCommerce, Shopify, PrestaShop) użyj osobnego klucza „tylko cennik” — w koncie przycisk „Link do cennika”. Taki klucz może być w adresie: …/feed.csv?token=KLUCZ¤cy=PLN&lang=pl. Pełnego klucza API nie wstawiaj do adresu.
CSV: sku, variant_id, product_key, product, variant, category, size, color, currency, list_net, partner_net, discount_percent, fixed_price, rrp_gross, rrp_vat_rate, availability, weight_g, frame_outer_mm, graphic_mm, print_file_with_bleed_mm, image, url
Limity i błędy
Na klucz: 120 zapytań na minutę (wyceny 30 na minutę), 20 000 na dobę. Błędy zwracamy jako JSON: {"error": {"code": "…", "message": "…"}} z kodem HTTP 400, 401, 403, 404, 429 albo 500. Przy 429 odczekaj czas z nagłówka Retry-After.
Środowisko testowe
Sklep testowy: https://test.ledmesee.com/partner-api/v1 — klucze lmp_test_… (konto testowe zakładamy na prośbę). Sklep testowy jest chroniony hasłem (login i hasło podajemy razem z kluczem): hasło idzie w nagłówku Authorization (Basic), a klucz w nagłówku X-API-Key. Zamówienia testowe nie są realizowane, płatności tylko testowe. Na sklepie produkcyjnym działają wyłącznie klucze lmp_live_….
Program partnerski
Obrót = produkty netto z zapłaconych zamówień firmy w kwartale. Bez kar i bez minimalnego obrotu: obrót decyduje tylko o poziomie. Do tego naklejki i certyfikat partnera, kreacje promocyjne co miesiąc i wspólne kampanie.
Trzy poziomy: Certyfikowany, Złoty i Platynowy. Dokładne rabaty i progi obrotu widać po zalogowaniu (konto partnera, GET /me → levels) i w umowie. Warunki programu
Znak partnera i weryfikacja
Strona weryfikacji: https://ledmesee.com/partner/LMP-0001 — kod QR z certyfikatu i naklejki prowadzi właśnie tam. Znak na Twoją stronę (aktualizuje się sam i znika po zakończeniu współpracy):
<a href="https://ledmesee.com/partner/LMP-0001" target="_blank" rel="noopener"><img src="https://ledmesee.com/partner/LMP-0001/badge.svg?lang=pl" width="260" height="84" alt="Autoryzowany Partner LEDMESEE"></a>Mapa „Gdzie kupić LEDMESEE”: https://ledmesee.com/pl/partners/ — wpis (adres, telefon, strona, pinezka) włączasz w koncie.
Kontakt
Pytania o API i umowę partnerską: kontakt@ledmesee.com