Verdmarket
Powiadomienia

Witamy w Verdmarket!

Cieszymy się, że odwiedzasz naszą platformę! Utwórz konto, aby uzyskać dostęp do pełnego katalogu B2B. Dla nowych użytkowników zarejestrowanych w kwietniu — specjalne stawki prowizji!

Rejestracja

API Dostawcy Verdmarket

REST API do programowego zarządzania produktami, stanami magazynowymi, cenami i zamówieniami.

Bazowy URL

https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier

Dostępne endpointy

Metoda Endpoint Opis
GET/productsLista produktów
GET/products/{id}Szczegóły produktu
POST/productsUtwórz produkt
POST/products/{id}Aktualizuj produkt
POST/products/{id}/deleteUsuń produkt
GET/products/{id}/imagesLista zdjęć produktu
POST/products/{id}/imagesDodaj zdjęcia przez URL
POST/products/{id}/images/{imageId}/deleteUsuń zdjęcie
POST/products/{id}/images/{imageId}/primaryUstaw główne zdjęcie
POST/stockZbiorcza aktualizacja stanów
POST/pricesZbiorcza aktualizacja cen
GET/ordersLista zamówień
GET/orders/{id}Szczegóły zamówienia
POST/orders/{id}/statusAktualizuj status zamówienia
GET/categoriesLista kategorii

Uwierzytelnianie

Wszystkie żądania API wymagają tokenu Bearer w nagłówku Authorization.

Wygeneruj klucz API w sekcji Panel dostawcy → Profil sklepu → Klucze API.

Authorization: Bearer YOUR_API_KEY
Ważne: Klucz API jest wyświetlany tylko raz podczas generowania. Przechowuj go w bezpiecznym miejscu. Klucze są haszowane na naszych serwerach — nie możemy ich odzyskać. W przypadku utraty unieważnij stary i wygeneruj nowy.

Limity żądań

Domyślnie: 1000 żądań na godzinę na klucz API.

Informacje o limitach są zwracane w nagłówkach odpowiedzi:

NagłówekOpis
X-RateLimit-LimitMaksymalna liczba żądań na godzinę
X-RateLimit-RemainingPozostałe żądania w bieżącym oknie
X-RateLimit-ResetZnacznik czasu Unix resetowania okna
Retry-AfterSekundy do ponownej próby (tylko przy 429)

Format odpowiedzi

Wszystkie odpowiedzi są w formacie JSON. Odpowiedzi sukcesu:

{
  "success": true,
  "data": { ... }
}

Odpowiedzi błędów:

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Name is required."
  }
}

Produkty

GET /products

Lista produktów z paginacją i filtrowaniem.

Parametry zapytania

ParametrTypOpis
pageintNumer strony (domyślnie: 1)
per_pageintElementów na stronie (maks.: 100, domyślnie: 20)
statusstringFiltr: active, inactive, pending
searchstringSzukaj po nazwie lub SKU

Przykładowa odpowiedź

{
  "success": true,
  "data": {
    "products": [
      {
        "id": 42,
        "name": "Red Roses Premium",
        "sku": "ROSE-RED-001",
        "type": "flower",
        "base_price": 2.50,
        "unit": "stem",
        "stock_qty": 500,
        "stock_status": "in_stock",
        "is_active": true,
        "is_approved": true,
        "category": { "id": 3, "name": "Roses" },
        "primary_image": "/uploads/products/rose-red.jpg"
      }
    ],
    "pagination": {
      "current_page": 1,
      "total_pages": 5,
      "total_items": 94,
      "per_page": 20
    }
  }
}
GET /products/{id}

Pobierz pojedynczy produkt ze zdjęciami i wariantami.

POST /products

Utwórz nowy produkt. Nowe produkty wymagają zatwierdzenia przez administratora przed pojawieniem się w katalogu.

Treść żądania (JSON)

PoleTypWymaganeOpis
namestring*Nazwa produktu
category_idint*ID kategorii
base_pricefloat*Cena w EUR
unitstring*łodyga, bukiet, pudełko, opakowanie, sztuka, kilogram, metr, rolka
typestringflower (domyślnie) lub supply
descriptionstringOpis produktu
skustringUnikalny SKU (sprawdzany pod kątem duplikatów)
stock_qtyintIlość na stanie (domyślnie: 0)
min_order_qtyintMinimalna ilość zamówienia (domyślnie: 1)
colorstringKolor produktu
stem_lengthintDługość łodygi w cm
country_of_originstringKraj pochodzenia
vat_ratefloatStawka VAT w % (domyślnie: 21)
image_urlstringURL zdjęcia. Obsługuje jpg, png, webp. Wiele URL oddzielonych średnikiem (;). Maks. 10 zdjęć na produkt.
POST /products/{id}

Aktualizuj istniejący produkt. Wyślij tylko pola, które chcesz zmienić (częściowa aktualizacja).

POST /products/{id}/delete

Miękkie usunięcie produktu. Treść żądania nie jest wymagana.

Zdjęcia produktów

Limity zdjęć: Maks. 10 zdjęć na produkt. Formaty: JPEG, PNG, WebP. Maks. rozmiar: 5 MB na zdjęcie. Zdjęcia są pobierane z podanych URL-i — serwer pobiera je automatycznie.
GET /products/{id}/images

Pobierz wszystkie zdjęcia produktu. Zwraca URL-e i flagę głównego zdjęcia.

Przykładowa odpowiedź

{
  "success": true,
  "data": {
    "images": [
      {
        "id": 1,
        "url": "/uploads/products/abc123.jpg",
        "thumbnail_url": "/uploads/products/thumb_abc123.jpg",
        "is_primary": true
      },
      {
        "id": 2,
        "url": "/uploads/products/def456.jpg",
        "thumbnail_url": "/uploads/products/thumb_def456.jpg",
        "is_primary": false
      }
    ]
  }
}
POST /products/{id}/images

Dodaj zdjęcia podając URL-e. Serwer pobiera, waliduje (jpg/png/webp, maks. 5 MB) i automatycznie tworzy miniatury. Użyj średnika do oddzielenia wielu URL-i.

Treść żądania (JSON)

PoleTypWymaganeOpis
image_urlstring*URL zdjęcia. Obsługuje jpg, png, webp. Wiele URL oddzielonych średnikiem (;). Maks. 10 zdjęć na produkt.

Treść żądania

{
  "image_url": "https://example.com/images/rose.jpg;https://example.com/images/rose-2.jpg"
}
POST /products/{id}/images/{imageId}/delete

Usuń zdjęcie produktu. Plik jest usuwany z serwera. Jeśli usunięte zdjęcie było główne, następne zdjęcie automatycznie staje się głównym.

POST /products/{id}/images/{imageId}/primary

Ustaw zdjęcie jako główne. Główne zdjęcie wyświetlane jest w listach katalogu i wynikach wyszukiwania.

Zbiorcza aktualizacja stanów

POST /stock

Aktualizacja stanów magazynowych dla wielu produktów jednocześnie. Identyfikacja po product_id lub sku. Maks. 500 pozycji na żądanie.

Treść żądania

{
  "items": [
    { "product_id": 42, "stock_qty": 500 },
    { "sku": "ROSE-RED-001", "stock_qty": 250 },
    { "sku": "LILY-WHT-003", "stock_qty": 0 }
  ]
}

Odpowiedź

{
  "success": true,
  "data": {
    "updated": 2,
    "failed": 1,
    "errors": [
      { "index": 2, "sku": "LILY-WHT-003", "error": "Product not found" }
    ]
  }
}

Zbiorcza aktualizacja cen

POST /prices

Aktualizacja cen dla wielu produktów. Ten sam format co aktualizacja stanów, ale z polem base_price. Maks. 500 pozycji.

Treść żądania

{
  "items": [
    { "product_id": 42, "base_price": 2.75 },
    { "sku": "ROSE-RED-001", "base_price": 3.10 }
  ]
}

Zamówienia

GET /orders

Lista grup zamówień (części zamówień specyficzne dla dostawcy).

Parametry zapytania

ParametrTypOpis
pageintNumer strony
per_pageintElementów na stronie (maks. 100)
statusstringpending, confirmed, processing, shipped, delivered, completed, cancelled
GET /orders/{id}

Pełne szczegóły zamówienia, w tym pozycje, dane klienta i historia statusów.

POST /orders/{id}/status

Aktualizuj status zamówienia. Dozwolone są tylko prawidłowe przejścia:

ZDozwolone przejścia
pendingconfirmed, cancelled
confirmedprocessing, cancelled
processingshipped, cancelled
shippeddelivered

Treść żądania

{
  "status": "confirmed",
  "comment": "Order confirmed, preparing for shipment"
}

Kategorie

GET /categories

Lista wszystkich aktywnych kategorii. Zwraca płaską listę z odniesieniami do kategorii nadrzędnych.

Przykładowa odpowiedź

{
  "success": true,
  "data": {
    "categories": [
      { "id": 1, "name": "Flowers", "slug": "flowers", "parent_id": null, "type": "flower" },
      { "id": 3, "name": "Roses", "slug": "roses", "parent_id": 1, "type": "flower" }
    ]
  }
}

Kody błędów

HTTPKodOpis
401UNAUTHORIZEDBrakujący lub nieprawidłowy klucz API
403FORBIDDENKlucz unieważniony lub dostawca niezweryfikowany
404NOT_FOUNDZasób nie znaleziony
422VALIDATION_ERRORNieprawidłowe dane wejściowe
429RATE_LIMITEDPrzekroczono limit żądań
500SERVER_ERRORWewnętrzny błąd serwera

Przykłady kodu

Lista produktów

curl -X GET "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/products?page=1&per_page=10" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Tworzenie produktu

curl -X POST "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/products" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Red Roses Premium",
    "category_id": 3,
    "base_price": 2.50,
    "unit": "stem",
    "stock_qty": 500,
    "sku": "ROSE-RED-001",
    "color": "Red",
    "stem_length": 60,
    "country_of_origin": "Netherlands",
    "image_url": "https://example.com/images/rose-red.jpg"
  }'

Dodawanie zdjęć produktu

curl -X POST "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/products/42/images" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://example.com/img/photo1.jpg;https://example.com/img/photo2.jpg"
  }'

Zbiorcza aktualizacja stanów

curl -X POST "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/stock" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {"sku": "ROSE-RED-001", "stock_qty": 500},
      {"sku": "LILY-WHT-003", "stock_qty": 200}
    ]
  }'

Przykład PHP

<?php
$apiKey = 'YOUR_API_KEY';
$baseUrl = 'https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier';

// List products
$ch = curl_init("$baseUrl/products?page=1&per_page=10");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer $apiKey",
        "Accept: application/json",
    ],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

// Bulk stock update
$ch = curl_init("$baseUrl/stock");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode([
        'items' => [
            ['sku' => 'ROSE-RED-001', 'stock_qty' => 500],
            ['sku' => 'LILY-WHT-003', 'stock_qty' => 200],
        ],
    ]),
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
    ],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

Przykład Python

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier"
headers = {"Authorization": f"Bearer {API_KEY}"}

# List products
resp = requests.get(f"{BASE_URL}/products", headers=headers,
                    params={"page": 1, "per_page": 10})
products = resp.json()

# Bulk stock update
resp = requests.post(f"{BASE_URL}/stock", headers=headers,
                     json={"items": [
                         {"sku": "ROSE-RED-001", "stock_qty": 500},
                         {"sku": "LILY-WHT-003", "stock_qty": 200},
                     ]})
result = resp.json()

# Update order status
resp = requests.post(f"{BASE_URL}/orders/15/status", headers=headers,
                     json={"status": "confirmed",
                           "comment": "Ready for shipment"})
print(resp.json())

Ustawienia plików cookie

Używamy plików cookie, aby poprawić Twoje doświadczenie. Dowiedz się więcej w naszej Polityce prywatności.

Dostosuj

Niezbędne

Niezbędne do działania strony. Nie można wyłączyć.