Zwroty
Zwroty kupujących (zasób BETA Allegro).
Zwroty
GET /order/customer-returns
Allegro + rozszerzeniaallegro:api:orders:readlimit: readBETA (Allegro)
Zwroty zamówień allee.pl. Zasób BETA jak w Allegro: Accept: application/vnd.allegro.beta.v1+json (przyjmujemy też typ public). E-mail kupującego tylko z zakresem allee:api:orders:pii.
Zamówieniami allee.pl sprzedawcy obsługuje jedna integracja naraz (wybór w panelu sprzedaży → Integracje); inna aplikacja dostaje 403 ORDERS_OWNED_BY_OTHER_INTEGRATION (details.owner: PANEL, OTHER_APP, BASELINKER).
Zgodność: zgodna z Allegro REST API, z rozszerzeniami allee (pola allee.*, alleeId) — GET /order/customer-returns (BETA).
Uprawnienie: zakres allegro:api:orders:read.
Grupa limitu: read.
Parametry zapytania
offset integerIle pozycji pominąć.
limit integerIle pozycji zwrócić (1–100, domyślnie 50).
createdAt.gte string · date-timeOd.
createdAt.lte string · date-timeDo.
status stringStatus.
CREATED, IN_TRANSIT, DELIVERED, FINISHED, REJECTED, COMMISSION_REFUND_CLAIMED, COMMISSION_REFUNDEDorderId string · uuidZamówienie.
Odpowiedzi
200 Zwroty. · CustomerReturnList
customerReturns array<CustomerReturn> zawszePola obiektu
id string zawszeNumer zwrotu ZW-…
createdAt string · date-time zawszereferenceNumber string zawszeorderId string zawszecheckoutForm.id
buyer object zawszePola obiektu
login string · null zawszeemail string · null zawszeTylko z zakresem allee:api:orders:pii.
items array<object> zawszePola obiektu
offerId string · null zawszequantity integer zawszename string zawszeprice Money zawszeKwota (kształt Allegro).
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNreason object zawszePola obiektu
type string · null zawszePARCEL_NOT_COLLECTED, nulluserComment string · null zawszeparcels array<object> zawszePola obiektu
createdAt string · date-time · null zawszewaybill string zawszetransportingWaybill string zawszecarrierId string · null zawszetransportingCarrierId string · null zawszemarketplaceId string zawszeallee-plstatus string zawszeCREATED, IN_TRANSIT, DELIVERED, FINISHED, REJECTED, COMMISSION_REFUND_CLAIMED, COMMISSION_REFUNDEDrefund object · null zawszePola obiektu
value Money zawszeZadeklarowany zwrot pieniędzy.
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNrejection object · null zawszePola obiektu
reason string · null zawszecount integer zawszetotalCount integer zawszeBłędy
| HTTP | Kod | Znaczenie |
|---|---|---|
| 400 | VALIDATION_ERROR | Zła wartość parametru zapytania (400) albo pola treści (422); path wskazuje miejsce. |
| 401 | invalid_token | Brak, zły, wygasły albo odwołany token lub klucz (format OAuth, nagłówek WWW-Authenticate). |
| 403 | ACCOUNT_INACTIVE | Konto sprzedawcy jest nieaktywne. |
| 403 | AccessDenied | Brak zakresu albo zasób innego sprzedawcy. |
| 403 | KEY_QUARANTINED | Kwarantanna: działa tylko odczyt (wykryto nietypowe użycie). |
| 403 | KEY_SUSPENDED | Klucz albo dostęp aplikacji wstrzymany (przez sprzedawcę albo ochronę). |
| 403 | ORDERS_OWNED_BY_OTHER_INTEGRATION | Zamówienia sprzedawcy obsługuje inna integracja (details.owner). |
| 429 | TOO_MANY_REQUESTS | Przekroczony limit (minutowy, grupy operacji albo IP). |
| 500 | INTERNAL_ERROR | Błąd serwera allee. |
| 503 | SERVICE_UNAVAILABLE | Moduł chwilowo niedostępny. |
curl -sS -X GET "${ALLEE_API_URL:-https://api.allee.pl}/order/customer-returns?limit=50" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.beta.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /order/customer-returns (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/order/customer-returns?limit=50');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('ALLEE_API_KEY'),
'Accept: application/vnd.allegro.beta.v1+json',
],
CURLOPT_RETURNTRANSFER => true,
]);
$odp = curl_exec($ch);
echo 'HTTP ', curl_getinfo($ch, CURLINFO_RESPONSE_CODE), "\n", $odp, "\n";# allee API: GET /order/customer-returns (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.beta.v1+json",
}
r = requests.request("GET", BASE + "/order/customer-returns?limit=50", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /order/customer-returns (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/order/customer-returns?limit=50`, {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.ALLEE_API_KEY}`,
"Accept": "application/vnd.allegro.beta.v1+json",
},
redirect: "manual",
});
console.log("HTTP", res.status);
console.log(await res.text());// allee API: GET /order/customer-returns (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 + "/order/customer-returns?limit=50");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.beta.v1+json");
using var res = await http.SendAsync(req);
Console.WriteLine($"HTTP {(int)res.StatusCode}");
Console.WriteLine(await res.Content.ReadAsStringAsync());// allee API: GET /order/customer-returns (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 + "/order/customer-returns?limit=50"))
.header("Authorization", "Bearer " + System.getenv("ALLEE_API_KEY"))
.header("Accept", "application/vnd.allegro.beta.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 /order/customer-returns (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+"/order/customer-returns?limit=50", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("ALLEE_API_KEY"))
req.Header.Set("Accept", "application/vnd.allegro.beta.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.beta.v1+json{
"customerReturns": [
{
"id": "ZW-900000001",
"createdAt": "2026-11-10T11:10:05.511Z",
"referenceNumber": "ZW-900000001",
"orderId": "432810d0-4d26-4f39-ba5f-b89def4d4f92",
"buyer": {
"login": "kupujacy_demo_4816f227",
"email": "[email protected]"
},
"items": [
{
"offerId": "900000000000021",
"quantity": 2,
"name": "Podróż na Księżyc DVD wydanie kolekcjonerskie",
"price": {
"amount": "42.90",
"currency": "PLN"
},
"reason": {
"type": null,
"userComment": "Nie spełnia oczekiwań — Zwrot testowy z symulatora sandboxu."
}
}
],
"parcels": [],
"marketplaceId": "allee-pl",
"status": "CREATED",
"refund": null,
"rejection": null
}
],
"count": 1,
"totalCount": 1
}Zwrot
GET /order/customer-returns/{customerReturnId}
zgodna z Allegroallegro:api:orders:readlimit: readBETA (Allegro)
Jeden zwrot. Cudzy i nieistniejący → 404.
Zgodność: zgodna z Allegro REST API (ten sam kształt) — GET /order/customer-returns/{customerReturnId} (BETA).
Uprawnienie: zakres allegro:api:orders:read.
Grupa limitu: read.
Parametry ścieżki
customerReturnId string wymaganyNumer zwrotu ZW-…
Odpowiedzi
200 Zwrot. · CustomerReturn
id string zawszeNumer zwrotu ZW-…
createdAt string · date-time zawszereferenceNumber string zawszeorderId string zawszecheckoutForm.id
buyer object zawszePola obiektu
login string · null zawszeemail string · null zawszeTylko z zakresem allee:api:orders:pii.
items array<object> zawszePola obiektu
offerId string · null zawszequantity integer zawszename string zawszeprice Money zawszeKwota (kształt Allegro).
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNreason object zawszePola obiektu
type string · null zawszePARCEL_NOT_COLLECTED, nulluserComment string · null zawszeparcels array<object> zawszePola obiektu
createdAt string · date-time · null zawszewaybill string zawszetransportingWaybill string zawszecarrierId string · null zawszetransportingCarrierId string · null zawszemarketplaceId string zawszeallee-plstatus string zawszeCREATED, IN_TRANSIT, DELIVERED, FINISHED, REJECTED, COMMISSION_REFUND_CLAIMED, COMMISSION_REFUNDEDrefund object · null zawszePola obiektu
value Money zawszeZadeklarowany zwrot pieniędzy.
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNrejection object · null zawszePola obiektu
reason 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). |
| 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}/order/customer-returns/ZW-900000001" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.beta.v1+json" \
-w '\nHTTP %{http_code}\n'<?php
// allee API: GET /order/customer-returns/ZW-900000001 (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$ch = curl_init($base . '/order/customer-returns/ZW-900000001');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('ALLEE_API_KEY'),
'Accept: application/vnd.allegro.beta.v1+json',
],
CURLOPT_RETURNTRANSFER => true,
]);
$odp = curl_exec($ch);
echo 'HTTP ', curl_getinfo($ch, CURLINFO_RESPONSE_CODE), "\n", $odp, "\n";# allee API: GET /order/customer-returns/ZW-900000001 (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.beta.v1+json",
}
r = requests.request("GET", BASE + "/order/customer-returns/ZW-900000001", headers=headers, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: GET /order/customer-returns/ZW-900000001 (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const res = await fetch(`${BASE}/order/customer-returns/ZW-900000001`, {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.ALLEE_API_KEY}`,
"Accept": "application/vnd.allegro.beta.v1+json",
},
redirect: "manual",
});
console.log("HTTP", res.status);
console.log(await res.text());// allee API: GET /order/customer-returns/ZW-900000001 (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 + "/order/customer-returns/ZW-900000001");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.beta.v1+json");
using var res = await http.SendAsync(req);
Console.WriteLine($"HTTP {(int)res.StatusCode}");
Console.WriteLine(await res.Content.ReadAsStringAsync());// allee API: GET /order/customer-returns/ZW-900000001 (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 + "/order/customer-returns/ZW-900000001"))
.header("Authorization", "Bearer " + System.getenv("ALLEE_API_KEY"))
.header("Accept", "application/vnd.allegro.beta.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 /order/customer-returns/ZW-900000001 (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+"/order/customer-returns/ZW-900000001", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("ALLEE_API_KEY"))
req.Header.Set("Accept", "application/vnd.allegro.beta.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.beta.v1+json{
"id": "ZW-900000001",
"createdAt": "2026-11-10T11:10:05.511Z",
"referenceNumber": "ZW-900000001",
"orderId": "432810d0-4d26-4f39-ba5f-b89def4d4f92",
"buyer": {
"login": "kupujacy_demo_4816f227",
"email": "[email protected]"
},
"items": [
{
"offerId": "900000000000021",
"quantity": 2,
"name": "Podróż na Księżyc DVD wydanie kolekcjonerskie",
"price": {
"amount": "42.90",
"currency": "PLN"
},
"reason": {
"type": null,
"userComment": "Nie spełnia oczekiwań — Zwrot testowy z symulatora sandboxu."
}
}
],
"parcels": [],
"marketplaceId": "allee-pl",
"status": "CREATED",
"refund": null,
"rejection": null
}Zwrot dotarł / deklaracja zwrotu pieniędzy
PUT /order/customer-returns/{customerReturnId}
tylko alleeallegro:api:orders:writelimit: writeBETA (Allegro)
{"status": "DELIVERED"} = paczka zwrotna dotarła. {"allee": {"refund": {"value": {...}}}} = deklaracja zwrotu pieniędzy (kończy zwrot — allee nie przenosi pieniędzy; kwota 0,01 zł … produkty + dostawa). Oba pola naraz: najpierw DELIVERED, potem zakończenie.
Zgodność: tylko allee — Rozszerzenie allee (Allegro: /payments/refunds).
Uprawnienie: zakres allegro:api:orders:write.
Grupa limitu: write.
Parametry ścieżki
customerReturnId string wymaganyNumer zwrotu ZW-…
Treść żądania application/vnd.allegro.beta.v1+json
status stringPaczka zwrotna dotarła.
DELIVEREDallee objectDeklaracja zwrotu pieniędzy (kończy zwrot; allee nie przenosi pieniędzy).
Pola obiektu
refund object wymaganePola obiektu
value MoneyInput wymaganeKwota w żądaniu.
Pola obiektu
amount string|number wymaganeKwota jako tekst „123.45” (zalecane) albo liczba.
currency stringWaluta: tylko PLN (domyślnie PLN).
PLNOdpowiedzi
200 Zwrot po zmianie. · CustomerReturn
id string zawszeNumer zwrotu ZW-…
createdAt string · date-time zawszereferenceNumber string zawszeorderId string zawszecheckoutForm.id
buyer object zawszePola obiektu
login string · null zawszeemail string · null zawszeTylko z zakresem allee:api:orders:pii.
items array<object> zawszePola obiektu
offerId string · null zawszequantity integer zawszename string zawszeprice Money zawszeKwota (kształt Allegro).
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNreason object zawszePola obiektu
type string · null zawszePARCEL_NOT_COLLECTED, nulluserComment string · null zawszeparcels array<object> zawszePola obiektu
createdAt string · date-time · null zawszewaybill string zawszetransportingWaybill string zawszecarrierId string · null zawszetransportingCarrierId string · null zawszemarketplaceId string zawszeallee-plstatus string zawszeCREATED, IN_TRANSIT, DELIVERED, FINISHED, REJECTED, COMMISSION_REFUND_CLAIMED, COMMISSION_REFUNDEDrefund object · null zawszePola obiektu
value Money zawszeZadeklarowany zwrot pieniędzy.
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNrejection object · null zawszePola obiektu
reason 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 | CUSTOMER_RETURN_ALREADY_FINISHED | Zwrot już zakończony. |
| 409 | INVALID_STATUS_TRANSITION | Przejście statusu niedozwolone (details.current = bieżący). |
| 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 | UnknownJSONProperty | Pole nieznane w tym miejscu (path wskazuje które). |
| 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. |
curl -sS -X PUT "${ALLEE_API_URL:-https://api.allee.pl}/order/customer-returns/ZW-900000001" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.beta.v1+json" \
-H "Content-Type: application/vnd.allegro.public.v1+json" \
--data-binary @- \
-w '\nHTTP %{http_code}\n' <<'JSON'
{
"status": "DELIVERED",
"allee": {
"refund": {
"value": {
"amount": "89.80",
"currency": "PLN"
}
}
}
}
JSON<?php
// allee API: PUT /order/customer-returns/ZW-900000001 (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$body = [
'status' => 'DELIVERED',
'allee' => [
'refund' => [
'value' => [
'amount' => '89.80',
'currency' => 'PLN',
],
],
],
];
$ch = curl_init($base . '/order/customer-returns/ZW-900000001');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('ALLEE_API_KEY'),
'Accept: application/vnd.allegro.beta.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 /order/customer-returns/ZW-900000001 (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.beta.v1+json",
"Content-Type": "application/vnd.allegro.public.v1+json",
}
body = {
"status": "DELIVERED",
"allee": {
"refund": {
"value": {
"amount": "89.80",
"currency": "PLN",
},
},
},
}
r = requests.request("PUT", BASE + "/order/customer-returns/ZW-900000001", headers=headers, json=body, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: PUT /order/customer-returns/ZW-900000001 (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const body = {
"status": "DELIVERED",
"allee": {
"refund": {
"value": {
"amount": "89.80",
"currency": "PLN"
}
}
}
};
const res = await fetch(`${BASE}/order/customer-returns/ZW-900000001`, {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.ALLEE_API_KEY}`,
"Accept": "application/vnd.allegro.beta.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 /order/customer-returns/ZW-900000001 (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 + "/order/customer-returns/ZW-900000001");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.beta.v1+json");
var json = """
{
"status": "DELIVERED",
"allee": {
"refund": {
"value": {
"amount": "89.80",
"currency": "PLN"
}
}
}
}
""";
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 /order/customer-returns/ZW-900000001 (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 = """
{
"status": "DELIVERED",
"allee": {
"refund": {
"value": {
"amount": "89.80",
"currency": "PLN"
}
}
}
}
""";
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/order/customer-returns/ZW-900000001"))
.header("Authorization", "Bearer " + System.getenv("ALLEE_API_KEY"))
.header("Accept", "application/vnd.allegro.beta.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 /order/customer-returns/ZW-900000001 (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 := `{
"status": "DELIVERED",
"allee": {
"refund": {
"value": {
"amount": "89.80",
"currency": "PLN"
}
}
}
}`
req, err := http.NewRequest("PUT", base+"/order/customer-returns/ZW-900000001", 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.beta.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.beta.v1+json{
"id": "ZW-900000001",
"createdAt": "2026-11-10T11:10:05.511Z",
"referenceNumber": "ZW-900000001",
"orderId": "432810d0-4d26-4f39-ba5f-b89def4d4f92",
"buyer": {
"login": "kupujacy_demo_4816f227",
"email": "[email protected]"
},
"items": [
{
"offerId": "900000000000021",
"quantity": 2,
"name": "Podróż na Księżyc DVD wydanie kolekcjonerskie",
"price": {
"amount": "42.90",
"currency": "PLN"
},
"reason": {
"type": null,
"userComment": "Nie spełnia oczekiwań — Zwrot testowy z symulatora sandboxu."
}
}
],
"parcels": [],
"marketplaceId": "allee-pl",
"status": "FINISHED",
"refund": {
"value": {
"amount": "89.80",
"currency": "PLN"
}
},
"rejection": null
}Odrzucenie zwrotu
POST /order/customer-returns/{customerReturnId}/rejection
zgodna z Allegroallegro:api:orders:writelimit: writeBETA (Allegro)
Kupujący widzi status „Odrzucony” i uzasadnienie. Ponowne odrzucenie → 409.
Zgodność: zgodna z Allegro REST API (ten sam kształt) — POST /order/customer-returns/{customerReturnId}/rejection (BETA).
Uprawnienie: zakres allegro:api:orders:write.
Grupa limitu: write.
Parametry ścieżki
customerReturnId string wymaganyNumer zwrotu ZW-…
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.beta.v1+json
rejection object wymaganePola obiektu
code stringREFUND_REJECTEDreason string wymaganeUzasadnienie dla kupującego (do 500 znaków, bez linków).
Odpowiedzi
200 Odrzucono. · CustomerReturn
id string zawszeNumer zwrotu ZW-…
createdAt string · date-time zawszereferenceNumber string zawszeorderId string zawszecheckoutForm.id
buyer object zawszePola obiektu
login string · null zawszeemail string · null zawszeTylko z zakresem allee:api:orders:pii.
items array<object> zawszePola obiektu
offerId string · null zawszequantity integer zawszename string zawszeprice Money zawszeKwota (kształt Allegro).
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNreason object zawszePola obiektu
type string · null zawszePARCEL_NOT_COLLECTED, nulluserComment string · null zawszeparcels array<object> zawszePola obiektu
createdAt string · date-time · null zawszewaybill string zawszetransportingWaybill string zawszecarrierId string · null zawszetransportingCarrierId string · null zawszemarketplaceId string zawszeallee-plstatus string zawszeCREATED, IN_TRANSIT, DELIVERED, FINISHED, REJECTED, COMMISSION_REFUND_CLAIMED, COMMISSION_REFUNDEDrefund object · null zawszePola obiektu
value Money zawszeZadeklarowany zwrot pieniędzy.
Pola obiektu
amount string zawszeKwota z dwoma miejscami po przecinku, kropka dziesiętna.
currency string zawszeWaluta (allee.pl: tylko PLN).
PLNrejection object · null zawszePola obiektu
reason 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 | CUSTOMER_RETURN_ALREADY_REJECTED | Zwrot już odrzucony. |
| 409 | INVALID_STATUS_TRANSITION | Przejście statusu niedozwolone (details.current = bieżący). |
| 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 | CARD_DATA | Treść wygląda na dane karty płatniczej. |
| 422 | ConstraintViolationException.MissingRequiredParameters | Brak wymaganego parametru lub pola (details = id parametru). |
| 422 | EXTERNAL_LINK | Treść zawiera link spoza allee.pl. |
| 422 | JsonMappingException | Treść nie jest poprawnym JSON albo ma zły kształt (np. images jako obiekty). |
| 422 | PROFANITY | Wulgaryzmy. |
| 422 | SENSITIVE_REQUEST | Prośba o dane wrażliwe (hasła, dane logowania). |
| 422 | TEXT_EMPTY | Pusta treść. |
| 422 | TEXT_INVALID | Treść niedozwolona przez filtr. |
| 422 | TEXT_TOO_LONG | Treść za długa. |
| 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. |
curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/order/customer-returns/ZW-900000002/rejection" \
-H "Authorization: Bearer $ALLEE_API_KEY" \
-H "Accept: application/vnd.allegro.beta.v1+json" \
-H "Content-Type: application/vnd.allegro.public.v1+json" \
--data-binary @- \
-w '\nHTTP %{http_code}\n' <<'JSON'
{
"rejection": {
"code": "REFUND_REJECTED",
"reason": "Odesłany produkt nosi ślady używania — zwrot pieniędzy pomniejszony zgodnie z regulaminem."
}
}
JSON<?php
// allee API: POST /order/customer-returns/ZW-900000002/rejection (PHP 8, rozszerzenie curl)
$base = getenv('ALLEE_API_URL') ?: 'https://api.allee.pl';
$body = [
'rejection' => [
'code' => 'REFUND_REJECTED',
'reason' => 'Odesłany produkt nosi ślady używania — zwrot pieniędzy pomniejszony zgodnie z regulaminem.',
],
];
$ch = curl_init($base . '/order/customer-returns/ZW-900000002/rejection');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('ALLEE_API_KEY'),
'Accept: application/vnd.allegro.beta.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 /order/customer-returns/ZW-900000002/rejection (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.beta.v1+json",
"Content-Type": "application/vnd.allegro.public.v1+json",
}
body = {
"rejection": {
"code": "REFUND_REJECTED",
"reason": "Odesłany produkt nosi ślady używania — zwrot pieniędzy pomniejszony zgodnie z regulaminem.",
},
}
r = requests.request("POST", BASE + "/order/customer-returns/ZW-900000002/rejection", headers=headers, json=body, timeout=60, allow_redirects=False)
print("HTTP", r.status_code)
print(r.text)// allee API: POST /order/customer-returns/ZW-900000002/rejection (Node.js 18+, wbudowany fetch; plik .mjs)
const BASE = process.env.ALLEE_API_URL ?? "https://api.allee.pl";
const body = {
"rejection": {
"code": "REFUND_REJECTED",
"reason": "Odesłany produkt nosi ślady używania — zwrot pieniędzy pomniejszony zgodnie z regulaminem."
}
};
const res = await fetch(`${BASE}/order/customer-returns/ZW-900000002/rejection`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ALLEE_API_KEY}`,
"Accept": "application/vnd.allegro.beta.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 /order/customer-returns/ZW-900000002/rejection (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 + "/order/customer-returns/ZW-900000002/rejection");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ALLEE_API_KEY"));
req.Headers.Accept.ParseAdd("application/vnd.allegro.beta.v1+json");
var json = """
{
"rejection": {
"code": "REFUND_REJECTED",
"reason": "Odesłany produkt nosi ślady używania — zwrot pieniędzy pomniejszony zgodnie z regulaminem."
}
}
""";
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 /order/customer-returns/ZW-900000002/rejection (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 = """
{
"rejection": {
"code": "REFUND_REJECTED",
"reason": "Odesłany produkt nosi ślady używania — zwrot pieniędzy pomniejszony zgodnie z regulaminem."
}
}
""";
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/order/customer-returns/ZW-900000002/rejection"))
.header("Authorization", "Bearer " + System.getenv("ALLEE_API_KEY"))
.header("Accept", "application/vnd.allegro.beta.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 /order/customer-returns/ZW-900000002/rejection (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 := `{
"rejection": {
"code": "REFUND_REJECTED",
"reason": "Odesłany produkt nosi ślady używania — zwrot pieniędzy pomniejszony zgodnie z regulaminem."
}
}`
req, err := http.NewRequest("POST", base+"/order/customer-returns/ZW-900000002/rejection", 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.beta.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.beta.v1+json{
"id": "ZW-900000002",
"createdAt": "2026-11-10T11:10:05.537Z",
"referenceNumber": "ZW-900000002",
"orderId": "718ce396-4940-431f-815e-7a51875c71df",
"buyer": {
"login": "kupujacy_demo_4816f227",
"email": "[email protected]"
},
"items": [
{
"offerId": "900000000000001",
"quantity": 1,
"name": "Produkt demo 01 – Projekty wnętrz",
"price": {
"amount": "19.99",
"currency": "PLN"
},
"reason": {
"type": null,
"userComment": "Inny wariant niż zamówiony — Zwrot testowy z symulatora sandboxu."
}
}
],
"parcels": [],
"marketplaceId": "allee-pl",
"status": "REJECTED",
"refund": null,
"rejection": {
"reason": "Odesłany produkt nosi ślady używania — zwrot pieniędzy pomniejszony zgodnie z regulaminem."
}
}