Preskočiť na obsah
ShopentlyLearn

Načítať — Vrátenia, reklamácie a výmeny

Načítajte údaje z „Vrátenia, reklamácie a výmeny“. Výsledok závisí od parametrov tejto operácie.

GET/api/v1/requests/{request_id}

Overovanie
Bearer
Dostupné od plánu
BASIC
Požadované oprávnenia
returns.request:read

Príklady kódu

Príklad požiadavky

cURL

: "${SHOPENTLY_SHOP_URL:?}"

curl --disable --globoff --fail-with-body --silent --show-error \
  --proto '=https' --connect-timeout 5 --max-time 30 \
  --request GET \
  --header "Authorization: Bearer ${SHOPENTLY_ACCESS_TOKEN:?}" \
  --url "${SHOPENTLY_SHOP_URL%/}"/api/v1/requests/example

PHP

<?php
declare(strict_types=1);

$baseUrl = rtrim(getenv('SHOPENTLY_SHOP_URL') ?: '', '/');
$origin = parse_url($baseUrl);
if (!$origin || ($origin['scheme'] ?? '') !== 'https' || empty($origin['host']) ||
    isset($origin['user'], $origin['pass']) || isset($origin['user']) || isset($origin['path']) ||
    isset($origin['query']) || isset($origin['fragment'])) {
    throw new RuntimeException('SHOPENTLY_SHOP_URL must be an HTTPS origin');
}
$credential = getenv('SHOPENTLY_ACCESS_TOKEN') ?: '';
if ($credential === '' || strpbrk($credential, "\r\n") !== false) {
    throw new RuntimeException('Invalid credential');
}
$headers = [];
$headers[] = 'Authorization: Bearer ' . $credential;
$responseHeaders = [];
$handle = curl_init($baseUrl . '/api/v1/requests/example');
curl_setopt_array($handle, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_PROTOCOLS => CURLPROTO_HTTPS,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HEADERFUNCTION => static function ($handle, string $line) use (&$responseHeaders): int {
        if (str_contains($line, ':')) {
            [$name, $value] = explode(':', $line, 2);
            $responseHeaders[strtolower(trim($name))] = trim($value);
        }
        return strlen($line);
    },
]);
$raw = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
$error = curl_error($handle);
curl_close($handle);
if ($raw === false) {
    throw new RuntimeException('Transport error: ' . $error);
}
if ($status < 200 || $status >= 300) {
    throw new RuntimeException('HTTP ' . $status . '; request_id=' .
        ($responseHeaders['x-request-id'] ?? '') . '; retry_after=' . ($responseHeaders['retry-after'] ?? ''));
}
$result = $raw === '' ? null : json_decode($raw, true, 512, JSON_THROW_ON_ERROR | JSON_BIGINT_AS_STRING);
echo json_encode($result, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), PHP_EOL;

Python

from contextlib import ExitStack
import json
import os
from urllib.parse import urlsplit

import requests  # python -m pip install requests

base_url = os.environ["SHOPENTLY_SHOP_URL"].rstrip("/")
origin = urlsplit(base_url)
if origin.scheme != "https" or not origin.hostname or origin.username or origin.password or origin.path or origin.query or origin.fragment:
    raise ValueError("SHOPENTLY_SHOP_URL must be an HTTPS origin")
credential = os.environ['SHOPENTLY_ACCESS_TOKEN']
if not credential or "\r" in credential or "\n" in credential:
    raise ValueError("Invalid credential")
headers = {}
headers["Authorization"] = 'Bearer' + " " + credential
body = None
if body is not None:
    headers["Content-Type"] = "application/json"

with ExitStack() as stack:
    session = stack.enter_context(requests.Session())
    files = None
    if False:
        image = stack.enter_context(open(os.environ["SHOPENTLY_IMAGE_FILE"], "rb"))
        if os.fstat(image.fileno()).st_size > 5242880:
            raise ValueError("Image exceeds 5 MiB")
        files = {"file": ("article.png", image, "image/png")}
    response = session.request(
        'GET', base_url + '/api/v1/requests/example', headers=headers,
        data=body.encode("utf-8") if body is not None else None, files=files,
        timeout=(5, 30), allow_redirects=False,
    )
    if not 200 <= response.status_code < 300:
        raise RuntimeError(f"HTTP {response.status_code}; request_id={response.headers.get('X-Request-ID', '')}; retry_after={response.headers.get('Retry-After', '')}")
    if False:
        if response.headers.get("Content-Type") != "image/webp" or len(response.content) > 5242880:
            raise ValueError("Unexpected image response")
        with open(os.environ["SHOPENTLY_OUTPUT_FILE"], "xb") as output:
            output.write(response.content)
    else:
        result = response.json() if response.content else None
        print(json.dumps(result, ensure_ascii=False, indent=2))

Príklad odpovede 200

JSON
{
  "data": {
    "created_at": "2026-01-01T12:00:00Z",
    "customer": {
      "email": "customer@example.invalid",
      "name": "Example"
    },
    "id": "example",
    "items": [
      {
        "id": "example",
        "name": "Example",
        "order_line_id": "example",
        "product_id": "example",
        "quantity": 1,
        "returned_quantity": 1,
        "sku": "example",
        "total": {
          "amount": "0.00",
          "currency": "PLN",
          "minor_units": 2
        },
        "unit_price": {
          "amount": "0.00",
          "currency": "PLN",
          "minor_units": 2
        },
        "variant_id": "example",
        "variant_options": [
          {
            "name": "Example",
            "value": "example"
          }
        ]
      }
    ],
    "number": "example",
    "order_id": "example",
    "order_number": "example",
    "products_value": {
      "amount": "0.00",
      "currency": "PLN",
      "minor_units": 2
    },
    "refund": {
      "amount": {
        "amount": "0.00",
        "currency": "PLN",
        "minor_units": 2
      },
      "completed_at": null,
      "status": "pending",
      "updated_at": "2026-01-01T12:00:00Z",
      "version": 1
    },
    "resolution_state": "unknown",
    "status": {
      "id": "example",
      "locale": "en",
      "name": "Example"
    },
    "type": "return",
    "updated_at": "2026-01-01T12:00:00Z",
    "version": 1
  },
  "meta": {
    "request_id": "example"
  }
}

Ako to funguje

  • Koncové body zoznamu a podrobností poskytujú číslo a typ žiadosti, súvisiacu objednávku, nahlásené položky, údaje zákazníka a informácie o vrátení peňazí.
  • Platné typy žiadostí sú return, exchange a complaint.
  • Identifikátory stavov načítajte z /api/v1/request-statuses.
  • Stav a suma vrátenia peňazí sa upravujú samostatnými zápismi s kontrolou verzií.
  • Zmena evidovanej sumy aktualizuje záznam žiadosti; nevykoná prevod peňazí.

Parametre

Parametre cesty

request_idReťazecPovinné

Identifikátor požiadavky; v metaúdajoch odpovede označuje požiadavku HTTP.

Obmedzenia
pattern
"^[a-z0-9][a-z0-9_-]{0,62}$"
Príklad: "example"

Táto operácia neprijíma telo JSON.

Odpovede

Odpoveď 200

dataRequestDetailData Povinné

Obsah úspešnej odpovede.

Polia · data
created_atReťazecPovinné

Čas vytvorenia.

format: "date-time"
customerRequestCustomerData Povinné

Údaje zákazníka zaznamenané pri tomto zdroji.

Polia · customer
emailReťazecPovinné

E-mailová adresa.

nameReťazecPovinné

Názov zdroja v príslušnom kontexte.

idReťazecPovinné

Identifikátor zdroja; zachovajte ho v podobe, v akej bol vrátený.

itemsPole <RequestItemData > Povinné

Položky zahrnuté v zdroji.

Polia · items
numberReťazecPovinné

Číslo objednávky alebo zákazníckej žiadosti určené pre používateľa.

order_idReťazecPovinné

Identifikátor súvisiacej objednávky.

order_numberReťazecPovinné

Číslo súvisiacej objednávky.

products_valueMoneyData Povinné

Hodnota produktov v objednávke.

Polia · products_value
amountReťazecPovinné

Desatinná suma zapísaná ako reťazec JSON; null iba tam, kde je povolené.

currencyReťazecPovinné

Kód meny sumy.

Obmedzenia
pattern
"^[A-Z]{3}$"
minor_unitsCelé čísloPovinné

Počet desatinných miest používaných menou.

minimum: 0maximum: 4
refundRefundData Povinné

Evidované informácie o vrátení peňazí.

Polia · refund
amountMoneyData nullPovinné

Desatinná suma zapísaná ako reťazec JSON; null iba tam, kde je povolené.

completed_atReťazec nullPovinné

Čas dokončenia.

Reťazec:format: "date-time"
statusReťazecPovinné

Stav prijímaný touto konkrétnou operáciou.

Obmedzenia
enum
["pending", "completed"]
updated_atReťazec nullPovinné

Čas poslednej aktualizácie.

Reťazec:format: "date-time"
versionCelé čísloPovinné

Verzia zdroja používaná na riadenie súbežných zmien.

resolution_stateReťazecPovinné

Stav vybavenia zákazníckej žiadosti.

Obmedzenia
enum
["unknown", "open", "completed", "rejected", "cancelled"]
statusRequestStatusData Povinné

Stav prijímaný touto konkrétnou operáciou.

Polia · status
idReťazecPovinné

Identifikátor zdroja; zachovajte ho v podobe, v akej bol vrátený.

localeReťazecPovinné

Jazyk vybraný pre túto požiadavku.

nameReťazec nullPovinné

Názov zdroja v príslušnom kontexte.

typeRequestType Povinné

Typ zdroja.

updated_atReťazecPovinné

Čas poslednej aktualizácie.

format: "date-time"
versionCelé čísloPovinné

Verzia zdroja používaná na riadenie súbežných zmien.

metaContextPageMeta ContextMeta PageMeta RequestMeta Povinné

Metaúdaje odpovede.

Polia · meta

ContextPageMeta

localeReťazecPovinné

Jazyk vybraný pre túto požiadavku.

market_codeReťazecPovinné

Kód trhu vrátený koncovým bodom kontextu.

market_idReťazecPovinné

Identifikátor trhu vrátený koncovým bodom kontextu.

paginationPagination Povinné

Metaúdaje stránkovania pomocou kurzora.

request_idReťazecPovinné

Identifikátor požiadavky; v metaúdajoch odpovede označuje požiadavku HTTP.

minLength: 1maxLength: 100

ContextMeta

localeReťazecPovinné

Jazyk vybraný pre túto požiadavku.

market_codeReťazecPovinné

Kód trhu vrátený koncovým bodom kontextu.

market_idReťazecPovinné

Identifikátor trhu vrátený koncovým bodom kontextu.

request_idReťazecPovinné

Identifikátor požiadavky; v metaúdajoch odpovede označuje požiadavku HTTP.

minLength: 1maxLength: 100

PageMeta

paginationPagination Povinné

Metaúdaje stránkovania pomocou kurzora.

request_idReťazecPovinné

Identifikátor požiadavky; v metaúdajoch odpovede označuje požiadavku HTTP.

minLength: 1maxLength: 100

RequestMeta

request_idReťazecPovinné

Identifikátor požiadavky; v metaúdajoch odpovede označuje požiadavku HTTP.

minLength: 1maxLength: 100
Príklad odpovede

Stav HTTP

200
Úspešná odpoveď Schéma
400
Neplatná požiadavka
401
Vyžaduje sa overenie
403
Prístup zamietnutý
404
Zdroj sa nenašiel
409
Konflikt verzií
422
Chyba validácie
429
Prekročený limit požiadaviek
Ďalšie stavy HTTP (7)
405
Metóda nie je povolená
413
Príliš veľká požiadavka
415
Nepodporovaný formát
500
Chyba servera
502
Chyba brány API
503
Služba nedostupná
504
Vypršal časový limit

Katalóg chýb: ErrorResponse

Hlavičky

401

WWW-AuthenticateReťazecVoliteľné

Spôsob overenia požadovaný serverom.

405

AllowReťazecVoliteľné

Metódy HTTP podporované týmto zdrojom.

429, 503

Retry-AfterCelé čísloVoliteľné

Minimálne oneskorenie pred opakovaním v sekundách.

minimum: 0