Warianty ofert
Zestawy wariantów (rozmiar, kolor): każdy wariant to osobna oferta z własnym stanem, ceną i EAN-em; jedna karta w wynikach (Allegro: oferty wielowariantowe).
- PUT
/sale/offer-variants/{setId}— Utworzenie albo zmiana zestawu wariantów - POST
/sale/offer-variants— Utworzenie zestawu wariantów (identyfikator nadaje allee) - GET
/sale/offer-variants/{setId}— Zestaw wariantów - DELETE
/sale/offer-variants/{setId}— Rozłączenie zestawu wariantów - GET
/sale/offer-variants— Lista zestawów wariantów
Utworzenie albo zmiana zestawu wariantów
PUT /sale/offer-variants/{setId}
zgodna z Allegroallegro:api:sale:offers:writelimit: write
Łączy oferty w jeden zestaw wariantów (np. rozmiary 38–44): kupujący widzi przełącznik na stronie każdej oferty, a wyszukiwarka pokazuje JEDNĄ kartę z listą dostępnych wartości. Nowy setId = utworzenie, istniejący = pełna podmiana (kolejność ofert = kolejność w odpowiedzi).
Zasady (jak Allegro): nazwa 1–50 znaków; 1–2 parametry wyboru (id parametru Allegro, {"alleeId": …} albo color/pattern); 2–500 ofert TEGO SAMEGO sprzedawcy, z tej samej kategorii-liścia, Kup Teraz; oferta w najwyżej jednym zestawie; każda oferta z inną kombinacją wartości. Wartość parametru każdej oferty bierzemy Z OFERTY (zestaw jej nie zmienia); colorPattern (≤ 64 znaki) podajesz przy ofercie. Błędy — wszystkie naraz (422, path = offers[i].id).
Po zmianie oferty (PATCH parametru, kategorii, usunięcie szkicu) zestaw sprawdza się sam: oferta, która przestała pasować, wypada z zestawu (zdarzenie OFFER_CHANGED, allee.reason = variant_set_detached:…), a zestaw z jedną ofertą jest rozwiązywany.
Zgodność: zgodna z Allegro REST API (ten sam kształt) — PUT /sale/offer-variants/{setId}.
Uprawnienie: zakres allegro:api:sale:offers:write.
Grupa limitu: write.
Parametry ścieżki
setId string · uuid wymaganyIdentyfikator zestawu (UUID — w PUT nadaje go integrator, zalecany v4).
Treść żądania application/vnd.allegro.public.v1+json
name string wymaganeNazwa zestawu (1–50 znaków).
parameters array<object> wymaganeParametry wyboru (1–2).
Pola obiektu
id stringId parametru Allegro (np. „54” = Rozmiar) albo „color/pattern”.
alleeId integerRozszerzenie allee: id parametru allee.
offers array<object> wymaganeOferty-warianty (2–500), w kolejności wyświetlania.
Pola obiektu
id string wymaganeIdentyfikator oferty.
colorPattern string · nullKolor/wzór oferty (gdy parametr color/pattern), ≤ 64 znaki.
Odpowiedzi
200 Zestaw (utworzony albo zmieniony). · OfferVariantSet
id string · uuid zawszesetId (UUID).
name string zawszeparameters array<object> zawszePola obiektu
id string zawszeId parametru Allegro albo „color/pattern”.
offers array<object> zawszePola obiektu
id string zawszecolorPattern string · null zawszeallee object zawszeRozszerzenie allee.
Pola obiektu
setId integer zawszeNumer wewnętrzny zestawu.
category object zawszePola obiektu
id string · null zawszeKategoria Allegro.
alleeId integer zawszeKategoria allee.
parameters array<object> zawszePola obiektu
id string zawszealleeId integer zawsze0 = color/pattern.
name string · null zawszeoffers array<object> zawszePola obiektu
id string zawszevalues array<object> zawszePola obiektu
parameterId string zawszename string · null zawszevalue string zawszeWartość wyboru oferty (np. 42).
valueId string · null zawszeId wartości słownika Allegro.
publication object zawszePola obiektu
status PublicationStatus · null zawszestock object zawszePola obiektu
available integer · null zawszesellingMode object · null zawszePola obiektu
price Money zawszeKwota (kształt Allegro).
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNexternal object · null zawszePola obiektu
id string zawszeurl string · uri · null zawszeStrona oferty-wariantu na allee.pl.
createdAt string · date-time zawszeupdatedAt string · date-time zawszeBłędy
| HTTP | Kod | Znaczenie |
|---|---|---|
| 401 | invalid_token | Brak, zły, wygasły albo odwołany token lub klucz (format OAuth, nagłówek WWW-Authenticate). |
| 403 | ACCOUNT_INACTIVE | Konto sprzedawcy jest nieaktywne. |
| 403 | AccessDenied | Brak zakresu albo zasób innego sprzedawcy. |
| 403 | KEY_QUARANTINED | Kwarantanna: działa tylko odczyt (wykryto nietypowe użycie). |
| 403 | KEY_SUSPENDED | Klucz albo dostęp aplikacji wstrzymany (przez sprzedawcę albo ochronę). |
| 404 | NOT_FOUND | Nie ma takiego zasobu (albo należy do innego sprzedawcy — dla wątków, zwrotów i spraw odpowiedź jest ta sama). |
| 409 | VARIANT_SET_CONFLICT | Równoległa zmiana zestawów (ta sama oferta dodawana naraz do dwóch zestawów). |
| 413 | PAYLOAD_TOO_LARGE | Treść żądania za duża (JSON 5 MB, faktura PDF 3 MB). |
| 415 | UNSUPPORTED_MEDIA_TYPE | Zły Content-Type treści. |
| 422 | JsonMappingException | Treść nie jest poprawnym JSON albo ma zły kształt (np. images jako obiekty). |
| 422 | VARIANT_SET_COLOR_PATTERN_REQUIRED | Brak colorPattern przy ofercie (parametr color/pattern). |
| 422 | VARIANT_SET_COLOR_PATTERN_TOO_LONG | colorPattern dłuższy niż 64 znaki. |
| 422 | VARIANT_SET_DIFFERENT_CATEGORIES | Oferty z różnych kategorii. |
| 422 | VARIANT_SET_DUPLICATED_OFFER | Ta sama oferta podana dwa razy. |
| 422 | VARIANT_SET_DUPLICATED_VARIANT | Dwie oferty mają tę samą kombinację wartości (details.sameAs). |
| 422 | VARIANT_SET_NAME_INVALID | Nazwa zestawu pusta albo dłuższa niż 50 znaków. |
| 422 | VARIANT_SET_OFFER_AMBIGUOUS_PARAMETER | Oferta ma kilka wartości parametru wyboru. |
| 422 | VARIANT_SET_OFFER_IN_OTHER_SET | Oferta jest już w innym zestawie. |
| 422 | VARIANT_SET_OFFER_MISSING_PARAMETER | Oferta nie ma wartości parametru wyboru. |
| 422 | VARIANT_SET_OFFER_NOT_BUY_NOW | Licytacji nie łączymy w warianty. |
| 422 | VARIANT_SET_OFFER_NOT_FOUND | Oferty nie ma na koncie sprzedawcy (cudza oferta = ta sama odpowiedź). |
| 422 | VARIANT_SET_PARAMETERS_INVALID | Parametry wyboru: 1 lub 2 różne. |
| 422 | VARIANT_SET_PARAMETER_NOT_IN_CATEGORY | Parametru nie ma w kategorii ofert (albo nie istnieje). |
| 422 | VARIANT_SET_TOO_FEW_OFFERS | Zestaw ma mniej niż 2 oferty. |
| 422 | VARIANT_SET_TOO_MANY_OFFERS | Zestaw ma więcej niż 500 ofert. |
| 429 | TOO_MANY_REQUESTS | Przekroczony limit (minutowy, grupy operacji albo IP). |
| 500 | INTERNAL_ERROR | Błąd serwera allee. |
| 503 | NOT_DEPLOYED | Funkcja jeszcze nie uruchomiona (np. sandbox, wsady). |
curl -sS -X PUT "${ALLEE_API_URL:-https://api.allee.pl}/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec" \
-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": "Podróż na Księżyc — DVD i Blu-ray",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
},
{
"id": "900000000000021",
"colorPattern": "DVD"
}
]
}
JSON<?php
// allee API: PUT /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$body = [
'name' => 'Podróż na Księżyc — DVD i Blu-ray',
'parameters' => [
[
'id' => 'color/pattern',
],
],
'offers' => [
[
'id' => '900000000000023',
'colorPattern' => 'Blu-ray',
],
[
'id' => '900000000000021',
'colorPattern' => 'DVD',
],
],
];
$ch = curl_init($base . '/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('ALLEE_API_KEY'),
'Accept: application/vnd.allegro.public.v1+json',
'Content-Type: application/vnd.allegro.public.v1+json',
],
CURLOPT_POSTFIELDS => json_encode($body, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
CURLOPT_RETURNTRANSFER => true,
]);
$odp = curl_exec($ch);
echo 'HTTP ', curl_getinfo($ch, CURLINFO_RESPONSE_CODE), "\n", $odp, "\n";# allee API: PUT /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Python 3, biblioteka requests)
import os
import requests
BASE = os.environ.get("ALLEE_API_URL", "https://api.allee.pl")
headers = {
"Authorization": "Bearer " + os.environ["ALLEE_API_KEY"],
"Accept": "application/vnd.allegro.public.v1+json",
"Content-Type": "application/vnd.allegro.public.v1+json",
}
body = {
"name": "Podróż na Księżyc — DVD i Blu-ray",
"parameters": [
{
"id": "color/pattern",
},
],
"offers": [
{
"id": "900000000000023",
"colorPattern": "Blu-ray",
},
{
"id": "900000000000021",
"colorPattern": "DVD",
},
],
}
r = requests.request("PUT", BASE + "/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec", headers=headers, json=body, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: PUT /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const body = {
"name": "Podróż na Księżyc — DVD i Blu-ray",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
},
{
"id": "900000000000021",
"colorPattern": "DVD"
}
]
};
const res = await fetch(`${BASE}/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec`, {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.ALLEE_API_KEY}`,
"Accept": "application/vnd.allegro.public.v1+json",
"Content-Type": "application/vnd.allegro.public.v1+json",
},
body: JSON.stringify(body),
redirect: "manual",
});
console.log("HTTP", res.status);
console.log(await res.text());// allee API: PUT /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (C#, .NET 8+, HttpClient)
using System.Net.Http.Headers;
using System.Text;
var baseUrl = Environment.GetEnvironmentVariable("ALLEE_API_URL") ?? "https://api.allee.pl";
using var http = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false });
using var req = new HttpRequestMessage(new HttpMethod("PUT"), baseUrl + "/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.public.v1+json");
var json = """
{
"name": "Podróż na Księżyc — DVD i Blu-ray",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
},
{
"id": "900000000000021",
"colorPattern": "DVD"
}
]
}
""";
req.Content = new StringContent(json, Encoding.UTF8);
req.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.allegro.public.v1+json");
using var res = await http.SendAsync(req);
Console.WriteLine($"HTTP {(int)res.StatusCode}");
Console.WriteLine(await res.Content.ReadAsStringAsync());// allee API: PUT /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Java 11+, java.net.http; uruchom: java Main.java)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String base = System.getenv().getOrDefault("ALLEE_API_URL", "https://api.allee.pl");
String body = """
{
"name": "Podróż na Księżyc — DVD i Blu-ray",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
},
{
"id": "900000000000021",
"colorPattern": "DVD"
}
]
}
""";
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec"))
.header("Authorization", "Bearer " + System.getenv("ALLEE_API_KEY"))
.header("Accept", "application/vnd.allegro.public.v1+json")
.header("Content-Type", "application/vnd.allegro.public.v1+json")
.method("PUT", HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient http = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpResponse<String> res = http.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println("HTTP " + res.statusCode());
System.out.println(res.body());
}
}// allee API: PUT /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Go 1.20+, net/http; uruchom: go run main.go)
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
base := os.Getenv("ALLEE_API_URL")
if base == "" {
base = "https://api.allee.pl"
}
body := `{
"name": "Podróż na Księżyc — DVD i Blu-ray",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
},
{
"id": "900000000000021",
"colorPattern": "DVD"
}
]
}`
req, err := http.NewRequest("PUT", base+"/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec", strings.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("ALLEE_API_KEY"))
req.Header.Set("Accept", "application/vnd.allegro.public.v1+json")
req.Header.Set("Content-Type", "application/vnd.allegro.public.v1+json")
klient := &http.Client{CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
res, err := klient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
dane, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
fmt.Println("HTTP", res.StatusCode)
fmt.Println(string(dane))
}application/vnd.allegro.public.v1+json{
"id": "2acf7981-8d96-48bb-8eb0-c6f4267e1eec",
"name": "Podróż na Księżyc — DVD i Blu-ray",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
},
{
"id": "900000000000021",
"colorPattern": "DVD"
}
],
"allee": {
"setId": 1,
"category": {
"id": "20585",
"alleeId": 35
},
"parameters": [
{
"id": "color/pattern",
"alleeId": 0,
"name": "Kolor"
}
],
"offers": [
{
"id": "900000000000023",
"values": [
{
"parameterId": "color/pattern",
"name": "Kolor",
"value": "Blu-ray",
"valueId": null
}
],
"publication": {
"status": "ACTIVE"
},
"stock": {
"available": 10
},
"sellingMode": {
"price": {
"amount": "49.90",
"currency": "PLN"
}
},
"external": {
"id": "FILM-21ef85-WAR"
},
"url": "https://allee.pl/oferta/podroz-na-ksiezyc-blu-ray-wydanie-kolekcjonerskie-900000000000023"
},
{
"id": "900000000000021",
"values": [
{
"parameterId": "color/pattern",
"name": "Kolor",
"value": "DVD",
"valueId": null
}
],
"publication": {
"status": "ACTIVE"
},
"stock": {
"available": 8
},
"sellingMode": {
"price": {
"amount": "44.90",
"currency": "PLN"
}
},
"external": {
"id": "FILM-21ef85-1"
},
"url": "https://allee.pl/oferta/podroz-na-ksiezyc-dvd-wydanie-kolekcjonerskie-900000000000021"
}
],
"createdAt": "2026-11-10T11:10:04.000Z",
"updatedAt": "2026-11-10T11:10:04.000Z"
}
}Utworzenie zestawu wariantów (identyfikator nadaje allee)
POST /sale/offer-variants
tylko alleeallegro:api:sale:offers:writelimit: write
To samo co PUT, ale setId nadaje allee — odpowiedź 201 z nagłówkiem Location. Obsługuje Idempotency-Key (powtórka nie tworzy drugiego zestawu).
Zasady (jak Allegro): nazwa 1–50 znaków; 1–2 parametry wyboru (id parametru Allegro, {"alleeId": …} albo color/pattern); 2–500 ofert TEGO SAMEGO sprzedawcy, z tej samej kategorii-liścia, Kup Teraz; oferta w najwyżej jednym zestawie; każda oferta z inną kombinacją wartości. Wartość parametru każdej oferty bierzemy Z OFERTY (zestaw jej nie zmienia); colorPattern (≤ 64 znaki) podajesz przy ofercie. Błędy — wszystkie naraz (422, path = offers[i].id).
Po zmianie oferty (PATCH parametru, kategorii, usunięcie szkicu) zestaw sprawdza się sam: oferta, która przestała pasować, wypada z zestawu (zdarzenie OFFER_CHANGED, allee.reason = variant_set_detached:…), a zestaw z jedną ofertą jest rozwiązywany.
Zgodność: tylko allee — PUT /sale/offer-variants/{setId} (tu setId nadaje serwer).
Uprawnienie: zakres allegro:api:sale:offers:write.
Grupa limitu: write.
Nagłówki
Idempotency-Key stringOchrona przed podwójnym wykonaniem (jak Stripe/Amazon): powtórzony POST z tym samym kluczem i tą samą treścią w ciągu 24 h zwraca zapisaną odpowiedź z nagłówkiem Idempotent-Replayed: true i niczego nie wykonuje drugi raz. Inna treść → 422 IDEMPOTENCY_KEY_REUSED; żądanie jeszcze trwa → 409 IDEMPOTENCY_KEY_IN_USE. 1–100 znaków ASCII (np. UUID).
Treść żądania application/vnd.allegro.public.v1+json
name string wymaganeNazwa zestawu (1–50 znaków).
parameters array<object> wymaganeParametry wyboru (1–2).
Pola obiektu
id stringId parametru Allegro (np. „54” = Rozmiar) albo „color/pattern”.
alleeId integerRozszerzenie allee: id parametru allee.
offers array<object> wymaganeOferty-warianty (2–500), w kolejności wyświetlania.
Pola obiektu
id string wymaganeIdentyfikator oferty.
colorPattern string · nullKolor/wzór oferty (gdy parametr color/pattern), ≤ 64 znaki.
Odpowiedzi
201 Utworzono (nagłówek Location = /sale/offer-variants/{setId}). · OfferVariantSet
id string · uuid zawszesetId (UUID).
name string zawszeparameters array<object> zawszePola obiektu
id string zawszeId parametru Allegro albo „color/pattern”.
offers array<object> zawszePola obiektu
id string zawszecolorPattern string · null zawszeallee object zawszeRozszerzenie allee.
Pola obiektu
setId integer zawszeNumer wewnętrzny zestawu.
category object zawszePola obiektu
id string · null zawszeKategoria Allegro.
alleeId integer zawszeKategoria allee.
parameters array<object> zawszePola obiektu
id string zawszealleeId integer zawsze0 = color/pattern.
name string · null zawszeoffers array<object> zawszePola obiektu
id string zawszevalues array<object> zawszePola obiektu
parameterId string zawszename string · null zawszevalue string zawszeWartość wyboru oferty (np. 42).
valueId string · null zawszeId wartości słownika Allegro.
publication object zawszePola obiektu
status PublicationStatus · null zawszestock object zawszePola obiektu
available integer · null zawszesellingMode object · null zawszePola obiektu
price Money zawszeKwota (kształt Allegro).
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNexternal object · null zawszePola obiektu
id string zawszeurl string · uri · null zawszeStrona oferty-wariantu na allee.pl.
createdAt string · date-time zawszeupdatedAt string · date-time zawszeBłędy
| HTTP | Kod | Znaczenie |
|---|---|---|
| 401 | invalid_token | Brak, zły, wygasły albo odwołany token lub klucz (format OAuth, nagłówek WWW-Authenticate). |
| 403 | ACCOUNT_INACTIVE | Konto sprzedawcy jest nieaktywne. |
| 403 | AccessDenied | Brak zakresu albo zasób innego sprzedawcy. |
| 403 | KEY_QUARANTINED | Kwarantanna: działa tylko odczyt (wykryto nietypowe użycie). |
| 403 | KEY_SUSPENDED | Klucz albo dostęp aplikacji wstrzymany (przez sprzedawcę albo ochronę). |
| 409 | VARIANT_SET_CONFLICT | Równoległa zmiana zestawów (ta sama oferta dodawana naraz do dwóch zestawów). |
| 413 | PAYLOAD_TOO_LARGE | Treść żądania za duża (JSON 5 MB, faktura PDF 3 MB). |
| 415 | UNSUPPORTED_MEDIA_TYPE | Zły Content-Type treści. |
| 422 | JsonMappingException | Treść nie jest poprawnym JSON albo ma zły kształt (np. images jako obiekty). |
| 422 | VARIANT_SET_COLOR_PATTERN_REQUIRED | Brak colorPattern przy ofercie (parametr color/pattern). |
| 422 | VARIANT_SET_COLOR_PATTERN_TOO_LONG | colorPattern dłuższy niż 64 znaki. |
| 422 | VARIANT_SET_DIFFERENT_CATEGORIES | Oferty z różnych kategorii. |
| 422 | VARIANT_SET_DUPLICATED_OFFER | Ta sama oferta podana dwa razy. |
| 422 | VARIANT_SET_DUPLICATED_VARIANT | Dwie oferty mają tę samą kombinację wartości (details.sameAs). |
| 422 | VARIANT_SET_NAME_INVALID | Nazwa zestawu pusta albo dłuższa niż 50 znaków. |
| 422 | VARIANT_SET_OFFER_AMBIGUOUS_PARAMETER | Oferta ma kilka wartości parametru wyboru. |
| 422 | VARIANT_SET_OFFER_IN_OTHER_SET | Oferta jest już w innym zestawie. |
| 422 | VARIANT_SET_OFFER_MISSING_PARAMETER | Oferta nie ma wartości parametru wyboru. |
| 422 | VARIANT_SET_OFFER_NOT_BUY_NOW | Licytacji nie łączymy w warianty. |
| 422 | VARIANT_SET_OFFER_NOT_FOUND | Oferty nie ma na koncie sprzedawcy (cudza oferta = ta sama odpowiedź). |
| 422 | VARIANT_SET_PARAMETERS_INVALID | Parametry wyboru: 1 lub 2 różne. |
| 422 | VARIANT_SET_PARAMETER_NOT_IN_CATEGORY | Parametru nie ma w kategorii ofert (albo nie istnieje). |
| 422 | VARIANT_SET_TOO_FEW_OFFERS | Zestaw ma mniej niż 2 oferty. |
| 422 | VARIANT_SET_TOO_MANY_OFFERS | Zestaw ma więcej niż 500 ofert. |
| 429 | TOO_MANY_REQUESTS | Przekroczony limit (minutowy, grupy operacji albo IP). |
| 500 | INTERNAL_ERROR | Błąd serwera allee. |
| 503 | NOT_DEPLOYED | Funkcja jeszcze nie uruchomiona (np. sandbox, wsady). |
curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/sale/offer-variants" \
-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": "Podróż na Księżyc — wydania",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000021",
"colorPattern": "DVD"
},
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
}
]
}
JSON<?php
// allee API: POST /sale/offer-variants (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$body = [
'name' => 'Podróż na Księżyc — wydania',
'parameters' => [
[
'id' => 'color/pattern',
],
],
'offers' => [
[
'id' => '900000000000021',
'colorPattern' => 'DVD',
],
[
'id' => '900000000000023',
'colorPattern' => 'Blu-ray',
],
],
];
$ch = curl_init($base . '/sale/offer-variants');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('ALLEE_API_KEY'),
'Accept: application/vnd.allegro.public.v1+json',
'Content-Type: application/vnd.allegro.public.v1+json',
],
CURLOPT_POSTFIELDS => json_encode($body, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
CURLOPT_RETURNTRANSFER => true,
]);
$odp = curl_exec($ch);
echo 'HTTP ', curl_getinfo($ch, CURLINFO_RESPONSE_CODE), "\n", $odp, "\n";# allee API: POST /sale/offer-variants (Python 3, biblioteka requests)
import os
import requests
BASE = os.environ.get("ALLEE_API_URL", "https://api.allee.pl")
headers = {
"Authorization": "Bearer " + os.environ["ALLEE_API_KEY"],
"Accept": "application/vnd.allegro.public.v1+json",
"Content-Type": "application/vnd.allegro.public.v1+json",
}
body = {
"name": "Podróż na Księżyc — wydania",
"parameters": [
{
"id": "color/pattern",
},
],
"offers": [
{
"id": "900000000000021",
"colorPattern": "DVD",
},
{
"id": "900000000000023",
"colorPattern": "Blu-ray",
},
],
}
r = requests.request("POST", BASE + "/sale/offer-variants", headers=headers, json=body, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: POST /sale/offer-variants (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const body = {
"name": "Podróż na Księżyc — wydania",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000021",
"colorPattern": "DVD"
},
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
}
]
};
const res = await fetch(`${BASE}/sale/offer-variants`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ALLEE_API_KEY}`,
"Accept": "application/vnd.allegro.public.v1+json",
"Content-Type": "application/vnd.allegro.public.v1+json",
},
body: JSON.stringify(body),
redirect: "manual",
});
console.log("HTTP", res.status);
console.log(await res.text());// allee API: POST /sale/offer-variants (C#, .NET 8+, HttpClient)
using System.Net.Http.Headers;
using System.Text;
var baseUrl = Environment.GetEnvironmentVariable("ALLEE_API_URL") ?? "https://api.allee.pl";
using var http = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false });
using var req = new HttpRequestMessage(new HttpMethod("POST"), baseUrl + "/sale/offer-variants");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.public.v1+json");
var json = """
{
"name": "Podróż na Księżyc — wydania",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000021",
"colorPattern": "DVD"
},
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
}
]
}
""";
req.Content = new StringContent(json, Encoding.UTF8);
req.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.allegro.public.v1+json");
using var res = await http.SendAsync(req);
Console.WriteLine($"HTTP {(int)res.StatusCode}");
Console.WriteLine(await res.Content.ReadAsStringAsync());// allee API: POST /sale/offer-variants (Java 11+, java.net.http; uruchom: java Main.java)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String base = System.getenv().getOrDefault("ALLEE_API_URL", "https://api.allee.pl");
String body = """
{
"name": "Podróż na Księżyc — wydania",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000021",
"colorPattern": "DVD"
},
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
}
]
}
""";
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/sale/offer-variants"))
.header("Authorization", "Bearer " + System.getenv("ALLEE_API_KEY"))
.header("Accept", "application/vnd.allegro.public.v1+json")
.header("Content-Type", "application/vnd.allegro.public.v1+json")
.method("POST", HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient http = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpResponse<String> res = http.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println("HTTP " + res.statusCode());
System.out.println(res.body());
}
}// allee API: POST /sale/offer-variants (Go 1.20+, net/http; uruchom: go run main.go)
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
base := os.Getenv("ALLEE_API_URL")
if base == "" {
base = "https://api.allee.pl"
}
body := `{
"name": "Podróż na Księżyc — wydania",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000021",
"colorPattern": "DVD"
},
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
}
]
}`
req, err := http.NewRequest("POST", base+"/sale/offer-variants", strings.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("ALLEE_API_KEY"))
req.Header.Set("Accept", "application/vnd.allegro.public.v1+json")
req.Header.Set("Content-Type", "application/vnd.allegro.public.v1+json")
klient := &http.Client{CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
res, err := klient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
dane, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
fmt.Println("HTTP", res.StatusCode)
fmt.Println(string(dane))
}application/vnd.allegro.public.v1+json{
"id": "2acf7981-8d96-48bb-8eb0-c6f4267e1eec",
"name": "Podróż na Księżyc — wydania",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000021",
"colorPattern": "DVD"
},
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
}
],
"allee": {
"setId": 1,
"category": {
"id": "20585",
"alleeId": 35
},
"parameters": [
{
"id": "color/pattern",
"alleeId": 0,
"name": "Kolor"
}
],
"offers": [
{
"id": "900000000000021",
"values": [
{
"parameterId": "color/pattern",
"name": "Kolor",
"value": "DVD",
"valueId": null
}
],
"publication": {
"status": "ACTIVE"
},
"stock": {
"available": 8
},
"sellingMode": {
"price": {
"amount": "44.90",
"currency": "PLN"
}
},
"external": {
"id": "FILM-21ef85-1"
},
"url": "https://allee.pl/oferta/podroz-na-ksiezyc-dvd-wydanie-kolekcjonerskie-900000000000021"
},
{
"id": "900000000000023",
"values": [
{
"parameterId": "color/pattern",
"name": "Kolor",
"value": "Blu-ray",
"valueId": null
}
],
"publication": {
"status": "ACTIVE"
},
"stock": {
"available": 10
},
"sellingMode": {
"price": {
"amount": "49.90",
"currency": "PLN"
}
},
"external": {
"id": "FILM-21ef85-WAR"
},
"url": "https://allee.pl/oferta/podroz-na-ksiezyc-blu-ray-wydanie-kolekcjonerskie-900000000000023"
}
],
"createdAt": "2026-11-10T11:10:04.000Z",
"updatedAt": "2026-11-10T11:10:04.000Z"
}
}Zestaw wariantów
GET /sale/offer-variants/{setId}
Allegro + rozszerzeniaallegro:api:sale:offers:readlimit: read
Zestaw w kształcie Allegro + blok allee: wartości wyboru każdej oferty, status publikacji, stan, cena, SKU i adres strony oferty. Zestaw innego sprzedawcy → 403.
Zgodność: zgodna z Allegro REST API, z rozszerzeniami allee (pola allee.*, alleeId) — GET /sale/offer-variants/{setId}.
Uprawnienie: zakres allegro:api:sale:offers:read.
Grupa limitu: read.
Parametry ścieżki
setId string · uuid wymaganyIdentyfikator zestawu (UUID — w PUT nadaje go integrator, zalecany v4).
Odpowiedzi
200 Zestaw. · OfferVariantSet
id string · uuid zawszesetId (UUID).
name string zawszeparameters array<object> zawszePola obiektu
id string zawszeId parametru Allegro albo „color/pattern”.
offers array<object> zawszePola obiektu
id string zawszecolorPattern string · null zawszeallee object zawszeRozszerzenie allee.
Pola obiektu
setId integer zawszeNumer wewnętrzny zestawu.
category object zawszePola obiektu
id string · null zawszeKategoria Allegro.
alleeId integer zawszeKategoria allee.
parameters array<object> zawszePola obiektu
id string zawszealleeId integer zawsze0 = color/pattern.
name string · null zawszeoffers array<object> zawszePola obiektu
id string zawszevalues array<object> zawszePola obiektu
parameterId string zawszename string · null zawszevalue string zawszeWartość wyboru oferty (np. 42).
valueId string · null zawszeId wartości słownika Allegro.
publication object zawszePola obiektu
status PublicationStatus · null zawszestock object zawszePola obiektu
available integer · null zawszesellingMode object · null zawszePola obiektu
price Money zawszeKwota (kształt Allegro).
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNexternal object · null zawszePola obiektu
id string zawszeurl string · uri · null zawszeStrona oferty-wariantu na allee.pl.
createdAt string · date-time zawszeupdatedAt string · date-time zawszeBłędy
| HTTP | Kod | Znaczenie |
|---|---|---|
| 401 | invalid_token | Brak, zły, wygasły albo odwołany token lub klucz (format OAuth, nagłówek WWW-Authenticate). |
| 403 | ACCOUNT_INACTIVE | Konto sprzedawcy jest nieaktywne. |
| 403 | AccessDenied | Brak zakresu albo zasób innego sprzedawcy. |
| 403 | KEY_QUARANTINED | Kwarantanna: działa tylko odczyt (wykryto nietypowe użycie). |
| 403 | KEY_SUSPENDED | Klucz albo dostęp aplikacji wstrzymany (przez sprzedawcę albo ochronę). |
| 404 | NOT_FOUND | Nie ma takiego zasobu (albo należy do innego sprzedawcy — dla wątków, zwrotów i spraw odpowiedź jest ta sama). |
| 429 | TOO_MANY_REQUESTS | Przekroczony limit (minutowy, grupy operacji albo IP). |
| 500 | INTERNAL_ERROR | Błąd serwera allee. |
| 503 | NOT_DEPLOYED | Funkcja jeszcze nie uruchomiona (np. sandbox, wsady). |
curl -sS -X GET "${ALLEE_API_URL:-https://api.allee.pl}/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('ALLEE_API_KEY'),
'Accept: application/vnd.allegro.public.v1+json',
],
CURLOPT_RETURNTRANSFER => true,
]);
$odp = curl_exec($ch);
echo 'HTTP ', curl_getinfo($ch, CURLINFO_RESPONSE_CODE), "\n", $odp, "\n";# allee API: GET /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Python 3, biblioteka requests)
import os
import requests
BASE = os.environ.get("ALLEE_API_URL", "https://api.allee.pl")
headers = {
"Authorization": "Bearer " + os.environ["ALLEE_API_KEY"],
"Accept": "application/vnd.allegro.public.v1+json",
}
r = requests.request("GET", BASE + "/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec`, {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.ALLEE_API_KEY}`,
"Accept": "application/vnd.allegro.public.v1+json",
},
redirect: "manual",
});
console.log("HTTP", res.status);
console.log(await res.text());// allee API: GET /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (C#, .NET 8+, HttpClient)
using System.Net.Http.Headers;
using System.Text;
var baseUrl = Environment.GetEnvironmentVariable("ALLEE_API_URL") ?? "https://api.allee.pl";
using var http = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false });
using var req = new HttpRequestMessage(new HttpMethod("GET"), baseUrl + "/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.public.v1+json");
using var res = await http.SendAsync(req);
Console.WriteLine($"HTTP {(int)res.StatusCode}");
Console.WriteLine(await res.Content.ReadAsStringAsync());// allee API: GET /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Java 11+, java.net.http; uruchom: java Main.java)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String base = System.getenv().getOrDefault("ALLEE_API_URL", "https://api.allee.pl");
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec"))
.header("Authorization", "Bearer " + System.getenv("ALLEE_API_KEY"))
.header("Accept", "application/vnd.allegro.public.v1+json")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpClient http = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpResponse<String> res = http.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println("HTTP " + res.statusCode());
System.out.println(res.body());
}
}// allee API: GET /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Go 1.20+, net/http; uruchom: go run main.go)
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
base := os.Getenv("ALLEE_API_URL")
if base == "" {
base = "https://api.allee.pl"
}
req, err := http.NewRequest("GET", base+"/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("ALLEE_API_KEY"))
req.Header.Set("Accept", "application/vnd.allegro.public.v1+json")
klient := &http.Client{CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
res, err := klient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
dane, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
fmt.Println("HTTP", res.StatusCode)
fmt.Println(string(dane))
}application/vnd.allegro.public.v1+json{
"id": "2acf7981-8d96-48bb-8eb0-c6f4267e1eec",
"name": "Podróż na Księżyc — wydania",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000021",
"colorPattern": "DVD"
},
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
}
],
"allee": {
"setId": 1,
"category": {
"id": "20585",
"alleeId": 35
},
"parameters": [
{
"id": "color/pattern",
"alleeId": 0,
"name": "Kolor"
}
],
"offers": [
{
"id": "900000000000021",
"values": [
{
"parameterId": "color/pattern",
"name": "Kolor",
"value": "DVD",
"valueId": null
}
],
"publication": {
"status": "ACTIVE"
},
"stock": {
"available": 8
},
"sellingMode": {
"price": {
"amount": "44.90",
"currency": "PLN"
}
},
"external": {
"id": "FILM-21ef85-1"
},
"url": "https://allee.pl/oferta/podroz-na-ksiezyc-dvd-wydanie-kolekcjonerskie-900000000000021"
},
{
"id": "900000000000023",
"values": [
{
"parameterId": "color/pattern",
"name": "Kolor",
"value": "Blu-ray",
"valueId": null
}
],
"publication": {
"status": "ACTIVE"
},
"stock": {
"available": 10
},
"sellingMode": {
"price": {
"amount": "49.90",
"currency": "PLN"
}
},
"external": {
"id": "FILM-21ef85-WAR"
},
"url": "https://allee.pl/oferta/podroz-na-ksiezyc-blu-ray-wydanie-kolekcjonerskie-900000000000023"
}
],
"createdAt": "2026-11-10T11:10:04.000Z",
"updatedAt": "2026-11-10T11:10:04.000Z"
}
}Rozłączenie zestawu wariantów
DELETE /sale/offer-variants/{setId}
zgodna z Allegroallegro:api:sale:offers:writelimit: write
Rozłącza zestaw: oferty zostają bez zmian (w sprzedaży, z tym samym stanem i ceną), znikają tylko z przełącznika i znów są osobnymi kartami w wynikach.
Zgodność: zgodna z Allegro REST API (ten sam kształt) — DELETE /sale/offer-variants/{setId}.
Uprawnienie: zakres allegro:api:sale:offers:write.
Grupa limitu: write.
Parametry ścieżki
setId string · uuid wymaganyIdentyfikator zestawu (UUID — w PUT nadaje go integrator, zalecany v4).
Odpowiedzi
204 Rozłączono.
Błędy
| HTTP | Kod | Znaczenie |
|---|---|---|
| 401 | invalid_token | Brak, zły, wygasły albo odwołany token lub klucz (format OAuth, nagłówek WWW-Authenticate). |
| 403 | ACCOUNT_INACTIVE | Konto sprzedawcy jest nieaktywne. |
| 403 | AccessDenied | Brak zakresu albo zasób innego sprzedawcy. |
| 403 | KEY_QUARANTINED | Kwarantanna: działa tylko odczyt (wykryto nietypowe użycie). |
| 403 | KEY_SUSPENDED | Klucz albo dostęp aplikacji wstrzymany (przez sprzedawcę albo ochronę). |
| 404 | NOT_FOUND | Nie ma takiego zasobu (albo należy do innego sprzedawcy — dla wątków, zwrotów i spraw odpowiedź jest ta sama). |
| 429 | TOO_MANY_REQUESTS | Przekroczony limit (minutowy, grupy operacji albo IP). |
| 500 | INTERNAL_ERROR | Błąd serwera allee. |
| 503 | NOT_DEPLOYED | Funkcja jeszcze nie uruchomiona (np. sandbox, wsady). |
curl -sS -X DELETE "${ALLEE_API_URL:-https://api.allee.pl}/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: DELETE /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('ALLEE_API_KEY'),
'Accept: application/vnd.allegro.public.v1+json',
],
CURLOPT_RETURNTRANSFER => true,
]);
$odp = curl_exec($ch);
echo 'HTTP ', curl_getinfo($ch, CURLINFO_RESPONSE_CODE), "\n", $odp, "\n";# allee API: DELETE /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Python 3, biblioteka requests)
import os
import requests
BASE = os.environ.get("ALLEE_API_URL", "https://api.allee.pl")
headers = {
"Authorization": "Bearer " + os.environ["ALLEE_API_KEY"],
"Accept": "application/vnd.allegro.public.v1+json",
}
r = requests.request("DELETE", BASE + "/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: DELETE /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec`, {
method: "DELETE",
headers: {
Authorization: `Bearer ${process.env.ALLEE_API_KEY}`,
"Accept": "application/vnd.allegro.public.v1+json",
},
redirect: "manual",
});
console.log("HTTP", res.status);
console.log(await res.text());// allee API: DELETE /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (C#, .NET 8+, HttpClient)
using System.Net.Http.Headers;
using System.Text;
var baseUrl = Environment.GetEnvironmentVariable("ALLEE_API_URL") ?? "https://api.allee.pl";
using var http = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false });
using var req = new HttpRequestMessage(new HttpMethod("DELETE"), baseUrl + "/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.public.v1+json");
using var res = await http.SendAsync(req);
Console.WriteLine($"HTTP {(int)res.StatusCode}");
Console.WriteLine(await res.Content.ReadAsStringAsync());// allee API: DELETE /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Java 11+, java.net.http; uruchom: java Main.java)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String base = System.getenv().getOrDefault("ALLEE_API_URL", "https://api.allee.pl");
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec"))
.header("Authorization", "Bearer " + System.getenv("ALLEE_API_KEY"))
.header("Accept", "application/vnd.allegro.public.v1+json")
.method("DELETE", HttpRequest.BodyPublishers.noBody())
.build();
HttpClient http = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpResponse<String> res = http.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println("HTTP " + res.statusCode());
System.out.println(res.body());
}
}// allee API: DELETE /sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec (Go 1.20+, net/http; uruchom: go run main.go)
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
base := os.Getenv("ALLEE_API_URL")
if base == "" {
base = "https://api.allee.pl"
}
req, err := http.NewRequest("DELETE", base+"/sale/offer-variants/2acf7981-8d96-48bb-8eb0-c6f4267e1eec", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("ALLEE_API_KEY"))
req.Header.Set("Accept", "application/vnd.allegro.public.v1+json")
klient := &http.Client{CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
res, err := klient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
dane, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
fmt.Println("HTTP", res.StatusCode)
fmt.Println(string(dane))
}text/html; charset=UTF-8(0 B: text/html; charset=UTF-8)Lista zestawów wariantów
GET /sale/offer-variants
Allegro + rozszerzeniaallegro:api:sale:offers:readlimit: read
Zestawy sprzedawcy od najnowszego. user.id (Allegro: wymagany) jest u nas opcjonalny — jeśli podany, musi wskazywać zalogowanego sprzedawcę (inaczej 403). query = fragment nazwy.
Zgodność: zgodna z Allegro REST API, z rozszerzeniami allee (pola allee.*, alleeId) — GET /sale/offer-variants.
Uprawnienie: zakres allegro:api:sale:offers:read.
Grupa limitu: read.
Parametry zapytania
offset integerIle pozycji pominąć.
limit integerIle pozycji zwrócić (1–100, domyślnie 20).
user.id stringIdentyfikator zalogowanego sprzedawcy (opcjonalny).
query stringFragment nazwy zestawu.
Odpowiedzi
200 Zestawy. · OfferVariantSetList
offerVariants array<OfferVariantSet> zawszePola obiektu
id string · uuid zawszesetId (UUID).
name string zawszeparameters array<object> zawszePola obiektu
id string zawszeId parametru Allegro albo „color/pattern”.
offers array<object> zawszePola obiektu
id string zawszecolorPattern string · null zawszeallee object zawszeRozszerzenie allee.
Pola obiektu
setId integer zawszeNumer wewnętrzny zestawu.
category object zawszePola obiektu
id string · null zawszeKategoria Allegro.
alleeId integer zawszeKategoria allee.
parameters array<object> zawszePola obiektu
id string zawszealleeId integer zawsze0 = color/pattern.
name string · null zawszeoffers array<object> zawszePola obiektu
id string zawszevalues array<object> zawszePola obiektu
parameterId string zawszename string · null zawszevalue string zawszeWartość wyboru oferty (np. 42).
valueId string · null zawszeId wartości słownika Allegro.
publication object zawszePola obiektu
status PublicationStatus · null zawszestock object zawszePola obiektu
available integer · null zawszesellingMode object · null zawszePola obiektu
price Money zawszeKwota (kształt Allegro).
external object · null zawszePola obiektu
id string zawszeurl string · uri · null zawszeStrona oferty-wariantu na allee.pl.
createdAt string · date-time zawszeupdatedAt string · date-time zawszecount integer zawszeZestawów na tej stronie.
totalCount integer zawszeWszystkich zestawów sprzedawcy.
Błędy
| HTTP | Kod | Znaczenie |
|---|---|---|
| 400 | VALIDATION_ERROR | Zła wartość parametru zapytania (400) albo pola treści (422); path wskazuje miejsce. |
| 401 | invalid_token | Brak, zły, wygasły albo odwołany token lub klucz (format OAuth, nagłówek WWW-Authenticate). |
| 403 | ACCOUNT_INACTIVE | Konto sprzedawcy jest nieaktywne. |
| 403 | AccessDenied | Brak zakresu albo zasób innego sprzedawcy. |
| 403 | KEY_QUARANTINED | Kwarantanna: działa tylko odczyt (wykryto nietypowe użycie). |
| 403 | KEY_SUSPENDED | Klucz albo dostęp aplikacji wstrzymany (przez sprzedawcę albo ochronę). |
| 429 | TOO_MANY_REQUESTS | Przekroczony limit (minutowy, grupy operacji albo IP). |
| 500 | INTERNAL_ERROR | Błąd serwera allee. |
| 503 | NOT_DEPLOYED | Funkcja jeszcze nie uruchomiona (np. sandbox, wsady). |
curl -sS -X GET "${ALLEE_API_URL:-https://api.allee.pl}/sale/offer-variants?limit=20" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /sale/offer-variants (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/sale/offer-variants?limit=20');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('ALLEE_API_KEY'),
'Accept: application/vnd.allegro.public.v1+json',
],
CURLOPT_RETURNTRANSFER => true,
]);
$odp = curl_exec($ch);
echo 'HTTP ', curl_getinfo($ch, CURLINFO_RESPONSE_CODE), "\n", $odp, "\n";# allee API: GET /sale/offer-variants (Python 3, biblioteka requests)
import os
import requests
BASE = os.environ.get("ALLEE_API_URL", "https://api.allee.pl")
headers = {
"Authorization": "Bearer " + os.environ["ALLEE_API_KEY"],
"Accept": "application/vnd.allegro.public.v1+json",
}
r = requests.request("GET", BASE + "/sale/offer-variants?limit=20", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /sale/offer-variants (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/sale/offer-variants?limit=20`, {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.ALLEE_API_KEY}`,
"Accept": "application/vnd.allegro.public.v1+json",
},
redirect: "manual",
});
console.log("HTTP", res.status);
console.log(await res.text());// allee API: GET /sale/offer-variants (C#, .NET 8+, HttpClient)
using System.Net.Http.Headers;
using System.Text;
var baseUrl = Environment.GetEnvironmentVariable("ALLEE_API_URL") ?? "https://api.allee.pl";
using var http = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false });
using var req = new HttpRequestMessage(new HttpMethod("GET"), baseUrl + "/sale/offer-variants?limit=20");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.public.v1+json");
using var res = await http.SendAsync(req);
Console.WriteLine($"HTTP {(int)res.StatusCode}");
Console.WriteLine(await res.Content.ReadAsStringAsync());// allee API: GET /sale/offer-variants (Java 11+, java.net.http; uruchom: java Main.java)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String base = System.getenv().getOrDefault("ALLEE_API_URL", "https://api.allee.pl");
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/sale/offer-variants?limit=20"))
.header("Authorization", "Bearer " + System.getenv("ALLEE_API_KEY"))
.header("Accept", "application/vnd.allegro.public.v1+json")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpClient http = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpResponse<String> res = http.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println("HTTP " + res.statusCode());
System.out.println(res.body());
}
}// allee API: GET /sale/offer-variants (Go 1.20+, net/http; uruchom: go run main.go)
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
base := os.Getenv("ALLEE_API_URL")
if base == "" {
base = "https://api.allee.pl"
}
req, err := http.NewRequest("GET", base+"/sale/offer-variants?limit=20", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("ALLEE_API_KEY"))
req.Header.Set("Accept", "application/vnd.allegro.public.v1+json")
klient := &http.Client{CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
res, err := klient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
dane, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
fmt.Println("HTTP", res.StatusCode)
fmt.Println(string(dane))
}application/vnd.allegro.public.v1+json{
"offerVariants": [
{
"id": "2acf7981-8d96-48bb-8eb0-c6f4267e1eec",
"name": "Podróż na Księżyc — DVD i Blu-ray",
"parameters": [
{
"id": "color/pattern"
}
],
"offers": [
{
"id": "900000000000023",
"colorPattern": "Blu-ray"
},
{
"id": "900000000000021",
"colorPattern": "DVD"
}
],
"allee": {
"setId": 1,
"category": {
"id": "20585",
"alleeId": 35
},
"parameters": [
{
"id": "color/pattern",
"alleeId": 0,
"name": "Kolor"
}
],
"offers": [
{
"id": "900000000000023",
"values": [
{
"parameterId": "color/pattern",
"name": "Kolor",
"value": "Blu-ray",
"valueId": null
}
],
"publication": {
"status": "ACTIVE"
},
"stock": {
"available": 10
},
"sellingMode": {
"price": {
"amount": "49.90",
"currency": "PLN"
}
},
"external": {
"id": "FILM-21ef85-WAR"
},
"url": "https://allee.pl/oferta/podroz-na-ksiezyc-blu-ray-wydanie-kolekcjonerskie-900000000000023"
},
{
"id": "900000000000021",
"values": [
{
"parameterId": "color/pattern",
"name": "Kolor",
"value": "DVD",
"valueId": null
}
],
"publication": {
"status": "ACTIVE"
},
"stock": {
"available": 8
},
"sellingMode": {
"price": {
"amount": "44.90",
"currency": "PLN"
}
},
"external": {
"id": "FILM-21ef85-1"
},
"url": "https://allee.pl/oferta/podroz-na-ksiezyc-dvd-wydanie-kolekcjonerskie-900000000000021"
}
],
"createdAt": "2026-11-10T11:10:04.000Z",
"updatedAt": "2026-11-10T11:10:04.000Z"
}
}
],
"count": 1,
"totalCount": 1
}