Načíst — Stránky CMS
Načtěte data z „Stránky CMS“. Výsledek závisí na parametrech této operace.
GET/api/v1/pages/{page_id}
- Ověřování
Bearer- Dostupné od tarifu
- STANDARD
- Požadovaná oprávnění
content.page:read
Příklady kódu
Příklad požadavku
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/pages/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/pages/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/pages/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))
Příklad odpovědi 200
{
"data": {
"body_html": "<p>Example</p>",
"created_at": "2026-01-01T12:00:00Z",
"id": "example",
"is_available": true,
"market_scope": "all",
"meta_description": "example",
"meta_keywords": [
"example"
],
"meta_title": "example",
"number": "example",
"published": false,
"slug": "example",
"title": "example",
"updated_at": "2026-01-01T12:00:00Z",
"version": 1
},
"meta": {
"locale": "en",
"market_code": "PL",
"market_id": "example",
"request_id": "example"
}
}
Jak to funguje
- Zápisy stránek zahrnují název, slug, obsah HTML, metadata SEO, stav zveřejnění a podporovaný rozsah trhů.
- Při správě přeloženého obsahu výslovně vyberte jazyk.
- PATCH mění pouze předaná pole.
- Hodnota null je povolena jen tam, kde schéma a kontext dovolují vymazání hodnoty.
- Nadále platí pravidla zveřejňování, validace obsahu a tarifu.
Parametry
Parametry cesty
page_idŘetězecPovinnéIdentifikátor stránky CMS.
Omezení
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
Parametry dotazu
localeŘetězec nullVolitelnéJazyk vybraný pro tento požadavek.
Řetězec:minLength:2maxLength:20market_idŘetězec nullVolitelnéIdentifikátor trhu vrácený koncovým bodem kontextu.
Omezení · Řetězec 1
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
market_codeŘetězec nullVolitelnéKód trhu vrácený koncovým bodem kontextu.
Řetězec:minLength:1maxLength:16
Tato operace nepřijímá tělo JSON.
Odpovědi
Odpověď 200
Úplný model: ApiResponse_PageDetailData_
dataPageDetailDataPovinnéObsah úspěšné odpovědi.
Pole ·
databody_htmlŘetězec nullPovinnéObsah stránky ve formátu HTML.
created_atŘetězecPovinnéČas vytvoření.
format:"date-time"idŘetězecPovinnéIdentifikátor zdroje; zachovejte jej v podobě, v jaké byl vrácen.
is_availableLogická hodnotaPovinnéZda je položka v tomto kontextu dostupná.
market_scopeŘetězecPovinnéZda zdroj platí pro všechny, nebo jen vybrané trhy.
Omezení
enum["all", "selected"]
meta_descriptionŘetězec nullPovinnéPopis pro vyhledávače ve vybraném jazyce.
meta_keywordsPole <Řetězec> nullPovinnéKlíčová slova pro vyhledávače ve vybraném jazyce.
meta_titleŘetězec nullPovinnéTitulek pro vyhledávače ve vybraném jazyce.
numberŘetězecPovinnéČíslo objednávky nebo zákaznického požadavku určené pro uživatele.
publishedLogická hodnotaPovinnéZda je zdroj zveřejněn.
slugŘetězec nullPovinnéÚsek cesty URL ve vybraném jazyce.
titleŘetězec nullPovinnéNázev ve vybraném jazyce.
updated_atŘetězecPovinnéČas poslední aktualizace.
format:"date-time"versionCelé čísloPovinnéVerze zdroje používaná k řízení souběžných změn.
metaContextPageMetaContextMetaPageMetaRequestMetaPovinnéMetadata odpovědi.
Pole ·
metalocaleŘetězecPovinnéJazyk vybraný pro tento požadavek.
market_codeŘetězecPovinnéKód trhu vrácený koncovým bodem kontextu.
market_idŘetězecPovinnéIdentifikátor trhu vrácený koncovým bodem kontextu.
paginationPaginationPovinnéMetadata stránkování pomocí kurzoru.
request_idŘetězecPovinnéIdentifikátor požadavku; v metadatech odpovědi označuje požadavek HTTP.
minLength:1maxLength:100
localeŘetězecPovinnéJazyk vybraný pro tento požadavek.
market_codeŘetězecPovinnéKód trhu vrácený koncovým bodem kontextu.
market_idŘetězecPovinnéIdentifikátor trhu vrácený koncovým bodem kontextu.
request_idŘetězecPovinnéIdentifikátor požadavku; v metadatech odpovědi označuje požadavek HTTP.
minLength:1maxLength:100
paginationPaginationPovinnéMetadata stránkování pomocí kurzoru.
request_idŘetězecPovinnéIdentifikátor požadavku; v metadatech odpovědi označuje požadavek HTTP.
minLength:1maxLength:100
request_idŘetězecPovinnéIdentifikátor požadavku; v metadatech odpovědi označuje požadavek HTTP.
minLength:1maxLength:100
Stav HTTP
200- Úspěšná odpověď Schéma
400- Neplatný požadavek
401- Vyžadováno ověření
403- Přístup odepřen
404- Zdroj nenalezen
409- Konflikt verzí
422- Chyba validace
429- Překročen limit požadavků
Další stavy HTTP (7)
405- Metoda není povolena
413- Příliš velký požadavek
415- Nepodporovaný formát
500- Chyba serveru
502- Chyba brány API
503- Služba nedostupná
504- Vypršel časový limit
Katalog chyb: ErrorResponse
Hlavičky
401
WWW-AuthenticateŘetězecVolitelnéZpůsob ověření požadovaný serverem.
405
AllowŘetězecVolitelnéMetody HTTP podporované tímto zdrojem.
429, 503
Retry-AfterCelé čísloVolitelnéMinimální prodleva před opakováním v sekundách.
minimum:0