Zgodność sprzedawcy
Profil prawny (4 rodzaje sprzedawcy), statusy weryfikacji, lista braków z kodami, oświadczenia z wersjami i historia zmian (DSA, GPSR). Od 10.11.2026.
- GET
/sale/offers/{offerId}/compliance— Wymagania prawne oferty (GPSR, etykiety, skład) - GET
/allee/sellers/legal-profile— Profil prawny sprzedawcy - PUT
/allee/sellers/legal-profile— Zmiana profilu prawnego - GET
/allee/sellers/legal-profile/history— Historia zmian danych prawnych - GET
/allee/sellers/compliance— Stan zgodności: statusy, braki, blokady - GET
/allee/declarations— Oświadczenia sprzedawcy (treści z wersjami) - POST
/allee/sellers/declarations— Złożenie oświadczenia - GET
/allee/compliance/rules— Wymagania prawne w kategorii - GET
/allee/notices— Zgłoszenia nielegalnych treści (DSA) - POST
/allee/notices/{id}/response— Stanowisko sprzedawcy do zgłoszenia - GET
/allee/decisions— Decyzje allee z uzasadnieniem (DSA) - GET
/allee/decisions/{id}— Decyzja (uzasadnienie) - POST
/allee/decisions/{id}/appeal— Odwołanie od decyzji
Wymagania prawne oferty (GPSR, etykiety, skład)
GET /sale/offers/{offerId}/compliance
tylko alleeallegro:api:sale:offers:readlimit: read
Ocena oferty regułami kategorii (GPSR: producent, informacje o bezpieczeństwie, osoba w UE dla producenta spoza UE; klasa energetyczna; kod EPREL; skład wyrobu tekstylnego). Każdy problem ma regułę z wersją, podstawę prawną i ścieżkę pola.
publishingAllowed mówi, czy ofertę można teraz opublikować lub wznowić (profil sprzedawcy + reguły z blokadą). Reguły blokujące działają od blockingFrom — wcześniej są ostrzeżeniami.
Zgodność: tylko allee — Rozszerzenie allee (Z2).
Uprawnienie: zakres allegro:api:sale:offers:read.
Grupa limitu: read.
Parametry ścieżki
offerId string wymaganyIdentyfikator oferty (liczba w tekście).
Odpowiedzi
200 Ocena. · OfferCompliance
offerId string zawszestatus string zawszeCOMPLIANT, WARNINGS, BLOCKEDpublishingAllowed boolean zawszeCzy można teraz opublikować / wznowić ofertę.
publishingBlockedBy object · null zawszePola obiektu
code string zawszeSELLER_COMPLIANCE_INCOMPLETE, OFFER_COMPLIANCE_BLOCKEDmessage string zawszeissues array<object> zawszePola obiektu
code string zawszemessage string zawszeseverity string zawszeERROR, WARNINGpath string zawszerule string zawszeruleVersion string zawszelegalBasis string · null zawszeblockingFrom string · date-time · null 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. |
curl -sS -X GET "${ALLEE_API_URL:-https://api.allee.pl}/sale/offers/900000000000021/compliance" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /sale/offers/900000000000021/compliance (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/sale/offers/900000000000021/compliance');
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/offers/900000000000021/compliance (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/offers/900000000000021/compliance", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /sale/offers/900000000000021/compliance (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/sale/offers/900000000000021/compliance`, {
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/offers/900000000000021/compliance (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/offers/900000000000021/compliance");
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/offers/900000000000021/compliance (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/offers/900000000000021/compliance"))
.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/offers/900000000000021/compliance (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/offers/900000000000021/compliance", 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{
"offerId": "900000000000021",
"status": "COMPLIANT",
"publishingAllowed": true,
"publishingBlockedBy": null,
"issues": []
}Profil prawny sprzedawcy
GET /allee/sellers/legal-profile
tylko alleeallegro:api:profile:readlimit: read
Rodzaj sprzedawcy (PRIVATE_PERSON, SOLE_TRADER, COMPANY, UNREGISTERED_ACTIVITY), kraj, język kontaktu, telefon w formacie E.164, imię i nazwisko oraz — dla firm — dane przedsiębiorcy (nazwa, NIP, REGON/KRS/BDO, adres siedziby, kontakt dla kupujących).
sellerTypeConfirmed: false = rodzaj zgadnięty z konta (prywatne/firmowe); potwierdź go przez PUT.
Zgodność: tylko allee — Sellers — getAccount (businessType, primaryContact).
Uprawnienie: zakres allegro:api:profile:read.
Grupa limitu: read.
Odpowiedzi
200 Profil. · SellerLegalProfile
sellerId string zawszesellerType string zawszeRodzaj sprzedawcy: osoba prywatna, jednoosobowa działalność, spółka, działalność nierejestrowana.
PRIVATE_PERSON, SOLE_TRADER, COMPANY, UNREGISTERED_ACTIVITYsellerTypeConfirmed boolean zawszefalse = rodzaj zgadnięty z konta (prywatne/firmowe) — potwierdź go przez PUT.
sellerTypeLabel string zawszeNazwa rodzaju po polsku.
country string zawszeKraj zamieszkania lub siedziby (ISO 3166-1 alfa-2).
contactLanguage string zawszeJęzyk kontaktu (ISO 639-1).
phone string · null zawszeTelefon E.164.
personName string · null zawszeImię i nazwisko.
company object · null zawszeTylko SOLE_TRADER i COMPANY.
Pola obiektu
companyName string · null zawszelegalName string · null zawszePełna nazwa prawna, gdy inna niż companyName.
taxId string · null zawszeNIP (10 cyfr).
registrationNumbers object zawszePola obiektu
regon string · null zawszekrs string · null zawszebdo string · null zawszeaddress object zawszeAdres siedziby.
Pola obiektu
street string · null zawszepostalCode string · null zawszecity string · null zawszecountryCode string zawszecontact object zawszePola obiektu
email string zawszeE-mail dla kupujących (domyślnie e-mail konta).
phone string · null zawszepublicDataVisible boolean zawszeCzy kupujący widzą komplet danych przedsiębiorcy (DSA art. 30) na stronie sklepu i oferty.
updatedAt string · date-time · null 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ę). |
| 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}/allee/sellers/legal-profile" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /allee/sellers/legal-profile (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/allee/sellers/legal-profile');
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 /allee/sellers/legal-profile (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 + "/allee/sellers/legal-profile", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /allee/sellers/legal-profile (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/allee/sellers/legal-profile`, {
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 /allee/sellers/legal-profile (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 + "/allee/sellers/legal-profile");
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 /allee/sellers/legal-profile (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 + "/allee/sellers/legal-profile"))
.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 /allee/sellers/legal-profile (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+"/allee/sellers/legal-profile", 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{
"sellerId": "980000001",
"sellerType": "SOLE_TRADER",
"sellerTypeConfirmed": false,
"sellerTypeLabel": "Jednoosobowa działalność gospodarcza",
"country": "PL",
"contactLanguage": "pl",
"phone": null,
"personName": null,
"company": {
"companyName": null,
"legalName": null,
"taxId": null,
"registrationNumbers": {
"regon": null,
"krs": null,
"bdo": null
},
"address": {
"street": null,
"postalCode": null,
"city": null,
"countryCode": "PL"
},
"contact": {
"email": "[email protected]",
"phone": null
},
"publicDataVisible": false
},
"updatedAt": null
}Zmiana profilu prawnego
PUT /allee/sellers/legal-profile
tylko alleeallegro:api:sale:settings:writelimit: write
Pola, których nie wyślesz, zostają bez zmian (możesz też odesłać to, co zwrócił GET — pola tylko do odczytu pomijamy). Dane firmy sprawdzamy tymi samymi regułami co panel (NIP z cyfrą kontrolną, kod pocztowy, KRS…); błędy mają path pola API, np. address.postalCode.
- Konto prywatne →
SOLE_TRADER/COMPANY: w tym samym żądaniu podajcompanyNameitaxId(i adres siedziby). - Konto firmowe → osoba prywatna: 409
SELLER_TYPE_CHANGE_NOT_ALLOWED(NIP jest na fakturach — zmiana przez pomoc allee). - Każda zmiana trafia do historii (GET …/history) z kanałem
APIi Twoją aplikacją.
Zgodność: tylko allee — — (allee).
Uprawnienie: zakres allegro:api:sale:settings:write.
Grupa limitu: write.
Treść żądania application/vnd.allegro.public.v1+json
sellerType stringPRIVATE_PERSON, SOLE_TRADER, COMPANY, UNREGISTERED_ACTIVITYcountry stringISO 3166-1 alfa-2.
contactLanguage stringpl, en, de, cs, sk, uk, lt, fr, es, itphone string · nullDowolny zapis; zamieniamy na E.164 (9 cyfr bez kierunkowego = Polska).
personName string · nullImię i nazwisko.
companyName stringNazwa firmy (SOLE_TRADER, COMPANY).
taxId stringNIP, z „PL” albo bez.
registrationNumbers objectPola obiektu
regon string · nullkrs string · nullbdo string · nulladdress objectAdres siedziby.
Pola obiektu
street stringpostalCode stringcity stringcountryCode stringcontact objectKontakt dla kupujących.
Pola obiektu
email string · email · nullphone string · nullOdpowiedzi
200 Profil po zmianie. · SellerLegalProfile
sellerId string zawszesellerType string zawszeRodzaj sprzedawcy: osoba prywatna, jednoosobowa działalność, spółka, działalność nierejestrowana.
PRIVATE_PERSON, SOLE_TRADER, COMPANY, UNREGISTERED_ACTIVITYsellerTypeConfirmed boolean zawszefalse = rodzaj zgadnięty z konta (prywatne/firmowe) — potwierdź go przez PUT.
sellerTypeLabel string zawszeNazwa rodzaju po polsku.
country string zawszeKraj zamieszkania lub siedziby (ISO 3166-1 alfa-2).
contactLanguage string zawszeJęzyk kontaktu (ISO 639-1).
phone string · null zawszeTelefon E.164.
personName string · null zawszeImię i nazwisko.
company object · null zawszeTylko SOLE_TRADER i COMPANY.
Pola obiektu
companyName string · null zawszelegalName string · null zawszePełna nazwa prawna, gdy inna niż companyName.
taxId string · null zawszeNIP (10 cyfr).
registrationNumbers object zawszePola obiektu
regon string · null zawszekrs string · null zawszebdo string · null zawszeaddress object zawszeAdres siedziby.
Pola obiektu
street string · null zawszepostalCode string · null zawszecity string · null zawszecountryCode string zawszecontact object zawszePola obiektu
email string zawszeE-mail dla kupujących (domyślnie e-mail konta).
phone string · null zawszepublicDataVisible boolean zawszeCzy kupujący widzą komplet danych przedsiębiorcy (DSA art. 30) na stronie sklepu i oferty.
updatedAt string · date-time · null 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 | SELLER_TYPE_CHANGE_NOT_ALLOWED | Konta firmowego nie można samodzielnie zmienić na prywatne (NIP jest na fakturach i w zamówieniach). |
| 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 | MISSING_REQUIRED | Brak pola wymaganego w tej sytuacji (np. companyName i taxId przy zmianie konta prywatnego na firmowe). |
| 422 | VALIDATION_ERROR | Zła wartość parametru zapytania (400) albo pola treści (422); path wskazuje miejsce. |
| 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}/allee/sellers/legal-profile" \
-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'
{
"phone": "+48 601 234 567",
"contactLanguage": "pl"
}
JSON<?php
// allee API: PUT /allee/sellers/legal-profile (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$body = [
'phone' => '+48 601 234 567',
'contactLanguage' => 'pl',
];
$ch = curl_init($base . '/allee/sellers/legal-profile');
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 /allee/sellers/legal-profile (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 = {
"phone": "+48 601 234 567",
"contactLanguage": "pl",
}
r = requests.request("PUT", BASE + "/allee/sellers/legal-profile", headers=headers, json=body, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: PUT /allee/sellers/legal-profile (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const body = {
"phone": "+48 601 234 567",
"contactLanguage": "pl"
};
const res = await fetch(`${BASE}/allee/sellers/legal-profile`, {
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 /allee/sellers/legal-profile (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 + "/allee/sellers/legal-profile");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.public.v1+json");
var json = """
{
"phone": "+48 601 234 567",
"contactLanguage": "pl"
}
""";
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 /allee/sellers/legal-profile (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 = """
{
"phone": "+48 601 234 567",
"contactLanguage": "pl"
}
""";
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/allee/sellers/legal-profile"))
.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 /allee/sellers/legal-profile (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 := `{
"phone": "+48 601 234 567",
"contactLanguage": "pl"
}`
req, err := http.NewRequest("PUT", base+"/allee/sellers/legal-profile", 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{
"sellerId": "980000001",
"sellerType": "SOLE_TRADER",
"sellerTypeConfirmed": true,
"sellerTypeLabel": "Jednoosobowa działalność gospodarcza",
"country": "PL",
"contactLanguage": "pl",
"phone": "+48601234567",
"personName": null,
"company": {
"companyName": null,
"legalName": null,
"taxId": null,
"registrationNumbers": {
"regon": null,
"krs": null,
"bdo": null
},
"address": {
"street": null,
"postalCode": null,
"city": null,
"countryCode": "PL"
},
"contact": {
"email": "[email protected]",
"phone": null
},
"publicDataVisible": false
},
"updatedAt": "2026-11-10T11:10:03.492Z"
}Historia zmian danych prawnych
GET /allee/sellers/legal-profile/history
tylko alleeallegro:api:profile:readlimit: read
Każda zmiana pola osobno (było → jest), najnowsze pierwsze: z panelu (PANEL), API (API, z identyfikatorem aplikacji), od allee (ADMIN — np. blokada) i automatyczne (SYSTEM). Oświadczenia jako declaration.{KOD}.
Zgodność: tylko allee.
Uprawnienie: zakres allegro:api:profile:read.
Grupa limitu: read.
Parametry zapytania
limit integerIle zmian.
offset integerPrzesunięcie.
Odpowiedzi
200 Zmiany. · SellerLegalProfileHistory
changes array<object> zawszePola obiektu
field string zawszePole (ścieżka API), np. phone, address.city, declaration.DSA_LEGAL_PRODUCTS, restriction.offers.
before string · null zawszeafter string · null zawszechannel string zawszePANEL, API, ADMIN, SYSTEMapplicationId string · null zawszeAplikacja, która zmieniła (kanał API).
changedAt string · date-time zawszelimit integer zawszeoffset integer 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ę). |
| 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}/allee/sellers/legal-profile/history?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 /allee/sellers/legal-profile/history (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/allee/sellers/legal-profile/history?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 /allee/sellers/legal-profile/history (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 + "/allee/sellers/legal-profile/history?limit=20", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /allee/sellers/legal-profile/history (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/allee/sellers/legal-profile/history?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 /allee/sellers/legal-profile/history (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 + "/allee/sellers/legal-profile/history?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 /allee/sellers/legal-profile/history (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 + "/allee/sellers/legal-profile/history?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 /allee/sellers/legal-profile/history (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+"/allee/sellers/legal-profile/history?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{
"changes": [
{
"field": "declaration.DSA_LEGAL_PRODUCTS",
"before": null,
"after": "2026-11-10",
"channel": "API",
"applicationId": "98000",
"changedAt": "2026-11-10T11:10:03.502Z"
},
{
"field": "phone",
"before": null,
"after": "+48601234567",
"channel": "API",
"applicationId": "98000",
"changedAt": "2026-11-10T11:10:03.493Z"
},
{
"field": "contactLanguage",
"before": null,
"after": "pl",
"channel": "API",
"applicationId": "98000",
"changedAt": "2026-11-10T11:10:03.493Z"
},
{
"field": "country",
"before": null,
"after": "PL",
"channel": "API",
"applicationId": "98000",
"changedAt": "2026-11-10T11:10:03.492Z"
},
{
"field": "sellerType",
"before": null,
"after": "SOLE_TRADER",
"channel": "API",
"applicationId": "98000",
"changedAt": "2026-11-10T11:10:03.492Z"
}
],
"limit": 20,
"offset": 0
}Stan zgodności: statusy, braki, blokady
GET /allee/sellers/compliance
tylko alleeallegro:api:profile:readlimit: read
Jedno miejsce, z którego integrator wie, czego brakuje sprzedawcy:
status:ACTIVE(brak braków ERROR),INCOMPLETE,RESTRICTED(blokada ofert lub wypłat),SUSPENDED,CLOSED;statuses: niezależne obszaryidentity,business,tax,productCompliance,payment,dac7(VERIFIED,PENDING,NOT_STARTED,REJECTED,NOT_REQUIRED,NOT_AVAILABLE);missing[]: braki w kształcie błędów ofert (code,path,message,severityERROR/WARNING,area) — wymagania zależą od rodzaju sprzedawcy;restrictions: trzy poziomy blokady (oferty / wypłaty / sprzedaż) z uzasadnieniem;enforcement.active: czy braki ERROR już blokują nowe oferty (dziśfalse).
Zmiana stanu = webhook SELLER_COMPLIANCE_CHANGED.
Zgodność: tylko allee — Account Health (część).
Uprawnienie: zakres allegro:api:profile:read.
Grupa limitu: read.
Odpowiedzi
200 Stan. · SellerCompliance
sellerId string zawszestatus string zawszeStatus główny.
ACTIVE, INCOMPLETE, RESTRICTED, SUSPENDED, CLOSEDsellerType string zawszePRIVATE_PERSON, SOLE_TRADER, COMPANY, UNREGISTERED_ACTIVITYsellerTypeConfirmed boolean zawszestatuses object zawszeObszary niezależne.
Pola obiektu
identity ComplianceArea zawszeStatus jednego obszaru.
Pola obiektu
status string zawszeNOT_AVAILABLE = funkcja allee jeszcze nie działa (np. wypłaty, DAC7).
VERIFIED, PENDING, NOT_STARTED, REJECTED, NOT_REQUIRED, NOT_AVAILABLEreason string · null zawszeWyjaśnienie dla sprzedawcy.
checkedAt string · date-time · nullOstatnie sprawdzenie w rejestrach (business).
vatStatus string · nullStatus VAT z Białej listy (tax).
activeOffers integerAktywne oferty (productCompliance).
business ComplianceArea zawszeStatus jednego obszaru.
Pola obiektu
status string zawszeNOT_AVAILABLE = funkcja allee jeszcze nie działa (np. wypłaty, DAC7).
VERIFIED, PENDING, NOT_STARTED, REJECTED, NOT_REQUIRED, NOT_AVAILABLEreason string · null zawszeWyjaśnienie dla sprzedawcy.
checkedAt string · date-time · nullOstatnie sprawdzenie w rejestrach (business).
vatStatus string · nullStatus VAT z Białej listy (tax).
activeOffers integerAktywne oferty (productCompliance).
payment ComplianceArea zawszeStatus jednego obszaru.
Pola obiektu
status string zawszeNOT_AVAILABLE = funkcja allee jeszcze nie działa (np. wypłaty, DAC7).
VERIFIED, PENDING, NOT_STARTED, REJECTED, NOT_REQUIRED, NOT_AVAILABLEreason string · null zawszeWyjaśnienie dla sprzedawcy.
checkedAt string · date-time · nullOstatnie sprawdzenie w rejestrach (business).
vatStatus string · nullStatus VAT z Białej listy (tax).
activeOffers integerAktywne oferty (productCompliance).
tax ComplianceArea zawszeStatus jednego obszaru.
Pola obiektu
status string zawszeNOT_AVAILABLE = funkcja allee jeszcze nie działa (np. wypłaty, DAC7).
VERIFIED, PENDING, NOT_STARTED, REJECTED, NOT_REQUIRED, NOT_AVAILABLEreason string · null zawszeWyjaśnienie dla sprzedawcy.
checkedAt string · date-time · nullOstatnie sprawdzenie w rejestrach (business).
vatStatus string · nullStatus VAT z Białej listy (tax).
activeOffers integerAktywne oferty (productCompliance).
dac7 ComplianceArea zawszeStatus jednego obszaru.
Pola obiektu
status string zawszeNOT_AVAILABLE = funkcja allee jeszcze nie działa (np. wypłaty, DAC7).
VERIFIED, PENDING, NOT_STARTED, REJECTED, NOT_REQUIRED, NOT_AVAILABLEreason string · null zawszeWyjaśnienie dla sprzedawcy.
checkedAt string · date-time · nullOstatnie sprawdzenie w rejestrach (business).
vatStatus string · nullStatus VAT z Białej listy (tax).
activeOffers integerAktywne oferty (productCompliance).
productCompliance ComplianceArea zawszeStatus jednego obszaru.
Pola obiektu
status string zawszeNOT_AVAILABLE = funkcja allee jeszcze nie działa (np. wypłaty, DAC7).
VERIFIED, PENDING, NOT_STARTED, REJECTED, NOT_REQUIRED, NOT_AVAILABLEreason string · null zawszeWyjaśnienie dla sprzedawcy.
checkedAt string · date-time · nullOstatnie sprawdzenie w rejestrach (business).
vatStatus string · nullStatus VAT z Białej listy (tax).
activeOffers integerAktywne oferty (productCompliance).
restrictions object zawszeTrzy poziomy blokady.
Pola obiektu
offers object zawszeNowe oferty i wznowienia wstrzymane.
Pola obiektu
blocked boolean zawszesince string · date-time · null zawszepayouts object zawszeWypłaty wstrzymane.
Pola obiektu
blocked boolean zawszesince string · date-time · null zawszeselling object zawszeSprzedaż zawieszona.
Pola obiektu
suspended boolean zawszesince string · date-time · null zawszereason string · null zawszeUzasadnienie (DSA art. 17).
missing array<object> zawszeBraki (ERROR przed WARNING).
Pola obiektu
code string zawszeNp. PHONE_MISSING, TAX_ID_INVALID, DECLARATION_REQUIRED, GPSR_PRODUCER_MISSING.
path string zawszePole albo miejsce do uzupełnienia.
message string zawszeuserMessage string zawszeseverity string zawszeERROR = wymagane, WARNING = zalecane.
ERROR, WARNINGarea string zawszeidentity, business, tax, productCompliance, payment, dac7details objectNp. {code, version} oświadczenia.
summary object zawszePola obiektu
errors integer zawszewarnings integer zawszedeclarations array<object> zawszePola obiektu
code string zawszeversion string zawszetitle string zawszerequired boolean zawszeWymagane dla tego rodzaju sprzedawcy.
accepted boolean zawszeZaakceptowana aktualna wersja.
acceptedAt string · date-time · null zawszepreviousVersionAccepted boolean zawszeZaakceptowana wcześniejsza wersja (treść się zmieniła).
enforcement object zawszePola obiektu
active boolean zawszetrue = braki ERROR blokują nowe oferty.
description string 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ę). |
| 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}/allee/sellers/compliance" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /allee/sellers/compliance (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/allee/sellers/compliance');
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 /allee/sellers/compliance (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 + "/allee/sellers/compliance", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /allee/sellers/compliance (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/allee/sellers/compliance`, {
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 /allee/sellers/compliance (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 + "/allee/sellers/compliance");
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 /allee/sellers/compliance (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 + "/allee/sellers/compliance"))
.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 /allee/sellers/compliance (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+"/allee/sellers/compliance", 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{
"sellerId": "980000001",
"status": "INCOMPLETE",
"sellerType": "SOLE_TRADER",
"sellerTypeConfirmed": true,
"statuses": {
"identity": {
"status": "PENDING",
"reason": "Poziom kontaktowy: e-mail potwierdzony przez Google/Litfas i telefon. Weryfikacja dokumentem ruszy z operatorem płatności."
},
"business": {
"status": "NOT_STARTED",
"reason": "Sprawdzimy NIP w Białej liście VAT, VIES i REGON (raz na dobę).",
"checkedAt": null
},
"payment": {
"status": "NOT_AVAILABLE",
"reason": "Wypłaty przez allee ruszą po podłączeniu operatora płatności (KYC/KYB po jego stronie)."
},
"tax": {
"status": "NOT_STARTED",
"reason": null,
"vatStatus": null
},
"dac7": {
"status": "NOT_AVAILABLE",
"reason": "Liczniki DAC7 (progi 30 transakcji / 2000 EUR) — w przygotowaniu."
},
"productCompliance": {
"status": "NOT_STARTED",
"reason": null,
"activeOffers": 20
}
},
"restrictions": {
"offers": {
"blocked": false,
"since": null
},
"payouts": {
"blocked": false,
"since": null
},
"selling": {
"suspended": false,
"since": null
},
"reason": null
},
"missing": [
{
"code": "COMPANY_NAME_MISSING",
"path": "companyName",
"message": "Podaj nazwę firmy (tak jak w CEIDG albo KRS).",
"userMessage": "Podaj nazwę firmy (tak jak w CEIDG albo KRS).",
"severity": "ERROR",
"area": "business"
},
{
"code": "BUSINESS_ADDRESS_MISSING",
"path": "address",
"message": "Podaj adres siedziby firmy (ulica, kod, miejscowość).",
"userMessage": "Podaj adres siedziby firmy (ulica, kod, miejscowość).",
"severity": "ERROR",
"area": "business"
},
{
"code": "PERSON_NAME_MISSING",
"path": "personName",
"message": "Podaj imię i nazwisko właściciela działalności.",
"userMessage": "Podaj imię i nazwisko właściciela działalności.",
"severity": "ERROR",
"area": "identity"
},
{
"code": "DECLARATION_REQUIRED",
"path": "declarations.AUTHENTIC_GOODS",
"message": "Złóż oświadczenie: „Sprzedaję oryginalne towary z legalnego źródła”.",
"userMessage": "Złóż oświadczenie: „Sprzedaję oryginalne towary z legalnego źródła”.",
"severity": "ERROR",
"area": "identity",
"details": {
"code": "AUTHENTIC_GOODS",
"version": "2026-11-10"
}
},
{
"code": "DECLARATION_REQUIRED",
"path": "declarations.DATA_TRUE",
"message": "Złóż oświadczenie: „Moje dane są prawdziwe i aktualne”.",
"userMessage": "Złóż oświadczenie: „Moje dane są prawdziwe i aktualne”.",
"severity": "ERROR",
"area": "identity",
"details": {
"code": "DATA_TRUE",
"version": "2026-11-10"
}
},
{
"code": "DECLARATION_REQUIRED",
"path": "declarations.IMAGE_RIGHTS",
"message": "Złóż oświadczenie: „Mam prawa do zdjęć i opisów”.",
"userMessage": "Złóż oświadczenie: „Mam prawa do zdjęć i opisów”.",
"severity": "ERROR",
"area": "identity",
"details": {
"code": "IMAGE_RIGHTS",
"version": "2026-11-10"
}
},
{
"code": "RETURN_ADDRESS_MISSING",
"path": "returnAddress",
"message": "Ustaw adres zwrotów (panel → Ustawienia → Dane firmy).",
"userMessage": "Ustaw adres zwrotów (panel → Ustawienia → Dane firmy).",
"severity": "ERROR",
"area": "productCompliance"
},
{
"code": "TAX_ID_INVALID",
"path": "taxId",
"message": "Podaj poprawny NIP (10 cyfr).",
"userMessage": "Podaj poprawny NIP (10 cyfr).",
"severity": "ERROR",
"area": "tax"
},
{
"code": "REGON_MISSING",
"path": "registrationNumbers.regon",
"message": "Podaj REGON firmy (9 cyfr) — uzupełnisz go jednym kliknięciem z rejestru w panelu.",
"userMessage": "Podaj REGON firmy (9 cyfr) — uzupełnisz go jednym kliknięciem z rejestru w panelu.",
"severity": "WARNING",
"area": "business"
}
],
"summary": {
"errors": 8,
"warnings": 1
},
"declarations": [
{
"code": "AUTHENTIC_GOODS",
"version": "2026-11-10",
"title": "Sprzedaję oryginalne towary z legalnego źródła",
"required": true,
"accepted": false,
"acceptedAt": null,
"previousVersionAccepted": false
},
{
"code": "DATA_TRUE",
"version": "2026-11-10",
"title": "Moje dane są prawdziwe i aktualne",
"required": true,
"accepted": false,
"acceptedAt": null,
"previousVersionAccepted": false
},
{
"code": "DSA_LEGAL_PRODUCTS",
"version": "2026-11-10",
"title": "Oferuję wyłącznie produkty i usługi zgodne z prawem",
"required": true,
"accepted": true,
"acceptedAt": "2026-11-10T11:10:03.000Z",
"previousVersionAccepted": false
},
{
"code": "IMAGE_RIGHTS",
"version": "2026-11-10",
"title": "Mam prawa do zdjęć i opisów",
"required": true,
"accepted": false,
"acceptedAt": null,
"previousVersionAccepted": false
},
{
"code": "PRIVATE_NOT_TRADER",
"version": "2026-11-10",
"title": "Sprzedaję jako osoba prywatna, nie w ramach działalności",
"required": false,
"accepted": false,
"acceptedAt": null,
"previousVersionAccepted": false
},
{
"code": "UNREGISTERED_LIMIT",
"version": "2026-11-10",
"title": "Działalność nierejestrowana mieści się w limicie",
"required": false,
"accepted": false,
"acceptedAt": null,
"previousVersionAccepted": false
}
],
"enforcement": {
"active": false,
"description": "Braki są informacją — dz
… (skrócono — pełna odpowiedź ma 5 KB)Oświadczenia sprzedawcy (treści z wersjami)
GET /allee/declarations
tylko alleeallegro:api:profile:readlimit: read
Aktualne treści oświadczeń (np. DSA „tylko produkty zgodne z prawem”), dla kogo są wymagane i czy sprzedawca zaakceptował aktualną wersję. Nowa wersja treści = trzeba ją zaakceptować ponownie (w compliance: DECLARATION_UPDATE_REQUIRED).
Zgodność: tylko allee.
Uprawnienie: zakres allegro:api:profile:read.
Grupa limitu: read.
Odpowiedzi
200 Oświadczenia. · DeclarationList
declarations array<Declaration> zawszePola obiektu
code string zawszeversion string zawszetitle string zawszetext string zawszePełna treść do pokazania sprzedawcy.
legalBasis string · null zawszerequiredFor array<string> zawszePRIVATE_PERSON, SOLE_TRADER, COMPANY, UNREGISTERED_ACTIVITYeffectiveFrom string · date-time · null zawszeaccepted object zawszePola obiektu
current boolean zawszeZaakceptowana aktualna wersja.
acceptedAt string · date-time · null zawszeacceptedVersions array<string> 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ę). |
| 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}/allee/declarations" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /allee/declarations (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/allee/declarations');
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 /allee/declarations (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 + "/allee/declarations", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /allee/declarations (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/allee/declarations`, {
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 /allee/declarations (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 + "/allee/declarations");
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 /allee/declarations (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 + "/allee/declarations"))
.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 /allee/declarations (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+"/allee/declarations", 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{
"declarations": [
{
"code": "AUTHENTIC_GOODS",
"version": "2026-11-10",
"title": "Sprzedaję oryginalne towary z legalnego źródła",
"text": "Oświadczam, że sprzedawane przeze mnie towary są oryginalne, pochodzą z legalnego źródła i nie naruszają praw własności intelektualnej (w tym znaków towarowych).",
"legalBasis": "prawo własności przemysłowej",
"requiredFor": [
"SOLE_TRADER",
"COMPANY",
"UNREGISTERED_ACTIVITY"
],
"effectiveFrom": "2026-11-09T23:00:00.000Z",
"accepted": {
"current": false,
"acceptedAt": null,
"acceptedVersions": []
}
},
{
"code": "DATA_TRUE",
"version": "2026-11-10",
"title": "Moje dane są prawdziwe i aktualne",
"text": "Oświadczam, że dane podane w allee (dane identyfikacyjne, adres, dane kontaktowe i rejestrowe) są prawdziwe, kompletne i aktualne, a każdą zmianę wprowadzę bez zwłoki.",
"legalBasis": "DSA art. 30 ust. 1 i 4",
"requiredFor": [
"PRIVATE_PERSON",
"SOLE_TRADER",
"COMPANY",
"UNREGISTERED_ACTIVITY"
],
"effectiveFrom": "2026-11-09T23:00:00.000Z",
"accepted": {
"current": false,
"acceptedAt": null,
"acceptedVersions": []
}
},
{
"code": "DSA_LEGAL_PRODUCTS",
"version": "2026-11-10",
"title": "Oferuję wyłącznie produkty i usługi zgodne z prawem",
"text": "Oświadczam, że oferuję w allee wyłącznie produkty i usługi zgodne z mającymi zastosowanie przepisami prawa Unii Europejskiej i prawa polskiego, w tym z wymaganiami dotyczącymi bezpieczeństwa produktów i oznakowania.",
"legalBasis": "DSA art. 30 ust. 1 lit. e",
"requiredFor": [
"PRIVATE_PERSON",
"SOLE_TRADER",
"COMPANY",
"UNREGISTERED_ACTIVITY"
],
"effectiveFrom": "2026-11-09T23:00:00.000Z",
"accepted": {
"current": false,
"acceptedAt": null,
"acceptedVersions": []
}
},
{
"code": "IMAGE_RIGHTS",
"version": "2026-11-10",
"title": "Mam prawa do zdjęć i opisów",
"text": "Oświadczam, że mam prawo do używania zdjęć, opisów i innych materiałów, które publikuję w ofertach, i że nie naruszają one praw osób trzecich.",
"legalBasis": "ustawa o prawie autorskim i prawach pokrewnych",
"requiredFor": [
"SOLE_TRADER",
"COMPANY",
"UNREGISTERED_ACTIVITY"
],
"effectiveFrom": "2026-11-09T23:00:00.000Z",
"accepted": {
"current": false,
"acceptedAt": null,
"acceptedVersions": []
}
},
{
"code": "PRIVATE_NOT_TRADER",
"version": "2026-11-10",
"title": "Sprzedaję jako osoba prywatna, nie w ramach działalności",
"text": "Oświadczam, że sprzedaję w allee rzeczy z własnego gospodarstwa domowego, okazjonalnie i nie w celach zarobkowych w ramach działalności gospodarczej. Rozumiem, że kupujący nie korzystają wobec mnie z praw konsumenta przysługujących przy zakupie od przedsiębiorcy. Jeśli zacznę sprzedawać zarobkowo, zmienię rodzaj konta.",
"legalBasis": "DSA art. 30 i 31; ustawa o prawach konsumenta",
"requiredFor": [
"PRIVATE_PERSON"
],
"effectiveFrom": "2026-11-09T23:00:00.000Z",
"accepted": {
"current": false,
"acceptedAt": null,
"acceptedVersions": []
}
},
{
"code": "UNREGISTERED_LIMIT",
"version": "2026-11-10",
"title": "Działalność nierejestrowana mieści się w limicie",
"text": "Oświadczam, że prowadzę działalność nierejestrowaną, której przychód należny nie przekracza w żadnym kwartale limitu z art. 5 ustawy Prawo przedsiębiorców. Po przekroczeniu limitu zarejestruję działalność i zmienię rodzaj konta w allee.",
"legalBasis": "Prawo przedsiębiorców art. 5",
"requiredFor": [
"UNREGISTERED_ACTIVITY"
],
"effectiveFrom": "2026-11-09T23:00:00.000Z",
"accepted": {
"current": false,
"acceptedAt": null,
"acceptedVersions": []
}
}
]
}Złożenie oświadczenia
POST /allee/sellers/declarations
tylko alleeallegro:api:sale:settings:writelimit: write
Akceptacja aktualnej wersji. Zapisujemy wersję, czas, kanał API, aplikację i adres IP. Pokaż sprzedawcy treść z GET /allee/declarations, zanim to wyślesz — oświadczenie składa sprzedawca, nie integrator.
Powtórna akceptacja tej samej wersji → 200 (bez zmian). Starsza wersja → 409 DECLARATION_VERSION_OUTDATED z details.currentVersion.
Zgodność: tylko allee.
Uprawnienie: zakres allegro:api:sale:settings: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
code string wymaganeKod z GET /allee/declarations.
version stringWersja, którą sprzedawca przeczytał (zalecane — inna niż aktualna → 409).
Odpowiedzi
200 Już złożone wcześniej. · DeclarationAcceptResponse
code string zawszeversion string zawszeaccepted boolean zawszecompliance object zawszePola obiektu
status string zawszeACTIVE, INCOMPLETE, RESTRICTED, SUSPENDED, CLOSED201 Złożono. · DeclarationAcceptResponse
code string zawszeversion string zawszeaccepted boolean zawszecompliance object zawszePola obiektu
status string zawszeACTIVE, INCOMPLETE, RESTRICTED, SUSPENDED, CLOSEDBłę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 | DECLARATION_VERSION_OUTDATED | Treść oświadczenia zmieniła się — wersja z żądania nie jest aktualna. |
| 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 | VALIDATION_ERROR | Zła wartość parametru zapytania (400) albo pola treści (422); path wskazuje miejsce. |
| 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}/allee/sellers/declarations" \
-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'
{
"code": "DSA_LEGAL_PRODUCTS",
"version": "2026-11-10"
}
JSON<?php
// allee API: POST /allee/sellers/declarations (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$body = [
'code' => 'DSA_LEGAL_PRODUCTS',
'version' => '2026-11-10',
];
$ch = curl_init($base . '/allee/sellers/declarations');
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 /allee/sellers/declarations (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 = {
"code": "DSA_LEGAL_PRODUCTS",
"version": "2026-11-10",
}
r = requests.request("POST", BASE + "/allee/sellers/declarations", headers=headers, json=body, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: POST /allee/sellers/declarations (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const body = {
"code": "DSA_LEGAL_PRODUCTS",
"version": "2026-11-10"
};
const res = await fetch(`${BASE}/allee/sellers/declarations`, {
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 /allee/sellers/declarations (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 + "/allee/sellers/declarations");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.public.v1+json");
var json = """
{
"code": "DSA_LEGAL_PRODUCTS",
"version": "2026-11-10"
}
""";
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 /allee/sellers/declarations (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 = """
{
"code": "DSA_LEGAL_PRODUCTS",
"version": "2026-11-10"
}
""";
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/allee/sellers/declarations"))
.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 /allee/sellers/declarations (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 := `{
"code": "DSA_LEGAL_PRODUCTS",
"version": "2026-11-10"
}`
req, err := http.NewRequest("POST", base+"/allee/sellers/declarations", 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{
"code": "DSA_LEGAL_PRODUCTS",
"version": "2026-11-10",
"accepted": true,
"compliance": {
"status": "INCOMPLETE"
}
}Wymagania prawne w kategorii
GET /allee/compliance/rules
tylko alleelimit: read
Co trzeba podać w ofercie tej kategorii, żeby była zgodna z prawem: reguły z kodem i wersją, wymaganie, ścieżka pola (productSet[0].responsibleProducer, parameters.{id}…), skutek (WARN / BLOCK), od kiedy blokuje, podstawa prawna. Reguły dotyczą poddrzewa kategorii (np. GPSR nie obejmuje żywności, antyków, usług), rodzaju sprzedawcy i stanu produktu; reguły parametrowe — tylko kategorii, które mają dany parametr.
Pytaj raz na kategorię (wynik możesz trzymać w pamięci podręcznej do zmiany wersji reguł).
Zgodność: tylko allee — Product Type Definitions (wymagania prawne).
Uprawnienie: dowolny ważny token lub klucz (działa też token aplikacji client_credentials).
Grupa limitu: read.
Parametry zapytania
category.id string wymaganyKategoria.
sellerType stringTylko reguły dla tego rodzaju sprzedawcy.
PRIVATE_PERSON, SOLE_TRADER, COMPANY, UNREGISTERED_ACTIVITYOdpowiedzi
200 Reguły. · ComplianceRuleList
category object zawszePola obiektu
id string zawszeKategoria allee.
sellerType string · null zawszerules array<ComplianceRule> zawszePola obiektu
code string zawszeversion string zawszename string zawszeissueCode string zawszeKod problemu w issues[] oferty, np. ENERGY_CLASS_MISSING.
requirement string zawszeCo podać.
legalBasis string · null zawszepath string zawszePole oferty, np. parameters.{id} albo productSet[0].responsibleProducer.
sellerTypes array<string> zawszePRIVATE_PERSON, SOLE_TRADER, COMPANY, UNREGISTERED_ACTIVITYcondition string zawszeStan produktu, którego dotyczy.
NEW, ANYeffect string zawszeWARN, BLOCKseverity string zawszeWaga dziś (BLOCK przed blockingFrom = WARNING).
ERROR, WARNINGblockingFrom string · date-time · null zawszeeffectiveFrom string · date-time · null zawszecount integer 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 | CATEGORY_NOT_FOUND | Nie ma takiej kategorii. |
| 422 | VALIDATION_ERROR | Zła wartość parametru zapytania (400) albo pola treści (422); path wskazuje miejsce. |
| 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}/allee/compliance/rules?category.id=20585" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /allee/compliance/rules (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/allee/compliance/rules?category.id=20585');
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 /allee/compliance/rules (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 + "/allee/compliance/rules?category.id=20585", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /allee/compliance/rules (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/allee/compliance/rules?category.id=20585`, {
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 /allee/compliance/rules (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 + "/allee/compliance/rules?category.id=20585");
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 /allee/compliance/rules (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 + "/allee/compliance/rules?category.id=20585"))
.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 /allee/compliance/rules (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+"/allee/compliance/rules?category.id=20585", 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{
"category": {
"id": "20585"
},
"sellerType": null,
"rules": [],
"count": 0
}Zgłoszenia nielegalnych treści (DSA)
GET /allee/notices
tylko alleeallegro:api:sale:offers:readlimit: read
Zgłoszenia dotyczące ofert i sklepu sprzedawcy, najnowsze pierwsze: kategoria, uzasadnienie zgłaszającego, stan (NOWE, W_TOKU, ZASADNE, NIEZASADNE), stanowisko sprzedawcy i numer decyzji. Bez danych zgłaszającego.
Nowe zgłoszenie = webhook OFFER_NOTICE_RECEIVED.
Zgodność: tylko allee — — (DSA art. 16).
Uprawnienie: zakres allegro:api:sale:offers:read.
Grupa limitu: read.
Parametry zapytania
limit integerIle pozycji.
offset integerPrzesunięcie.
Odpowiedzi
200 Zgłoszenia. · NoticeList
notices array<Notice> zawszePola obiektu
id string zawszeNumer zgłoszenia.
offerId string · null zawszesubject string zawszeOFERTA, SKLEP, INNEurl string zawszecategory string zawszeNIELEGALNY_PRODUKT, NIEBEZPIECZNY_PRODUKT, PODROBKA, WLASNOSC_INTELEKTUALNA, OSZUSTWO, TRESC_NIEZGODNA, DANE_OSOBOWE, OCHRONA_MALOLETNICH, OCHRONA_KONSUMENTA, INNEcategoryLabel string zawszeexplanation string zawszeUzasadnienie zgłaszającego.
status string zawszeNOWE, W_TOKU, ZASADNE, NIEZASADNE, WYCOFANEtrustedFlagger boolean zawszeZaufany podmiot sygnalizujący (art. 22).
createdAt string · date-time zawszesellerResponse object · null zawszePola obiektu
text string zawszerespondedAt string · date-time · null zawszechannel string · null zawszePANEL, API, nulldecisionId string · null zawszelimit integer zawszeoffset integer 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ę). |
| 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}/allee/notices" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /allee/notices (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/allee/notices');
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 /allee/notices (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 + "/allee/notices", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /allee/notices (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/allee/notices`, {
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 /allee/notices (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 + "/allee/notices");
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 /allee/notices (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 + "/allee/notices"))
.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 /allee/notices (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+"/allee/notices", 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{
"notices": [
{
"id": "DSA-2026-000001",
"offerId": "900000000000021",
"subject": "OFERTA",
"url": "https://allee.pl/oferta/-900000000000021",
"category": "PODROBKA",
"categoryLabel": "Podróbka (fałszywy znak towarowy)",
"explanation": "Logo na zdjęciach wygląda na podrobione, a cena jest dużo niższa niż u autoryzowanych sprzedawców.",
"status": "NOWE",
"trustedFlagger": false,
"createdAt": "2026-11-10T11:10:03.000Z",
"sellerResponse": null,
"decisionId": null
}
],
"limit": 50,
"offset": 0
}Stanowisko sprzedawcy do zgłoszenia
POST /allee/notices/{id}/response
tylko alleeallegro:api:sale:offers:writelimit: write
Przed decyzją allee sprzedawca może wyjaśnić, dlaczego treść jest zgodna z prawem (np. faktura od dystrybutora, licencja). Tylko zgłoszenia w stanie NOWE albo W_TOKU; po decyzji → 409 (odwołaj się od decyzji).
Zgodność: tylko allee.
Uprawnienie: zakres allegro:api:sale:offers:write.
Grupa limitu: write.
Parametry ścieżki
id string wymaganyNumer zgłoszenia.
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
text string wymaganeTreść (stanowisko albo uzasadnienie odwołania).
Odpowiedzi
200 Zgłoszenie ze stanowiskiem. · Notice
id string zawszeNumer zgłoszenia.
offerId string · null zawszesubject string zawszeOFERTA, SKLEP, INNEurl string zawszecategory string zawszeNIELEGALNY_PRODUKT, NIEBEZPIECZNY_PRODUKT, PODROBKA, WLASNOSC_INTELEKTUALNA, OSZUSTWO, TRESC_NIEZGODNA, DANE_OSOBOWE, OCHRONA_MALOLETNICH, OCHRONA_KONSUMENTA, INNEcategoryLabel string zawszeexplanation string zawszeUzasadnienie zgłaszającego.
status string zawszeNOWE, W_TOKU, ZASADNE, NIEZASADNE, WYCOFANEtrustedFlagger boolean zawszeZaufany podmiot sygnalizujący (art. 22).
createdAt string · date-time zawszesellerResponse object · null zawszePola obiektu
text string zawszerespondedAt string · date-time · null zawszechannel string · null zawszePANEL, API, nulldecisionId string · null 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 | CONFLICT | Operacja niemożliwa w obecnym stanie (np. zgłoszenie już rozpatrzone, odwołanie już złożone). |
| 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 | VALIDATION_ERROR | Zła wartość parametru zapytania (400) albo pola treści (422); path wskazuje miejsce. |
| 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}/allee/notices/DSA-2026-000001/response" \
-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'
{
"text": "Produkt pochodzi od autoryzowanego dystrybutora — faktura FV/2026/11/123."
}
JSON<?php
// allee API: POST /allee/notices/DSA-2026-000001/response (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$body = [
'text' => 'Produkt pochodzi od autoryzowanego dystrybutora — faktura FV/2026/11/123.',
];
$ch = curl_init($base . '/allee/notices/DSA-2026-000001/response');
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 /allee/notices/DSA-2026-000001/response (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 = {
"text": "Produkt pochodzi od autoryzowanego dystrybutora — faktura FV/2026/11/123.",
}
r = requests.request("POST", BASE + "/allee/notices/DSA-2026-000001/response", headers=headers, json=body, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: POST /allee/notices/DSA-2026-000001/response (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const body = {
"text": "Produkt pochodzi od autoryzowanego dystrybutora — faktura FV/2026/11/123."
};
const res = await fetch(`${BASE}/allee/notices/DSA-2026-000001/response`, {
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 /allee/notices/DSA-2026-000001/response (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 + "/allee/notices/DSA-2026-000001/response");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.public.v1+json");
var json = """
{
"text": "Produkt pochodzi od autoryzowanego dystrybutora — faktura FV/2026/11/123."
}
""";
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 /allee/notices/DSA-2026-000001/response (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 = """
{
"text": "Produkt pochodzi od autoryzowanego dystrybutora — faktura FV/2026/11/123."
}
""";
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/allee/notices/DSA-2026-000001/response"))
.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 /allee/notices/DSA-2026-000001/response (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 := `{
"text": "Produkt pochodzi od autoryzowanego dystrybutora — faktura FV/2026/11/123."
}`
req, err := http.NewRequest("POST", base+"/allee/notices/DSA-2026-000001/response", 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": "DSA-2026-000001",
"offerId": "900000000000021",
"subject": "OFERTA",
"url": "https://allee.pl/oferta/-900000000000021",
"category": "PODROBKA",
"categoryLabel": "Podróbka (fałszywy znak towarowy)",
"explanation": "Logo na zdjęciach wygląda na podrobione, a cena jest dużo niższa niż u autoryzowanych sprzedawców.",
"status": "W_TOKU",
"trustedFlagger": false,
"createdAt": "2026-11-10T11:10:03.000Z",
"sellerResponse": {
"text": "Produkt pochodzi od autoryzowanego dystrybutora — faktura FV/2026/11/123.",
"respondedAt": "2026-11-10T11:10:03.000Z",
"channel": "API"
},
"decisionId": null
}Decyzje allee z uzasadnieniem (DSA)
GET /allee/decisions
tylko alleeallegro:api:sale:offers:readlimit: read
Decyzje ograniczające (zakończenie oferty, ostrzeżenie, blokady, zawieszenie) z uzasadnieniem: środek, podstawa (ILLEGAL_CONTENT — przepis prawa albo TERMS_OF_SERVICE), fakty, czy użyto automatu, środki odwoławcze i termin odwołania.
Nowa decyzja = webhook OFFER_RESTRICTED.
Zgodność: tylko allee — — (DSA art. 17).
Uprawnienie: zakres allegro:api:sale:offers:read.
Grupa limitu: read.
Parametry zapytania
limit integerIle pozycji.
offset integerPrzesunięcie.
Odpowiedzi
200 Decyzje. · DecisionList
decisions array<Decision> zawszePola obiektu
id string zawszenoticeId string · null zawszeofferId string · null zawszemeasure string zawszeBRAK_DZIALANIA, OSTRZEZENIE, OFERTA_ZAKONCZONA, BLOKADA_OFERT, BLOKADA_WYPLAT, ZAWIESZENIEmeasureLabel string zawszelegalGround string zawszeILLEGAL_CONTENT, TERMS_OF_SERVICEgroundReference string zawszePrzepis albo punkt regulaminu.
facts string zawszeFakty i okoliczności.
automatedMeans boolean zawszeterritorialScope string zawszecreatedAt string · date-time zawszeredress object zawszeŚrodki odwoławcze.
Pola obiektu
internalComplaint string zawszeoutOfCourt string zawszecourt string zawszeappealDeadline string · date-time zawszeappeal object · null zawszePola obiektu
status string zawszeSUBMITTED, ACCEPTED, REJECTEDtext string · null zawszesubmittedAt string · date-time · null zawszeresolution string · null zawszeresolvedAt string · date-time · null zawszelimit integer zawszeoffset integer 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ę). |
| 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}/allee/decisions" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /allee/decisions (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/allee/decisions');
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 /allee/decisions (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 + "/allee/decisions", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /allee/decisions (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/allee/decisions`, {
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 /allee/decisions (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 + "/allee/decisions");
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 /allee/decisions (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 + "/allee/decisions"))
.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 /allee/decisions (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+"/allee/decisions", 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{
"decisions": [
{
"id": "DEC-2026-000001",
"noticeId": "DSA-2026-000001",
"offerId": "900000000000021",
"measure": "OSTRZEZENIE",
"measureLabel": "Ostrzeżenie dla sprzedawcy",
"legalGround": "TERMS_OF_SERVICE",
"groundReference": "§ 7 regulaminu allee (oryginalność towarów)",
"facts": "Zdjęcia sugerują podrobiony znak; sprzedawca przedstawił fakturę — ostrzeżenie zamiast zakończenia oferty.",
"automatedMeans": false,
"territorialScope": "allee.pl (cała UE)",
"createdAt": "2026-11-10T11:10:03.000Z",
"redress": {
"internalComplaint": "Odwołanie w panelu (Ustawienia › Zgodność) albo POST /allee/decisions/{id}/appeal do 12.05.2027.",
"outOfCourt": "Certyfikowany organ pozasądowego rozstrzygania sporów (art. 21 DSA).",
"court": "Sąd powszechny."
},
"appealDeadline": "2027-05-12T11:10:03.000Z",
"appeal": null
}
],
"limit": 50,
"offset": 0
}Decyzja (uzasadnienie)
GET /allee/decisions/{id}
tylko alleeallegro:api:sale:offers:readlimit: read
Jedna decyzja ze stanem odwołania.
Zgodność: tylko allee.
Uprawnienie: zakres allegro:api:sale:offers:read.
Grupa limitu: read.
Parametry ścieżki
id string wymaganyNumer decyzji.
Odpowiedzi
200 Decyzja. · Decision
id string zawszenoticeId string · null zawszeofferId string · null zawszemeasure string zawszeBRAK_DZIALANIA, OSTRZEZENIE, OFERTA_ZAKONCZONA, BLOKADA_OFERT, BLOKADA_WYPLAT, ZAWIESZENIEmeasureLabel string zawszelegalGround string zawszeILLEGAL_CONTENT, TERMS_OF_SERVICEgroundReference string zawszePrzepis albo punkt regulaminu.
facts string zawszeFakty i okoliczności.
automatedMeans boolean zawszeterritorialScope string zawszecreatedAt string · date-time zawszeredress object zawszeŚrodki odwoławcze.
Pola obiektu
internalComplaint string zawszeoutOfCourt string zawszecourt string zawszeappealDeadline string · date-time zawszeappeal object · null zawszePola obiektu
status string zawszeSUBMITTED, ACCEPTED, REJECTEDtext string · null zawszesubmittedAt string · date-time · null zawszeresolution string · null zawszeresolvedAt string · date-time · null 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}/allee/decisions/DEC-2026-000001" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.public.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /allee/decisions/DEC-2026-000001 (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/allee/decisions/DEC-2026-000001');
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 /allee/decisions/DEC-2026-000001 (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 + "/allee/decisions/DEC-2026-000001", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /allee/decisions/DEC-2026-000001 (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/allee/decisions/DEC-2026-000001`, {
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 /allee/decisions/DEC-2026-000001 (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 + "/allee/decisions/DEC-2026-000001");
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 /allee/decisions/DEC-2026-000001 (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 + "/allee/decisions/DEC-2026-000001"))
.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 /allee/decisions/DEC-2026-000001 (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+"/allee/decisions/DEC-2026-000001", 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": "DEC-2026-000001",
"noticeId": "DSA-2026-000001",
"offerId": "900000000000021",
"measure": "OSTRZEZENIE",
"measureLabel": "Ostrzeżenie dla sprzedawcy",
"legalGround": "TERMS_OF_SERVICE",
"groundReference": "§ 7 regulaminu allee (oryginalność towarów)",
"facts": "Zdjęcia sugerują podrobiony znak; sprzedawca przedstawił fakturę — ostrzeżenie zamiast zakończenia oferty.",
"automatedMeans": false,
"territorialScope": "allee.pl (cała UE)",
"createdAt": "2026-11-10T11:10:03.000Z",
"redress": {
"internalComplaint": "Odwołanie w panelu (Ustawienia › Zgodność) albo POST /allee/decisions/{id}/appeal do 12.05.2027.",
"outOfCourt": "Certyfikowany organ pozasądowego rozstrzygania sporów (art. 21 DSA).",
"court": "Sąd powszechny."
},
"appealDeadline": "2027-05-12T11:10:03.000Z",
"appeal": null
}Odwołanie od decyzji
POST /allee/decisions/{id}/appeal
tylko alleeallegro:api:sale:offers:writelimit: write
Odwołanie w ciągu 6 miesięcy; rozpatruje człowiek. Uchylenie cofa środek (wznowienie oferty, zdjęcie blokady). Jedno odwołanie na decyzję — drugie → 409.
Zgodność: tylko allee — — (DSA art. 20).
Uprawnienie: zakres allegro:api:sale:offers:write.
Grupa limitu: write.
Parametry ścieżki
id string wymaganyNumer decyzji.
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
text string wymaganeTreść (stanowisko albo uzasadnienie odwołania).
Odpowiedzi
201 Odwołanie złożone. · Decision
id string zawszenoticeId string · null zawszeofferId string · null zawszemeasure string zawszeBRAK_DZIALANIA, OSTRZEZENIE, OFERTA_ZAKONCZONA, BLOKADA_OFERT, BLOKADA_WYPLAT, ZAWIESZENIEmeasureLabel string zawszelegalGround string zawszeILLEGAL_CONTENT, TERMS_OF_SERVICEgroundReference string zawszePrzepis albo punkt regulaminu.
facts string zawszeFakty i okoliczności.
automatedMeans boolean zawszeterritorialScope string zawszecreatedAt string · date-time zawszeredress object zawszeŚrodki odwoławcze.
Pola obiektu
internalComplaint string zawszeoutOfCourt string zawszecourt string zawszeappealDeadline string · date-time zawszeappeal object · null zawszePola obiektu
status string zawszeSUBMITTED, ACCEPTED, REJECTEDtext string · null zawszesubmittedAt string · date-time · null zawszeresolution string · null zawszeresolvedAt string · date-time · null 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 | CONFLICT | Operacja niemożliwa w obecnym stanie (np. zgłoszenie już rozpatrzone, odwołanie już złożone). |
| 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 | VALIDATION_ERROR | Zła wartość parametru zapytania (400) albo pola treści (422); path wskazuje miejsce. |
| 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}/allee/decisions/DEC-2026-000001/appeal" \
-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'
{
"text": "Faktura potwierdza legalne pochodzenie towaru — proszę o uchylenie ostrzeżenia."
}
JSON<?php
// allee API: POST /allee/decisions/DEC-2026-000001/appeal (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$body = [
'text' => 'Faktura potwierdza legalne pochodzenie towaru — proszę o uchylenie ostrzeżenia.',
];
$ch = curl_init($base . '/allee/decisions/DEC-2026-000001/appeal');
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 /allee/decisions/DEC-2026-000001/appeal (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 = {
"text": "Faktura potwierdza legalne pochodzenie towaru — proszę o uchylenie ostrzeżenia.",
}
r = requests.request("POST", BASE + "/allee/decisions/DEC-2026-000001/appeal", headers=headers, json=body, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: POST /allee/decisions/DEC-2026-000001/appeal (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const body = {
"text": "Faktura potwierdza legalne pochodzenie towaru — proszę o uchylenie ostrzeżenia."
};
const res = await fetch(`${BASE}/allee/decisions/DEC-2026-000001/appeal`, {
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 /allee/decisions/DEC-2026-000001/appeal (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 + "/allee/decisions/DEC-2026-000001/appeal");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.public.v1+json");
var json = """
{
"text": "Faktura potwierdza legalne pochodzenie towaru — proszę o uchylenie ostrzeżenia."
}
""";
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 /allee/decisions/DEC-2026-000001/appeal (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 = """
{
"text": "Faktura potwierdza legalne pochodzenie towaru — proszę o uchylenie ostrzeżenia."
}
""";
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/allee/decisions/DEC-2026-000001/appeal"))
.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 /allee/decisions/DEC-2026-000001/appeal (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 := `{
"text": "Faktura potwierdza legalne pochodzenie towaru — proszę o uchylenie ostrzeżenia."
}`
req, err := http.NewRequest("POST", base+"/allee/decisions/DEC-2026-000001/appeal", 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": "DEC-2026-000001",
"noticeId": "DSA-2026-000001",
"offerId": "900000000000021",
"measure": "OSTRZEZENIE",
"measureLabel": "Ostrzeżenie dla sprzedawcy",
"legalGround": "TERMS_OF_SERVICE",
"groundReference": "§ 7 regulaminu allee (oryginalność towarów)",
"facts": "Zdjęcia sugerują podrobiony znak; sprzedawca przedstawił fakturę — ostrzeżenie zamiast zakończenia oferty.",
"automatedMeans": false,
"territorialScope": "allee.pl (cała UE)",
"createdAt": "2026-11-10T11:10:03.000Z",
"redress": {
"internalComplaint": "Odwołanie w panelu (Ustawienia › Zgodność) albo POST /allee/decisions/{id}/appeal do 12.05.2027.",
"outOfCourt": "Certyfikowany organ pozasądowego rozstrzygania sporów (art. 21 DSA).",
"court": "Sąd powszechny."
},
"appealDeadline": "2027-05-12T11:10:03.000Z",
"appeal": {
"status": "SUBMITTED",
"text": "Faktura potwierdza legalne pochodzenie towaru — proszę o uchylenie ostrzeżenia.",
"submittedAt": "2026-11-10T11:10:03.000Z",
"resolution": null,
"resolvedAt": null
}
}