GET https://example.com/api/v1/

Kimlik Doğrulama

Her Web API isteğinde API anahtarınız bulunmalıdır. Anahtarları Yönetim → API bölümünden oluşturun.

Desteklenen Yöntemler (birini kullanın)

YöntemÖrnek
Başlık (önerilen)X-API-Key: YOUR_API_KEY
Bearer tokenAuthorization: Bearer YOUR_API_KEY
Query string?api_key=YOUR_API_KEY
Önemli: API anahtarını istemci tarafı JavaScript veya mobil uygulamalarda asla ifşa etmeyin. API'yi yalnızca sunucunuzdan çağırın.

İzin matrisi

İzin anahtarıAçıklamaEndpoint örnekleri
orders.readSiparişleri oku / çekGET /orders, GET /orders/{id}
orders.writeSipariş güncelle / faturaPATCH /orders/{id}, invoice
products.readÜrünleri okuGET /products, GET /products/{id}
products.createÜrün eklePOST /products
products.updateÜrün / stok / görselPATCH, /quick, /image
products.deleteÜrün silDELETE /products/{id}
categories.readKategorileri okuGET /categories
brands.readMarkaları okuGET /brands

Önerilen anahtar senaryoları

  • ERP / stok: products.read + products.update (+ isteğe bağlı create)
  • Pazaryeri / kargo: orders.read + orders.write
  • Salt okunur rapor: yalnızca *.read izinleri

Rate limit

Başarılı istekler IP başına yaklaşık 300 / 15 dakika ile sınırlıdır. Başarısız kimlik doğrulama denemeleri ayrı olarak kilitlenebilir. Aşımda 429 dönülebilir — ayrıntılar için API Kuralları.

Sık karşılaşılan hatalar

DurumOlası neden
403 Web API kapalıAdmin → API'de Web API kapalı
403 Geçersiz anahtar / yetkiYanlış key veya eksik permission
503Hiç API anahtarı tanımlı değil
Not: Vitrin AJAX uçları (/api/cart.php vb.) API Key kullanmaz; müşteri oturumu + CSRF kullanır. Bkz. Vitrin AJAX API. Cron işleri SHOP_TOKEN kullanır — Cron.
PHP
<?php

$baseUrl = 'https://example.com/api/v1';
$apiKey  = 'YOUR_API_KEY'; // Admin → API

function apiRequest(string $method, string $url, string $apiKey, ?array $data = null): array
{
    $ch = curl_init();

    $headers = [
        'X-API-Key: ' . trim($apiKey),
        'Accept: application/json',
    ];

    if ($data !== null) {
        $headers[] = 'Content-Type: application/json';
    }

    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => $method,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_SSL_VERIFYPEER => true,
    ]);

    if ($data !== null) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
    }

    $response = curl_exec($ch);
    $httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error($ch);
    curl_close($ch);

    $decoded = json_decode((string) $response, true);

    return [
        'http_code' => $httpCode,
        'curl_error' => $error,
        'response' => is_array($decoded) ? $decoded : $response,
    ];
}

// Connection check — categories
$result = apiRequest('GET', $baseUrl . '/categories', $apiKey);
print_r($result);
cURL
curl -s -H "X-API-Key: YOUR_API_KEY" \
  -H "Accept: application/json" \
  "https://example.com/api/v1/categories"
Örnek Yanıt (JSON)
{
  "totalElements": 4,
  "content": [
    {
      "id": 3,
      "name": "Vitamin & Takviye",
      "slug": "vitamin-takviye",
      "parentId": 1,
      "parentName": "Sağlık",
      "active": true
    }
  ]
}