Preuzmi — CMS stranice
Pročitajte podatke iz „CMS stranice“. Rezultat zavisi od parametara ove radnje.
GET/api/v1/pages/{page_id}
- Autentifikacija
Bearer- Dostupno od
- STANDARD
- Potrebna ovlašćenja
content.page:read
Primeri koda
Primer zahteva
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))
Primer 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 funkcioniše
- Upisi stranica obuhvataju 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 menja samo dostavljena polja.
- Null je dozvoljen samo kada šema i kontekst dozvoljavaju uklanjanje vrednosti.
- Postojeća pravila objave, provere sadržaja i plana ostaju na snazi.
Parametri
Parametri putanje
page_idNiz znakovaObaveznoIdentifikator CMS stranice.
Ograničenja
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
Parametri upita
localeNiz znakova nullOpcionoJezik odabran za ovaj zahtev.
Niz znakova:minLength:2maxLength:20market_idNiz znakova nullOpcionoIdentifikator tržišta vraćen s krajnje tačke konteksta.
Ograničenja · Niz znakova 1
pattern"^[a-z0-9][a-z0-9_-]{0,62}$"
market_codeNiz znakova nullOpcionoKod tržišta vraćen s krajnje tačke konteksta.
Niz znakova:minLength:1maxLength:16
Ova operacija ne prihvata JSON telo.
Odgovori
Odgovor 200
Ceo model: ApiResponse_PageDetailData_
dataPageDetailDataObaveznoPodaci uspešnog odgovora.
Polja ·
databody_htmlNiz znakova nullObaveznoSadržaj stranice u HTML-u.
created_atNiz znakovaObaveznoVreme kreiranja.
format:"date-time"idNiz znakovaObaveznoIdentifikator resursa; sačuvajte ga u vraćenom obliku.
is_availableLogička vrednostObaveznoDa li je stavka dostupna u ovom kontekstu.
market_scopeNiz znakovaObaveznoDa li se odnosi resurs na sva ili na odabrana tržišta.
Ograničenja
enum["all", "selected"]
meta_descriptionNiz znakova nullObaveznoOpis za pretraživače na odabranom jeziku.
meta_keywordsNiz vrednosti <Niz znakova> nullObaveznoKljučne reči za pretraživače na odabranom jeziku.
meta_titleNiz znakova nullObaveznoNaslov za pretraživače na odabranom jeziku.
numberNiz znakovaObaveznoBroj porudžbine ili zahteva namenjen korisniku.
publishedLogička vrednostObaveznoDa li je resurs objavljen.
slugNiz znakova nullObaveznoDeo URL putanje na odabranom jeziku.
titleNiz znakova nullObaveznoNaslov na odabranom jeziku.
updated_atNiz znakovaObaveznoVreme poslednjeg ažuriranja.
format:"date-time"versionCeli brojObaveznoVerzija resursa za kontrolu istovremenih upisa.
metaContextPageMetaContextMetaPageMetaRequestMetaObaveznoMetapodaci odgovora.
Polja ·
metalocaleNiz znakovaObaveznoJezik odabran za ovaj zahtev.
market_codeNiz znakovaObaveznoKod tržišta vraćen s krajnje tačke konteksta.
market_idNiz znakovaObaveznoIdentifikator tržišta vraćen s krajnje tačke konteksta.
paginationPaginationObaveznoMetapodaci paginacije pomoću kursora.
request_idNiz znakovaObaveznoIdentifikator zahteva; u metapodacima odgovora označava HTTP zahtev.
minLength:1maxLength:100
localeNiz znakovaObaveznoJezik odabran za ovaj zahtev.
market_codeNiz znakovaObaveznoKod tržišta vraćen s krajnje tačke konteksta.
market_idNiz znakovaObaveznoIdentifikator tržišta vraćen s krajnje tačke konteksta.
request_idNiz znakovaObaveznoIdentifikator zahteva; u metapodacima odgovora označava HTTP zahtev.
minLength:1maxLength:100
paginationPaginationObaveznoMetapodaci paginacije pomoću kursora.
request_idNiz znakovaObaveznoIdentifikator zahteva; u metapodacima odgovora označava HTTP zahtev.
minLength:1maxLength:100
request_idNiz znakovaObaveznoIdentifikator zahteva; u metapodacima odgovora označava HTTP zahtev.
minLength:1maxLength:100
HTTP status
200- Uspešan odgovor Šema
400- Nevažeći zahtev
401- Potrebna je autentifikacija
403- Pristup odbijen
404- Resurs nije pronađen
409- Sukob verzija
422- Provera nije uspela
429- Prekoračeno ograničenje zahteva
Ostali HTTP statusi (7)
405- Metoda nije dozvoljena
413- Zahtev je prevelik
415- Nepodržan format
500- Greška servera
502- Greška API mrežnog prolaza
503- Usluga nije dostupna
504- Istek vremena
Katalog grešaka: ErrorResponse
Zaglavlja
401
WWW-AuthenticateNiz znakovaOpcionoŠema autentifikacije koju zahteva server.
405
AllowNiz znakovaOpcionoHTTP metode koje ovaj resurs podržava.
429, 503
Retry-AfterCeli brojOpcionoNajkraće čekanje pre ponavljanja, u sekundama.
minimum:0