Προσφορές · Ανάκτηση
Προσφορές · Ανάκτηση. Κάθε κωδικός πρέπει να επιτρέπει συνδυασμούς. Οι εκπτώσεις εφαρμόζονται διαδοχικά.
GET/api/v1/discounts/promotions/{identity}
- Έλεγχος ταυτότητας
Bearer- Διαθέσιμο από
- STANDARD
- Απαιτούμενα δικαιώματα
discounts.promotions:read
Παραδείγματα κώδικα
Παράδειγμα αιτήματος
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/discounts/promotions/example-campaign
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/discounts/promotions/example-campaign');
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/discounts/promotions/example-campaign', 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))
Παράδειγμα απόκρισης 200
{
"data": {
"created_at": "2026-10-07T10:00:00Z",
"created_by": {
"kind": "admin",
"label": "Editorial integration",
"reference": "learn-api-key"
},
"enabled": false,
"id": "example-campaign",
"kind": "coupon",
"markets": [
{
"currency": "PLN",
"market_id": "poland",
"minor_units": 0
}
],
"name": "Autumn guide offer",
"updated_at": "2026-10-07T10:00:00Z",
"used_count": 0,
"version": 1
},
"meta": {
"locale": "example",
"market_code": "example",
"market_id": "poland",
"pagination": {
"has_more": false,
"limit": 1,
"next_cursor": null
},
"request_id": "learn-example-request"
}
}
Επισκόπηση
Τα επιλεγμένα προϊόντα και οι κατηγορίες συνδυάζονται. Οι κατηγορίες περιλαμβάνουν τα προϊόντα που ανήκουν άμεσα σε αυτές.
Παράμετροι
Παράμετροι διαδρομής
identityΣυμβολοσειράΥποχρεωτικόΑναγνωριστικό που χρησιμοποιείται στη διαδρομή αυτού του πόρου.
Περιορισμοί
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
Αυτή η λειτουργία δεν δέχεται περιεχόμενο JSON.
Αποκρίσεις
Απόκριση 200
Πλήρες μοντέλο: ApiResponse_CampaignData_
dataCampaignDataΥποχρεωτικόΔεδομένα επιτυχούς απόκρισης.
Πεδία ·
dataaudienceΣυμβολοσειράΠροαιρετικόΠελάτες
Περιορισμοί
enum["all", "guest", "customer", "selected"]
benefit_typeΣυμβολοσειράΠροαιρετικόΜορφή της δομής δεδομένων, όπως ορίζεται από τις επιτρεπόμενες τιμές.
Περιορισμοί
enum["percentage", "fixed", "none"]
category_idsΠίνακας <Συμβολοσειρά> ΠροαιρετικόΑναγνωριστικά σχετικών κατηγοριών.
maxItems:1000Περιορισμοί · Πίνακας 1
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
codeΣυμβολοσειρά nullΠροαιρετικόΣταθερός κωδικός για επεξεργασία από λογισμικό.
Περιορισμοί · Συμβολοσειρά 1
pattern"^[A-Za-z0-9]{6,16}$"
combine_couponsΛογική τιμήΠροαιρετικόΣυνδυασμός με άλλους κωδικούς
combine_promotionsΛογική τιμήΠροαιρετικόΝα επιτρέπεται αυτός ο κωδικός σε προϊόντα με αυτόματες προσφορές
created_atΣυμβολοσειράΥποχρεωτικόΧρόνος δημιουργίας.
format:"date-time"created_byCreatorDataΥποχρεωτικόΔημιουργήθηκε από
Πεδία ·
created_bykindΣυμβολοσειράΥποχρεωτικόΜορφή της δομής δεδομένων, όπως ορίζεται από τις επιτρεπόμενες τιμές.
Περιορισμοί
enum["admin", "api"]
labelΣυμβολοσειράΥποχρεωτικόΌνομα πόρου στο σχετικό πλαίσιο.
referenceΣυμβολοσειράΥποχρεωτικόΑναγνωριστικό της αναφερόμενης οντότητας.
customer_idsΠίνακας <Συμβολοσειρά> ΠροαιρετικόΣτοιχεία πελάτη που έχουν καταγραφεί για αυτόν τον πόρο.
maxItems:1000Περιορισμοί · Πίνακας 1
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
enabledΛογική τιμήΥποχρεωτικόΔείχνει αν η ρύθμιση είναι ενεργοποιημένη.
ends_atΣυμβολοσειρά nullΠροαιρετικόΕνεργό έως
Συμβολοσειρά:format:"date-time"free_shippingΛογική τιμήΠροαιρετικόΔωρεάν αποστολή
idΣυμβολοσειράΥποχρεωτικόΑναγνωριστικό πόρου· διατηρήστε το ακριβώς όπως επιστρέφεται.
kindΣυμβολοσειράΥποχρεωτικόΜορφή της δομής δεδομένων, όπως ορίζεται από τις επιτρεπόμενες τιμές.
Περιορισμοί
enum["coupon", "promotion"]
marketsΠίνακας <shopently_engine__domains__discounts__adapters__public_http__schemas__MarketData> ΥποχρεωτικόΑγορές διαθέσιμες στο πλαίσιο του καταστήματος.
minItems:1maxItems:1000minimum_quantityΑκέραιοςΠροαιρετικόΕλάχιστος αριθμός τεμαχίων στο καλάθι
minimum:1maximum:2147483647nameΣυμβολοσειράΥποχρεωτικόΌνομα πόρου στο σχετικό πλαίσιο.
minLength:1maxLength:160per_customer_limitΑκέραιοςΠροαιρετικόΌριο χρήσεων ανά πελάτη
minimum:-1maximum:2147483647percentageΣυμβολοσειράΠροαιρετικόΠοσοστό
maxLength:19Περιορισμοί
pattern"^(0|[1-9][0-9]{0,13})(\\.[0-9]{1,4})?$"
product_idsΠίνακας <Συμβολοσειρά> ΠροαιρετικόΑναγνωριστικά σχετικών προϊόντων.
maxItems:1000Περιορισμοί · Πίνακας 1
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
product_scopeΣυμβολοσειράΠροαιρετικόΠροϊόντα
Περιορισμοί
enum["all", "selected"]
show_accountΛογική τιμήΠροαιρετικόΣτον λογαριασμό πελάτη
show_cartΛογική τιμήΠροαιρετικόΣτο καλάθι
show_productΛογική τιμήΠροαιρετικόΣτις σελίδες προϊόντων
starts_atΣυμβολοσειρά nullΠροαιρετικόΕνεργό από
Συμβολοσειρά:format:"date-time"updated_atΣυμβολοσειράΥποχρεωτικόΧρόνος τελευταίας ενημέρωσης.
format:"date-time"usage_limitΑκέραιοςΠροαιρετικόΌριο χρήσεων
minimum:-1maximum:2147483647used_countΑκέραιοςΥποχρεωτικόΑριθμός χρήσεων
versionΑκέραιοςΥποχρεωτικόΈκδοση πόρου για έλεγχο ταυτόχρονων εγγραφών.
metaContextPageMetaContextMetaPageMetaRequestMetaΥποχρεωτικόΜεταδεδομένα απόκρισης.
Πεδία ·
metaΠλήρες μοντέλο:
ContextPageMetalocaleΣυμβολοσειράΥποχρεωτικόΓλώσσα που επιλέχθηκε για αυτό το αίτημα.
market_codeΣυμβολοσειράΥποχρεωτικόΚωδικός αγοράς που επιστρέφει το endpoint πλαισίου.
market_idΣυμβολοσειράΥποχρεωτικόΑναγνωριστικό αγοράς που επιστρέφει το endpoint πλαισίου.
paginationPaginationΥποχρεωτικόΜεταδεδομένα σελιδοποίησης με cursor.
request_idΣυμβολοσειράΥποχρεωτικόΑναγνωριστικό αιτήματος· στα μεταδεδομένα απόκρισης ταυτοποιεί το αίτημα HTTP.
minLength:1maxLength:100
localeΣυμβολοσειράΥποχρεωτικόΓλώσσα που επιλέχθηκε για αυτό το αίτημα.
market_codeΣυμβολοσειράΥποχρεωτικόΚωδικός αγοράς που επιστρέφει το endpoint πλαισίου.
market_idΣυμβολοσειράΥποχρεωτικόΑναγνωριστικό αγοράς που επιστρέφει το endpoint πλαισίου.
request_idΣυμβολοσειράΥποχρεωτικόΑναγνωριστικό αιτήματος· στα μεταδεδομένα απόκρισης ταυτοποιεί το αίτημα HTTP.
minLength:1maxLength:100
paginationPaginationΥποχρεωτικόΜεταδεδομένα σελιδοποίησης με cursor.
request_idΣυμβολοσειράΥποχρεωτικόΑναγνωριστικό αιτήματος· στα μεταδεδομένα απόκρισης ταυτοποιεί το αίτημα HTTP.
minLength:1maxLength:100
request_idΣυμβολοσειράΥποχρεωτικόΑναγνωριστικό αιτήματος· στα μεταδεδομένα απόκρισης ταυτοποιεί το αίτημα HTTP.
minLength:1maxLength:100
Κατάσταση HTTP
200- Επιτυχής απόκριση Σχήμα
400- Μη έγκυρο αίτημα
401- Απαιτείται ταυτοποίηση
403- Δεν επιτρέπεται η πρόσβαση
404- Ο πόρος δεν βρέθηκε
409- Διένεξη έκδοσης
422- Αποτυχία επικύρωσης
429- Υπέρβαση ορίου αιτημάτων
Άλλες καταστάσεις HTTP (7)
405- Η μέθοδος δεν επιτρέπεται
413- Πολύ μεγάλο αίτημα
415- Μη υποστηριζόμενος τύπος
500- Σφάλμα διακομιστή
502- Σφάλμα πύλης API
503- Μη διαθέσιμη υπηρεσία
504- Υπέρβαση χρόνου αναμονής
Κατάλογος σφαλμάτων: ErrorResponse
Κεφαλίδες
401
WWW-AuthenticateΣυμβολοσειράΠροαιρετικόΣχήμα ελέγχου ταυτότητας που απαιτεί ο διακομιστής.
405
AllowΣυμβολοσειράΠροαιρετικόΜέθοδοι HTTP που υποστηρίζει αυτός ο πόρος.
429, 503
Retry-AfterΑκέραιοςΠροαιρετικόΕλάχιστος χρόνος αναμονής πριν από νέα προσπάθεια, σε δευτερόλεπτα.
minimum:0