İçeriğe atla
ShopentlyLearn

Getir · Erişim belirteci — Kimlik doğrulama

900 saniye geçerli Shopently API tokenı alın. ApiKey başlığını, yanıtı ve sonraki isteklerde Bearer kullanımını inceleyin.

POST/api/v1/auth/token

Kimlik doğrulama
ApiKey
En düşük plan
BASIC
Gerekli izinler
Uygulanamaz

Kod örnekleri

İstek örneği

cURL

: "${SHOPENTLY_SHOP_URL:?}"

curl --disable --globoff --fail-with-body --silent --show-error \
  --proto '=https' --connect-timeout 5 --max-time 30 \
  --request POST \
  --header "Authorization: ApiKey ${SHOPENTLY_API_KEY:?}" \
  --header 'Content-Type: application/json' \
  --data-raw '{}' \
  --url "${SHOPENTLY_SHOP_URL%/}"/api/v1/auth/token

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_API_KEY') ?: '';
if ($credential === '' || strpbrk($credential, "\r\n") !== false) {
    throw new RuntimeException('Invalid credential');
}
$headers = ['Content-Type: application/json'];
$headers[] = 'Authorization: ApiKey ' . $credential;
$responseHeaders = [];
$handle = curl_init($baseUrl . '/api/v1/auth/token');
curl_setopt_array($handle, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    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);
    },
]);
curl_setopt($handle, CURLOPT_POSTFIELDS, '{}');
$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_API_KEY']
if not credential or "\r" in credential or "\n" in credential:
    raise ValueError("Invalid credential")
headers = {}
headers["Authorization"] = 'ApiKey' + " " + credential
body = '{}'
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(
        'POST', base_url + '/api/v1/auth/token', 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))

Yanıt örneği 200

JSON
{
  "data": {
    "access_token": "EXAMPLE_ACCESS_TOKEN",
    "expires_at": "2026-01-01T12:00:00Z",
    "expires_in": 900,
    "rate_limits": {
      "auth_per_minute": 10,
      "read_per_minute": 60,
      "write_per_minute": 10
    },
    "token_type": "Bearer"
  },
  "meta": {
    "request_id": "example"
  }
}

Kimlik doğrulama

  • API anahtarı yalnızca POST /api/v1/auth/token isteğinin Authorization başlığında gönderilir.
  • Anahtarı JSON içine, URL'ye veya sorgu parametrelerine koymayın.
  • Kaynak isteklerinde döndürülen belirteci kullanın ve expires_at değerine göre yenileyin; expires_in saniye cinsindendir.
  • Erişim belirteci, anahtarın güncel izinlerini, mağazanın haklarını, anahtarın iptalini veya IP kısıtlamalarını geçersiz kılmaz.

Token ne kadar süre geçerlidir?

  • expires_in: Düzenlendiği andan itibaren 900 saniye, yani 15 dakika. İstek göndermek geçerlilik süresini uzatmaz.
  • expires_at: UTC olarak sona erme zamanı. Geçerli erişim kısıtlamaları tokenı daha önce engelleyebilir.

Aynı tokenı birden fazla istekte kullanın ve expires_at öncesinde yenisini alın. Her işlemden önce token istemeyin. Yeni tokenı API anahtarıyla alın.

İstek hızı sınırları

Engine ≥ 4.143.0. Her token yanıtı, verildiği anda geçerli mağaza politikasından data.rate_limits içerir. Tüm anahtarlar bu limitleri paylaşır; yeni token limitleri sıfırlamaz. Plan değişikliği token süresi dolmadan uygulanabilir.

Parametreler

Yol, sorgu veya ek başlık parametresi yok.

İstek gövdesi

application/json · İsteğe bağlı

TokenRequest null

Yanıtlar

Yanıt 200

dataTokenData Zorunlu

Başarılı yanıtın verileri.

Alanlar · data
access_tokenDizeZorunlu

Kısa ömürlü Bearer kimlik bilgisi.

expires_atDizeZorunlu

Kimlik bilgisinin sona erme tarihi ve saati.

format: "date-time"
expires_inTam sayıİsteğe bağlı

Saniye cinsinden kimlik bilgisi ömrü.

Varsayılan: 900

rate_limitsTokenRateLimitsData Zorunlu

Her token yanıtı, verildiği anda geçerli mağaza politikasından data.rate_limits içerir. Tüm anahtarlar bu limitleri paylaşır; yeni token limitleri sıfırlamaz. Plan değişikliği token süresi dolmadan uygulanabilir.

Alanlar · rate_limits
auth_per_minuteTam sayıZorunlu

Başarısız kimlik doğrulama denemeleri dahil, dakika başına token isteği.

minimum: 0maximum: 1000000
read_per_minuteTam sayıZorunlu

Dakika başına okuma isteği.

minimum: 0maximum: 1000000
write_per_minuteTam sayıZorunlu

Dakika başına yazma isteği; bu değer yazma yetkisi vermez.

minimum: 0maximum: 1000000
token_typeDizeİsteğe bağlı

Döndürülen belirtecin kimlik doğrulama şeması.

const: "Bearer"

Varsayılan: "Bearer"

metaContextPageMeta ContextMeta PageMeta RequestMeta Zorunlu

Yanıt üst verileri.

Alanlar · meta

ContextPageMeta

localeDizeZorunlu

Bu istek için seçilen dil.

market_codeDizeZorunlu

Bağlam uç noktasının döndürdüğü pazar kodu.

market_idDizeZorunlu

Bağlam uç noktasının döndürdüğü pazar tanımlayıcısı.

paginationPagination Zorunlu

İmleç tabanlı sayfalamanın üst verileri.

request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

minLength: 1maxLength: 100

ContextMeta

localeDizeZorunlu

Bu istek için seçilen dil.

market_codeDizeZorunlu

Bağlam uç noktasının döndürdüğü pazar kodu.

market_idDizeZorunlu

Bağlam uç noktasının döndürdüğü pazar tanımlayıcısı.

request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

minLength: 1maxLength: 100

PageMeta

paginationPagination Zorunlu

İmleç tabanlı sayfalamanın üst verileri.

request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

minLength: 1maxLength: 100

RequestMeta

request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

minLength: 1maxLength: 100
Yanıt örneği

HTTP durumu

200
Başarılı yanıt Şema
400
Geçersiz istek
401
Kimlik doğrulaması gerekli
403
İzin reddedildi
404
Kaynak bulunamadı
409
Sürüm çakışması
422
Doğrulama başarısız
429
İstek sınırı aşıldı
Diğer HTTP durumları (7)
405
Yönteme izin verilmiyor
413
İstek çok büyük
415
Desteklenmeyen biçim
500
Sunucu hatası
502
API ağ geçidi hatası
503
Hizmet kullanılamıyor
504
Zaman aşımı

Hata kataloğu: ErrorResponse

Başlıklar

401

WWW-AuthenticateDizeİsteğe bağlı

Sunucunun gerektirdiği kimlik doğrulama şeması.

405

AllowDizeİsteğe bağlı

Bu kaynağın desteklediği HTTP yöntemleri.

429, 503

Retry-AfterTam sayıİsteğe bağlı

Yeniden denemeden önce saniye cinsinden en kısa bekleme süresi.

minimum: 0.0