Authorization.| Pole | Typ | Opis |
|---|---|---|
| username | wymagane | Twój login do systemu La Grana |
| password | wymagane | Twoje hasło |
curl -X POST https://b2b.lagrana.pl/api/token/ \ -H "Content-Type: application/json" \ -d '{"username": "twoj_login", "password": "haslo"}'
{
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Token access ważny przez 60 minut. Odśwież przez POST /api/token/refresh/ podając token refresh.
Dołącz token do każdego żądania:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
next do iterowania stron.https://b2b.lagrana.pl/api/
{
"count": 1248, // łączna liczba wyników
"next": "https://b2b.lagrana.pl/api/products/?page=2",
"previous": null,
"results": [ /* ... */ ]
}
client_price to cena końcowa po rabacie; client_price_without_discount to cena bazowa przed rabatem.| Parametr | Typ | Opis |
|---|---|---|
| page | opcjonalny | Numer strony (domyślnie 1) |
| brand | opcjonalny | Filtruj po nazwie marki |
| categories | opcjonalny | Filtruj po ID kategorii |
| status | opcjonalny | Filtruj po ID statusu |
| active | opcjonalny | true / false |
| search | opcjonalny | Szukaj po SKU lub statusie |
Pola odpowiedzi
■ pola cenowe ■ zagnieżdżone obiekty/tablice
{
"count": 1248,
"next": "https://b2b.lagrana.pl/api/products/?page=2",
"previous": null,
"results": [
{
"id": 42,
"sku": "LG-12345",
"name": "Nazwa produktu",
"brand": "BrandName",
"ean": "1234567890123",
"active": true,
"vat_rate": 23,
"for_who": "Dla niej",
"advantages": ["Zaletą jest...", "..."],
"stock_warehouse": 24,
"stock_supplier": 10,
"added_at": "2025-01-15T08:00:00Z",
"updated_at": "2026-03-01T12:00:00Z",
"client_price": "84.15", // cena po rabacie
"client_price_without_discount": "99.00", // cena bazowa
"categories": [
{ "id": 3, "name_pl": "Wibratory", "name_en": "Vibrators", "parent": null }
],
"status": { "id": 1, "name": "Nowość" },
"prod_image": [
{ "image": "https://cdn.lagrana.pl/img/lg-12345-1.jpg", "main_image": true, "hoover_image": false },
{ "image": "https://cdn.lagrana.pl/img/lg-12345-2.jpg", "main_image": false, "hoover_image": true }
],
"description": {
"id": 5, "product": 42,
"lang_pl": "Opis po polsku...",
"lang_en": "Description in English...",
"lang_de": "Beschreibung auf Deutsch...",
// oraz: lang_nl, lang_fr, lang_es, lang_it, lang_gr, lang_cz, lang_sk, lang_ua, lang_ru
},
"additional": [
{ "id": 101, "product": 42, "item": "Kolor", "value": "Czarny" },
{ "id": 102, "product": 42, "item": "Długość", "value": "18 cm" }
]
}
]
}
Zwraca jeden obiekt produktu z tymi samymi polami co lista. Użyj numerycznego ID z pola id, lub użyj endpointu products-sku do wyszukiwania po SKU.
curl "https://b2b.lagrana.pl/api/products-sku/LG-12345/" \ -H "Authorization: Bearer $TOKEN"
Zwraca te same pola co GET /api/products/{id}/. Zwraca 404 jeśli SKU nie istnieje.
Te same parametry filtrowania co /api/products/ (brand, categories, status, active, search). Endpoint szczegółowy używa SKU jako klucza zamiast numerycznego ID.
parent do budowania drzewa kategorii.[
{
"id": 1,
"name_pl": "Wibratory",
"name_en": "Vibrators",
"name_de": "Vibratoren",
"name_nl": null,
"name_fr": null,
"name_es": null,
"name_it": null,
"name_gr": null,
"name_cz": null,
"name_sk": null,
"name_ua": null,
"name_ru": null,
"parent": null // ID kategorii nadrzędnej, null = najwyższy poziom
}
]
/api/products/.| Parametr | Typ | Opis |
|---|---|---|
| brand | opcjonalny | Filtruj po marce |
| categories | opcjonalny | Filtruj po ID kategorii |
| search | opcjonalny | Szukaj po SKU |
{
"count": 1248,
"results": [
{ "sku": "LG-12345", "stock_warehouse": 24, "stock_supplier": 10 },
{ "sku": "LG-12346", "stock_warehouse": 0, "stock_supplier": 50 }
]
}
stock_warehouse — ilość w magazynie La Grana
stock_supplier — ilość dostępna u dostawcy
{
"count": 3,
"results": [
{
"id": 7,
"external_id": "WC-1234", // Twój numer referencyjny (opcjonalny)
"status": "pending",
"currency": "PLN",
"total_gross": "267.00",
"notes": "Uwagi do zamówienia",
"created_at": "2026-03-01T12:00:00Z",
"updated_at": "2026-03-01T12:05:00Z",
"items_read": [
{
"product": 42, "sku": "LG-12345", "name": "Nazwa produktu",
"qty": 3, "unit_price_gross": "89.00",
"vat_rate": 23, "line_total_gross": "267.00"
}
]
}
]
}
| Pole | Typ | Opis |
|---|---|---|
| items | wymagane | Tablica pozycji zamówienia (patrz niżej) |
| external_id | opcjonalny | Twój własny numer referencyjny (np. ID zamówienia WooCommerce) |
| currency | opcjonalny | PLN / EUR (domyślnie: PLN) |
| notes | opcjonalny | Uwagi do zamówienia |
Każda pozycja w tablicy items:
| Pole | Typ | Opis |
|---|---|---|
| product | product lub sku | Wewnętrzne ID produktu |
| sku | product lub sku | SKU produktu (alternatywa dla product) |
| qty | opcjonalny | Ilość (domyślnie: 1) |
{
"external_id": "WC-5678",
"currency": "PLN",
"notes": "Pilne",
"items": [
{ "product": 42, "qty": 3 },
{ "sku": "LG-12346", "qty": 1 }
]
}
<?xml version="1.0" encoding="UTF-8"?> <products> <product> <id>42</id> <sku>LG-12345</sku> <name>Nazwa produktu</name> <description>Opis po polsku...</description> <category>Wibratory</category> <brand>BrandName</brand> <price>84.15</price> <!-- Twoja cena --> <stock>24</stock> <image>https://cdn.lagrana.pl/img/lg-12345-1.jpg</image> <active>true</active> </product> </products>
Feed nie wymaga nagłówka uwierzytelniającego — token w URL stanowi dostęp. Ceny odzwierciedlają Twoje indywidualne stawki.
detail z opisem.| Kod | Znaczenie |
|---|---|
| 200 | Sukces |
| 201 | Zasób utworzony (np. nowe zamówienie) |
| 400 | Błąd w żądaniu — sprawdź parametry lub wymagane pola |
| 401 | Brak uwierzytelnienia lub wygasły token |
| 403 | Brak uprawnień do zasobu |
| 404 | Zasób nie istnieje |
| 429 | Przekroczono limit zapytań (rate limiting) |
import requests # 1. Uzyskaj token resp = requests.post("https://b2b.lagrana.pl/api/token/", json={ "username": "twoj_login", "password": "haslo" }) token = resp.json()["access"] headers = {"Authorization": f"Bearer {token}"} # 2. Pobierz produkty (wszystkie strony) url = "https://b2b.lagrana.pl/api/products/" while url: data = requests.get(url, headers=headers).json() for p in data["results"]: print(p["sku"], p["client_price"], p["stock_warehouse"]) url = data["next"] # 3. Pobierz produkt po SKU p = requests.get( "https://b2b.lagrana.pl/api/products-sku/LG-12345/", headers=headers ).json() print(p["name"], p["client_price"], p["client_price_without_discount"]) # 4. Utwórz zamówienie order = requests.post("https://b2b.lagrana.pl/api/orders/", json={ "external_id": "WC-1234", "items": [ {"sku": "LG-12345", "qty": 3}, {"sku": "LG-12346", "qty": 1}, ] }, headers=headers) print(order.json())
// 1. Uzyskaj token $res = file_get_contents('https://b2b.lagrana.pl/api/token/', false, stream_context_create(['http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => json_encode(['username'=>'login', 'password'=>'haslo']) ]]) ); $token = json_decode($res)->access; $authHeader = "Authorization: Bearer $token"; // 2. Pobierz produkty $url = 'https://b2b.lagrana.pl/api/products/'; while ($url) { $data = json_decode(file_get_contents($url, false, stream_context_create(['http' => ['header' => $authHeader]]) )); foreach ($data->results as $p) { echo $p->sku . ' ' . $p->client_price . ' ' . $p->stock_warehouse . "\n"; } $url = $data->next; } // 3. Utwórz zamówienie $order = file_get_contents('https://b2b.lagrana.pl/api/orders/', false, stream_context_create(['http' => [ 'method' => 'POST', 'header' => "Content-Type: application/json\r\n" . $authHeader, 'content' => json_encode([ 'external_id' => 'WC-1234', 'items' => [ ['sku' => 'LG-12345', 'qty' => 3], ['sku' => 'LG-12346', 'qty' => 1], ] ]) ]]) ); var_dump(json_decode($order));
# Uzyskaj token i zapisz TOKEN=$(curl -s -X POST https://b2b.lagrana.pl/api/token/ \ -H "Content-Type: application/json" \ -d '{"username":"login","password":"haslo"}' \ | python3 -c "import sys,json;print(json.load(sys.stdin)['access'])") # Pobierz produkty (pierwsza strona) curl "https://b2b.lagrana.pl/api/products/" \ -H "Authorization: Bearer $TOKEN" # Pobierz produkt po SKU curl "https://b2b.lagrana.pl/api/products-sku/LG-12345/" \ -H "Authorization: Bearer $TOKEN" # Pobierz stany magazynowe curl "https://b2b.lagrana.pl/api/stock/" \ -H "Authorization: Bearer $TOKEN" # Utwórz zamówienie curl -X POST "https://b2b.lagrana.pl/api/orders/" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"external_id":"WC-1234","items":[{"sku":"LG-12345","qty":3}]}'
Zaloguj się i zacznij korzystać z API
Dostęp do API przyznajemy na wniosek — skontaktuj się z nami lub zaloguj, jeśli masz już konto.