Przejdź do treści

Pierwsza oferta w 10 minut

Przejdziesz całą ścieżkę sprzedaży przez API na koncie demo w sandboxie — bez ryzyka dla prawdziwych ofert i kupujących. Całą ścieżkę uruchomiliśmy od zera na środowisku testowym we wszystkich 7 językach.

Identyfikatory w przykładach. Każdy sprzedawca dostaje własne identyfikatory (UUID, numer oferty), więc w kodzie stoją napisy WSTAW_ID_…. Zanim uruchomisz przykład, zastąp je wartością z odpowiedzi wskazanego kroku:

Napis w kodzieSkąd wziąć
WSTAW_ID_CENNIKApole id z kroku 3 (albo shippingRates.id z kroku 1)
WSTAW_ID_WARUNKOW_ZWROTOWpole id z kroku 4 (albo returnPolicy.id z kroku 1)
WSTAW_ID_REKOJMIpole impliedWarranty.id z kroku 1 (konto demo ma gotowe warunki reklamacji)
WSTAW_ID_PRODUCENTApole id z kroku 4 (albo responsibleProducer.id z kroku 1)
WSTAW_ID_OFERTYpole id z odpowiedzi na wystawienie oferty (krok 5)
WSTAW_ID_ZAMOWIENIA, WSTAW_ID_POZYCJIpola id i lineItems[0].id z odpowiedzi na zamówienie testowe (krok 7)

1. Klucz testowy

W panelu sprzedaży: Klucze API → Nowy klucz, uprawnienia Pełny dostęp, włączony przełącznik Tryb test (sandbox). Klucz allee_sk_test_… zobaczysz tylko raz — zapisz go w menedżerze sekretów i ustaw zmienne środowiska:

export ALLEE_API_URL="https://api.allee.pl"
export ALLEE_API_KEY="allee_sk_test_…"   # klucz z panelu — nigdy w kodzie ani w repozytorium

Sprawdź połączenie i odbierz identyfikatory konta demo (20 ofert, cennik, warunki, GPSR):

curl -sS -X GET "${ALLEE_API_URL:-https://api.allee.pl}/allee/sandbox" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -w '\nHTTP %{http_code}\n'

2. Kategoria i jej parametry

Nie znasz kategorii? Zapytaj o podpowiedź po nazwie produktu, a potem pobierz parametry kategorii-liścia (wymagane, słowniki, ograniczenia):

curl -sS -X GET "${ALLEE_API_URL:-https://api.allee.pl}/sale/matching-categories?name=film%20dvd" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -w '\nHTTP %{http_code}\n'
curl -sS -X GET "${ALLEE_API_URL:-https://api.allee.pl}/sale/categories/20585/parameters" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -w '\nHTTP %{http_code}\n'

Wolisz walidować u siebie? GET /allee/categories/{alleeCategoryId}/schema zwraca JSON Schema 2020-12 kompletu atrybutów kategorii — ten sam, którym API sprawdza ofertę.

3. Cennik dostawy

Metody dostawy to słownik allee (GET /sale/delivery-methods). Cennik o tej samej nazwie utworzysz bezpiecznie wiele razy — drugi raz dostaniesz istniejący (200).

curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/sale/shipping-rates" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "name": "Paczkomat i kurier pobraniowy",
  "type": "PHYSICAL",
  "rates": [
    {
      "deliveryMethod": {
        "id": "bd0e0bcb-10d1-4584-bf5b-ebd07a86e70f"
      },
      "maxQuantityPerPackage": 5,
      "firstItemRate": {
        "amount": "13.99",
        "currency": "PLN"
      },
      "nextItemRate": {
        "amount": "0.00",
        "currency": "PLN"
      }
    },
    {
      "deliveryMethod": {
        "id": "5c76d200-c6db-46a7-9b78-7d067e8cfb2d"
      },
      "maxQuantityPerPackage": 5,
      "firstItemRate": {
        "amount": "17.99",
        "currency": "PLN"
      },
      "nextItemRate": {
        "amount": "2.00",
        "currency": "PLN"
      }
    }
  ]
}
JSON

4. Warunki i GPSR

Warunki zwrotów, reklamacji i gwarancji są opcjonalne. Producent odpowiedzialny i informacja o bezpieczeństwie (GPSR) są wymagane do publikacji oferty wystawionej przez API.

curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/after-sales-service-conditions/return-policies" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "name": "Zwroty 30 dni",
  "availability": {
    "range": "FULL"
  },
  "withdrawalPeriod": "P30D",
  "returnCost": {
    "coveredBy": "SELLER"
  },
  "address": {
    "name": "Sklep Przykładowy",
    "street": "Magazynowa 1",
    "postCode": "00-001",
    "city": "Warszawa",
    "countryCode": "PL"
  }
}
JSON
curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/sale/responsible-producers" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "name": "Wytwórnia Filmowa",
  "producerData": {
    "tradeName": "Wytwórnia Filmowa Sp. z o.o.",
    "address": {
      "countryCode": "PL",
      "street": "Filmowa 5",
      "postalCode": "00-950",
      "city": "Warszawa"
    },
    "contact": {
      "email": "[email protected]",
      "phoneNumber": "+48 22 100 00 00"
    }
  }
}
JSON

5. Oferta

Najpierw sprawdź ofertę bez zapisu (?validateOnly=true) — dostaniesz pełną listę problemów naraz (poprawna oferta: 200 status: VALID; błędna: 422 z issues[]). Potem wystaw ją naprawdę (201). Nagłówek Idempotency-Key chroni przed podwójną ofertą, gdy połączenie zerwie się po wysłaniu, a external.id (SKU) musi być unikalne — drugi raz to samo SKU da 409 OfferDuplicate.

5a. Sprawdzenie bez zapisu:

curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/sale/product-offers?validateOnly=true" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "productSet": [
    {
      "product": {
        "name": "Podróż na Księżyc DVD wydanie kolekcjonerskie",
        "category": {
          "id": "20585"
        },
        "parameters": [
          {
            "id": "225693",
            "values": [
              "5901234123457"
            ]
          },
          {
            "id": "237218",
            "values": [
              "Podróż na Księżyc"
            ]
          },
          {
            "id": "246845",
            "valuesIds": [
              "246845_622165"
            ]
          },
          {
            "id": "250077",
            "valuesIds": [
              "250077_1797493"
            ]
          }
        ],
        "images": [
          "https://cdn.allee.pl/img/a/webe/1930/10001318-0-1200.webp"
        ]
      },
      "responsibleProducer": {
        "type": "ID",
        "id": "WSTAW_ID_PRODUCENTA"
      },
      "safetyInformation": {
        "type": "TEXT",
        "description": "Produkt bezpieczny w normalnym użytkowaniu. Przechowywać z dala od źródeł ciepła."
      }
    }
  ],
  "parameters": [
    {
      "id": "11323",
      "valuesIds": [
        "11323_1"
      ]
    }
  ],
  "sellingMode": {
    "format": "BUY_NOW",
    "price": {
      "amount": "49.90",
      "currency": "PLN"
    }
  },
  "stock": {
    "available": 10,
    "unit": "UNIT"
  },
  "external": {
    "id": "FILM-DEMO-1"
  },
  "description": {
    "sections": [
      {
        "items": [
          {
            "type": "TEXT",
            "content": "<h2>Opis</h2><p>Film na płycie DVD, wydanie kolekcjonerskie, nowy w folii.</p><ul><li>Region 2</li><li>Język: polski</li></ul>"
          }
        ]
      }
    ]
  },
  "delivery": {
    "handlingTime": "PT24H",
    "shippingRates": {
      "id": "WSTAW_ID_CENNIKA"
    }
  },
  "afterSalesServices": {
    "returnPolicy": {
      "id": "WSTAW_ID_WARUNKOW_ZWROTOW"
    },
    "impliedWarranty": {
      "id": "WSTAW_ID_REKOJMI"
    }
  },
  "taxSettings": {
    "rates": [
      {
        "rate": "23.00",
        "countryCode": "PL"
      }
    ]
  },
  "payments": {
    "invoice": "VAT"
  },
  "location": {
    "city": "Warszawa",
    "countryCode": "PL",
    "postCode": "00-001",
    "province": "MAZOWIECKIE"
  },
  "publication": {
    "status": "ACTIVE"
  }
}
JSON

5b. Wystawienie:

curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/sale/product-offers" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Idempotency-Key: oferta-FILM-DEMO-1" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "productSet": [
    {
      "product": {
        "name": "Podróż na Księżyc DVD wydanie kolekcjonerskie",
        "category": {
          "id": "20585"
        },
        "parameters": [
          {
            "id": "225693",
            "values": [
              "5901234123457"
            ]
          },
          {
            "id": "237218",
            "values": [
              "Podróż na Księżyc"
            ]
          },
          {
            "id": "246845",
            "valuesIds": [
              "246845_622165"
            ]
          },
          {
            "id": "250077",
            "valuesIds": [
              "250077_1797493"
            ]
          }
        ],
        "images": [
          "https://cdn.allee.pl/img/a/webe/1930/10001318-0-1200.webp"
        ]
      },
      "responsibleProducer": {
        "type": "ID",
        "id": "WSTAW_ID_PRODUCENTA"
      },
      "safetyInformation": {
        "type": "TEXT",
        "description": "Produkt bezpieczny w normalnym użytkowaniu. Przechowywać z dala od źródeł ciepła."
      }
    }
  ],
  "parameters": [
    {
      "id": "11323",
      "valuesIds": [
        "11323_1"
      ]
    }
  ],
  "sellingMode": {
    "format": "BUY_NOW",
    "price": {
      "amount": "49.90",
      "currency": "PLN"
    }
  },
  "stock": {
    "available": 10,
    "unit": "UNIT"
  },
  "external": {
    "id": "FILM-DEMO-1"
  },
  "description": {
    "sections": [
      {
        "items": [
          {
            "type": "TEXT",
            "content": "<h2>Opis</h2><p>Film na płycie DVD, wydanie kolekcjonerskie, nowy w folii.</p><ul><li>Region 2</li><li>Język: polski</li></ul>"
          }
        ]
      }
    ]
  },
  "delivery": {
    "handlingTime": "PT24H",
    "shippingRates": {
      "id": "WSTAW_ID_CENNIKA"
    }
  },
  "afterSalesServices": {
    "returnPolicy": {
      "id": "WSTAW_ID_WARUNKOW_ZWROTOW"
    },
    "impliedWarranty": {
      "id": "WSTAW_ID_REKOJMI"
    }
  },
  "taxSettings": {
    "rates": [
      {
        "rate": "23.00",
        "countryCode": "PL"
      }
    ]
  },
  "payments": {
    "invoice": "VAT"
  },
  "location": {
    "city": "Warszawa",
    "countryCode": "PL",
    "postCode": "00-001",
    "province": "MAZOWIECKIE"
  },
  "publication": {
    "status": "ACTIVE"
  }
}
JSON

Wolisz model Amazona — adresowanie ofert po SKU, z podglądem walidacji i listą problemów? Ten sam efekt da PUT /allee/listings/{sku}:

curl -sS -X PUT "${ALLEE_API_URL:-https://api.allee.pl}/allee/listings/FILM-DEMO-3" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "requirements": "LISTING",
  "status": "ACTIVE",
  "attributes": {
    "name": "Metropolis DVD wersja odrestaurowana",
    "category": {
      "alleeId": 35
    },
    "parameters": {
      "225693": {
        "values": [
          "5901234123464"
        ]
      },
      "237218": {
        "values": [
          "Metropolis"
        ]
      },
      "246845": {
        "valuesIds": [
          "246845_622165"
        ]
      },
      "250077": {
        "valuesIds": [
          "250077_1797493"
        ]
      },
      "11323": {
        "valuesIds": [
          "11323_1"
        ]
      }
    },
    "price": {
      "amount": "59.90",
      "currency": "PLN"
    },
    "stock": 4,
    "images": [
      "https://cdn.allee.pl/img/a/webe/1930/10001318-0-1200.webp"
    ],
    "description": "Film na płycie DVD, nowy w folii. Wersja z polskimi napisami.",
    "shippingRatesId": "WSTAW_ID_CENNIKA",
    "responsibleProducerId": "WSTAW_ID_PRODUCENTA",
    "safetyInformation": {
      "type": "TEXT",
      "description": "Produkt bezpieczny w normalnym użytkowaniu."
    }
  }
}
JSON

6. Czy oferta da się kupić?

curl -sS -X GET "${ALLEE_API_URL:-https://api.allee.pl}/sale/offers/WSTAW_ID_OFERTY/buyability" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -w '\nHTTP %{http_code}\n'

7. Zamówienie testowe

W sandboxie kupującego zastępuje symulator. Zamówienie pojawi się w GET /order/checkout-forms i w zdarzeniach.

curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/allee/sandbox/orders" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "offerId": "WSTAW_ID_OFERTY",
  "quantity": 2,
  "paymentType": "ONLINE",
  "invoice": true,
  "messageToSeller": "Proszę o staranne zapakowanie."
}
JSON

Realizacja: status, numer przesyłki, wysłano:

curl -sS -X PUT "${ALLEE_API_URL:-https://api.allee.pl}/order/checkout-forms/WSTAW_ID_ZAMOWIENIA/fulfillment" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "status": "PROCESSING"
}
JSON
curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/order/checkout-forms/WSTAW_ID_ZAMOWIENIA/shipments" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "carrierId": "INPOST",
  "waybill": "620111222333444555495937",
  "lineItems": [
    {
      "id": "WSTAW_ID_POZYCJI"
    }
  ]
}
JSON

8. Produkcja

Utwórz klucz w trybie Produkcja (allee_sk_live_…) — ten sam kod, ten sam adres API. Dobre praktyki: lista IP i najmniejsze uprawnienia, powiadomienia push zamiast częstego odpytywania, ponawianie po Retry-After.