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 token | Authorization: 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çıklama | Endpoint örnekleri |
|---|---|---|
orders.read | Siparişleri oku / çek | GET /orders, GET /orders/{id} |
orders.write | Sipariş güncelle / fatura | PATCH /orders/{id}, invoice |
products.read | Ürünleri oku | GET /products, GET /products/{id} |
products.create | Ürün ekle | POST /products |
products.update | Ürün / stok / görsel | PATCH, /quick, /image |
products.delete | Ürün sil | DELETE /products/{id} |
categories.read | Kategorileri oku | GET /categories |
brands.read | Markaları oku | GET /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
*.readizinleri
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
| Durum | Olası neden |
|---|---|
403 Web API kapalı | Admin → API'de Web API kapalı |
403 Geçersiz anahtar / yetki | Yanlış key veya eksik permission |
503 | Hiç 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
}
]
}