Dohvati — CMS stranice
Pročitajte podatke iz „CMS stranice“. Rezultat ovisi o parametrima ove radnje.
GET/api/v1/pages/{page_id}
- Autentifikacija
Bearer- Dostupno od
- STANDARD
- Potrebne ovlasti
content.page:read
Primjeri koda
Primjer zahtjeva
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))
Primjer odgovora 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"
}
}
Kako funkcionira
- Upisi stranica obuhvaćaju naslov, slug, HTML sadržaj, SEO metapodatke, stanje objave i podržani tržišni opseg.
- Pri održavanju prevedenog sadržaja izričito odaberite jezik.
- PATCH mijenja samo dostavljena polja.
- Null je dopušten samo kada shema i kontekst dopuštaju uklanjanje vrijednosti.
- Postojeća pravila objave, provjere sadržaja i plana ostaju na snazi.
Parametri
Parametri putanje
page_idNiz znakovaObveznoIdentifikator CMS stranice.
Ograničenja
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
Parametri upita
localeNiz znakova nullNeobaveznoJezik odabran za ovaj zahtjev.
Niz znakova:minLength:2maxLength:20market_idNiz znakova nullNeobaveznoIdentifikator tržišta vraćen s krajnje točke konteksta.
Ograničenja · Niz znakova 1
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
market_codeNiz znakova nullNeobaveznoKod tržišta vraćen s krajnje točke konteksta.
Niz znakova:minLength:1maxLength:16
Ova operacija ne prihvaća JSON tijelo.
Odgovori
Odgovor 200
Cijeli model: ApiResponse_PageDetailData_
dataPageDetailDataObveznoPodaci uspješnog odgovora.
Polja ·
databody_htmlNiz znakova nullObveznoSadržaj stranice u HTML-u.
created_atNiz znakovaObveznoVrijeme izrade.
format:"date-time"idNiz znakovaObveznoIdentifikator resursa; sačuvajte ga u vraćenom obliku.
is_availableLogička vrijednostObveznoJe li stavka dostupna u ovom kontekstu.
market_scopeNiz znakovaObveznoOdnosi li se resurs na sva ili na odabrana tržišta.
Ograničenja
enum["all", "selected"]
meta_descriptionNiz znakova nullObveznoOpis za tražilice na odabranom jeziku.
meta_keywordsPolje vrijednosti <Niz znakova> nullObveznoKljučne riječi za tražilice na odabranom jeziku.
meta_titleNiz znakova nullObveznoNaslov za tražilice na odabranom jeziku.
numberNiz znakovaObveznoBroj narudžbe ili zahtjeva namijenjen korisniku.
publishedLogička vrijednostObveznoJe li resurs objavljen.
slugNiz znakova nullObveznoDio URL putanje na odabranom jeziku.
titleNiz znakova nullObveznoNaslov na odabranom jeziku.
updated_atNiz znakovaObveznoVrijeme posljednjeg ažuriranja.
format:"date-time"versionCijeli brojObveznoVerzija resursa za kontrolu istodobnih upisa.
metaContextPageMetaContextMetaPageMetaRequestMetaObveznoMetapodaci odgovora.
Polja ·
metalocaleNiz znakovaObveznoJezik odabran za ovaj zahtjev.
market_codeNiz znakovaObveznoKod tržišta vraćen s krajnje točke konteksta.
market_idNiz znakovaObveznoIdentifikator tržišta vraćen s krajnje točke konteksta.
paginationPaginationObveznoMetapodaci straničenja pomoću kursora.
request_idNiz znakovaObveznoIdentifikator zahtjeva; u metapodacima odgovora označava HTTP zahtjev.
minLength:1maxLength:100
localeNiz znakovaObveznoJezik odabran za ovaj zahtjev.
market_codeNiz znakovaObveznoKod tržišta vraćen s krajnje točke konteksta.
market_idNiz znakovaObveznoIdentifikator tržišta vraćen s krajnje točke konteksta.
request_idNiz znakovaObveznoIdentifikator zahtjeva; u metapodacima odgovora označava HTTP zahtjev.
minLength:1maxLength:100
paginationPaginationObveznoMetapodaci straničenja pomoću kursora.
request_idNiz znakovaObveznoIdentifikator zahtjeva; u metapodacima odgovora označava HTTP zahtjev.
minLength:1maxLength:100
request_idNiz znakovaObveznoIdentifikator zahtjeva; u metapodacima odgovora označava HTTP zahtjev.
minLength:1maxLength:100
HTTP status
200- Uspješan odgovor Shema
400- Nevaljan zahtjev
401- Potrebna je autentikacija
403- Pristup odbijen
404- Resurs nije pronađen
409- Sukob verzija
422- Provjera nije uspjela
429- Prekoračeno ograničenje zahtjeva
Ostali HTTP statusi (7)
405- Metoda nije dopuštena
413- Zahtjev je prevelik
415- Nepodržan format
500- Pogreška poslužitelja
502- Pogreška API pristupnika
503- Usluga nije dostupna
504- Istek vremena
Katalog pogrešaka: ErrorResponse
Zaglavlja
401
WWW-AuthenticateNiz znakovaNeobaveznoShema autentifikacije koju zahtijeva poslužitelj.
405
AllowNiz znakovaNeobaveznoHTTP metode koje ovaj resurs podržava.
429, 503
Retry-AfterCijeli brojNeobaveznoNajkraće čekanje prije ponavljanja, u sekundama.
minimum:0