API Platformu
Anahtar Kelime API
Birden fazla dil ve ülkede herhangi bir anahtar kelime için arama hacmi, TBM, rekabet ve arama amacı dahil olmak üzere kapsamlı anahtar kelime metrikleri…
Birden fazla dil ve ülkede herhangi bir anahtar kelime için arama hacmi, TBM, rekabet ve arama amacı dahil olmak üzere kapsamlı anahtar kelime metrikleri alın.
Ürün sayfası: Anahtar Kelime API.
Kimlik Doğrulama
Tüm istekler başlık tabanlı kimlik doğrulama gerektirir. Her istekte API kimlik bilgilerinizi ekleyin.
| Header | Type | Açıklama |
|---|---|---|
SEMUST-API-USER | string | API kullanıcınızın kullanıcı adı |
SEMUST-API-PASSWORD | string | API kullanıcınızın şifresi |
API kimlik bilgilerini API Erişim sayfasında doğrulayabilirsiniz.
SEMUST-API-USER: your_username
SEMUST-API-PASSWORD: your_passwordRequest Parameters
Aşağıdaki parametrelerle bir application/json gövdesi gönderin:
Body
keywordstringrequiredAnaliz edilecek anahtar kelime (örn., 'seo araçları', 'en iyi kahve dükkanları')
countrystringdefault: USCoğrafi hedefli veriler için ISO 3166-1 alpha-2 ülke kodu. Örnekler: "US", "GB", "DE", "TR".
languagestringdefault: enDil kodu (ISO 639-1). Arama sonuçlarının dilini kontrol eder. Örnekler: "en", "tr", "de", "fr", "es".
limitintegerdefault: 100Döndürülecek maksimum anahtar kelime sonucu sayısı. Minimum: 1, Maksimum: 1000. Daha yüksek limitler maliyeti artırabilir.
match_typestringdefault: broadAnahtar kelime eşleşme tipi. Seçenekler: "broad" (varsayılan — ilişkili anahtar kelimeler), "phrase_match" (sadece girilen ifadeyi içeren anahtar kelimeler), "exact_match" (sadece girilen anahtar kelime, limit=1 olarak ayarlanır), "related" (sadece anlamsal olarak ilişkili sonuçlar).
match_type
| Değer | Ne döndürür |
|---|---|
broad | Anlamsal olarak ilişkili kelimeler (varsayılan) |
phrase_match | Yalnızca tohum ifadeyi içeren kelimeler |
exact_match | Yalnızca tam kelime — limit zorunlu olarak 1 olur |
related | Alt dize eşleşmesi olmadan saf anlamsal sonuçlar |
{
"keyword": "seo tools",
"country": "US",
"language": "en",
"limit": 100,
"match_type": "broad"
}Kod Örnekleri
Aşağıda Keyword Data API'yi farklı dillerden çağırmanın örnekleri yer alıyor.
curl -X POST https://data.semust.com/v1/keyword-data \
-H "Content-Type: application/json" \
-H "SEMUST-API-USER: your_username" \
-H "SEMUST-API-PASSWORD: your_password" \
-d '{
"keyword": "seo tools",
"country": "US",
"language": "en",
"limit": 100,
"match_type": "broad"
}'import requests
response = requests.post(
"https://data.semust.com/v1/keyword-data",
headers={
"SEMUST-API-USER": "your_username",
"SEMUST-API-PASSWORD": "your_password",
},
json={
"keyword": "seo tools",
"country": "US",
"language": "en",
"limit": 100,
"match_type": "broad",
},
)
if response.status_code == 200:
data = response.json()
print(f"Success: {data['success']}")
print(f"Result Count: {data['result_count']}")
print(f"Cost: ${data['cost']:.6f}\n")
for kw in data.get('data', []):
print(f"Keyword: {kw['keyword']}")
print(f" Search Volume: {kw['search_volume']:,}")
print(f" CPC: ${kw['cpc']:.2f}")
print(f" Competition: {kw['competition']} ({kw['competition_level']})")
print(f" Intent: {kw['intent']}")
if kw.get('related_keywords'):
print(f" Related: {', '.join(kw['related_keywords'][:3])}")
else:
print(f"Error [{response.status_code}]: {response.text}")const response = await fetch("https://data.semust.com/v1/keyword-data", {
method: "POST",
headers: {
"Content-Type": "application/json",
"SEMUST-API-USER": "your_username",
"SEMUST-API-PASSWORD": "your_password",
},
body: JSON.stringify({
keyword: "seo tools",
country: "US",
language: "en",
limit: 100,
match_type: "broad",
}),
});
if (response.ok) {
const data = await response.json();
console.log(`Success: ${data.success}`);
console.log(`Cost: $${data.cost.toFixed(6)}`);
data.data?.forEach((kw) => {
console.log(`\n${kw.keyword}`);
console.log(` Search Volume: ${kw.search_volume.toLocaleString()}`);
console.log(` CPC: $${kw.cpc.toFixed(2)}`);
console.log(` Competition: ${kw.competition} (${kw.competition_level})`);
console.log(` Intent: ${kw.intent}`);
if (kw.related_keywords?.length) {
console.log(` Related: ${kw.related_keywords.slice(0, 3).join(", ")}`);
}
});
} else {
const text = await response.text();
console.error(`Error [${response.status}]: ${text}`);
}package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"keyword": "seo tools",
"country": "US",
"language": "en",
"limit": 100,
"match_type": "broad",
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST",
"https://data.semust.com/v1/keyword-data",
bytes.NewBuffer(body))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("SEMUST-API-USER", "your_username")
req.Header.Set("SEMUST-API-PASSWORD", "your_password")
resp, err := (&http.Client{}).Do(req)
if err != nil {
fmt.Printf("Request failed: %v\n", err)
return
}
defer resp.Body.Close()
respBody, _ := io.ReadAll(resp.Body)
if resp.StatusCode == 200 {
var data map[string]interface{}
json.Unmarshal(respBody, &data)
fmt.Printf("Success: %v\n", data["success"])
fmt.Printf("Cost: $%.6f\n", data["cost"])
if keywordData, ok := data["data"].([]interface{}); ok {
for _, item := range keywordData {
kw := item.(map[string]interface{})
fmt.Printf("\n%v\n", kw["keyword"])
fmt.Printf(" Search Volume: %.0f\n", kw["search_volume"])
fmt.Printf(" CPC: $%.2f\n", kw["cpc"])
fmt.Printf(" Competition: %.0f (%v)\n", kw["competition"], kw["competition_level"])
fmt.Printf(" Intent: %v\n", kw["intent"])
}
}
} else {
fmt.Printf("Error %d: %s\n", resp.StatusCode, string(respBody))
}
}<?php
$payload = json_encode([
"keyword" => "seo tools",
"country" => "US",
"language" => "en",
"limit" => 100,
"match_type" => "broad",
]);
$ch = curl_init("https://data.semust.com/v1/keyword-data");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"SEMUST-API-USER: your_username",
"SEMUST-API-PASSWORD: your_password",
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$data = json_decode($response, true);
echo "Success: " . ($data["success"] ? "true" : "false") . "\n";
echo "Cost: $" . number_format($data["cost"], 6) . "\n\n";
foreach ($data["data"] ?? [] as $kw) {
echo $kw["keyword"] . "\n";
echo " Search Volume: " . number_format($kw["search_volume"]) . "\n";
echo " CPC: $" . number_format($kw["cpc"], 2) . "\n";
echo " Competition: " . $kw["competition"] . " (" . $kw["competition_level"] . ")\n";
echo " Intent: " . $kw["intent"] . "\n\n";
}
} else {
echo "Error [{$httpCode}]: {$response}\n";
}Response
Anahtar kelime metrikleri ve maliyet bilgileri içeren bir JSON nesnesi döndürür.
Not
Sonuçlar arama hacmine göre en yüksekten en düşüğe sıralanır.
Response Fields Reference
| Alan | Type | Açıklama |
|---|---|---|
success | boolean | Başarılı yanıtta her zaman true |
result_count | integer | Döndürülen anahtar kelime sayısı |
cost | float | USD cinsinden tahsil edilen gerçek maliyet |
data | array | Anahtar kelime veri nesneleri dizisi |
Anahtar Kelime Veri Nesnesi
| Alan | Type | Açıklama |
|---|---|---|
keyword | string | Anahtar kelime terimi |
search_volume | integer | Aylık arama hacmi |
cpc | float | USD cinsinden tıklama başına maliyet |
competition | float | Rekabet seviyesi (0-100) |
country | string | Kod |
language | string | Kod |
intent | string | Arama amacı sınıflandırması |
competition_level | string | Rekabet seviyesi: "low" (0-33), "medium" (34-66) veya "high" (67-100) |
related_keywords | array | null | İlgili anahtar kelime önerileri (dize dizisi veya null) |
{
"success": true,
"result_count": 3,
"cost": 0.01,
"data": [
{
"keyword": "seo tools",
"search_volume": 12100,
"cpc": 15.75,
"competition": 85,
"competition_level": "high",
"country": "us",
"language": "en",
"intent": "commercial",
"related_keywords": ["best seo tools", "free seo tools"]
},
{
"keyword": "best seo tools",
"search_volume": 8100,
"cpc": 12.50,
"competition": 72,
"competition_level": "high",
"country": "us",
"language": "en",
"intent": "commercial",
"related_keywords": null
},
{
"keyword": "free seo tools",
"search_volume": 5400,
"cpc": 8.25,
"competition": 45,
"competition_level": "medium",
"country": "us",
"language": "en",
"intent": "informational",
"related_keywords": null
}
]
}Fiyatlandırma
Ön ödeme ve otomatik iade ile sonuç tabanlı fiyatlandırma.
Formül
Cost = max($0.01, (result_count / 100) × $0.03)Fiyatlandırma Örnekleri
| Sonuç | Hesaplama | Nihai maliyet |
|---|---|---|
| 0-33 | Minimum ücret | $0.01 |
| 50 | (50/100) × $0.03 | $0.015 |
| 100 | (100/100) × $0.03 | $0.03 |
| 150 | (150/100) × $0.03 | $0.045 |
| 200 | (200/100) × $0.03 | $0.06 |
Ön Ödeme
0,03 $ peşin (maksimum fiyat) olarak ücretlendirilirsiniz ve işlem tamamlandıktan sonra fazlalık iade edilir. Bu, yalnızca alınan gerçek sonuçlar için ücretlendirme yaparken bakiyenizin yeterli olmasını sağlar.
Hatalarda Tam İade
İsteğiniz zaman aşımı, çalışan hataları veya herhangi bir sunucu sorunu nedeniyle başarısız olursa, otomatik olarak tam iade alırsınız. Yalnızca API başarıyla anahtar kelime verilerini döndürdüğünde ücretlendirilirsiniz.
Desteklenen Diller
Diller yükleniyor…
Bir dil kodu bulunamazsa, sistem varsayılan olarak Türkçe'ye (tr) döner.
Hata Kodları
Tüm hatalar, insan tarafından okunabilir bir mesaj ve bir hata kodu içeren bir JSON nesnesi döndürür.
| HTTP | Kod | Anlamı |
|---|---|---|
| 400 | INVALID_REQUEST | İstek gövdesi hatalı biçimlendirilmiş veya gerekli alanlar eksik |
| 400 | KEYWORD_REQUIRED | Anahtar kelime alanı boş veya eksik |
| 400 | INVALID_MATCH_TYPE | match_type değeri geçerli değil. İzin verilen değerler: broad, phrase_match, exact_match, related. |
| 401 | INVALID_API_KEY | Kimlik doğrulama başarısız — geçersiz kullanıcı adı veya şifre |
| 401 | INVALID_CREDENTIALS | Geçersiz kullanıcı adı veya şifre |
| 401 | CREDENTIALS_EXPIRED | API kullanıcı kimlik bilgilerinin süresi doldu |
| 402 | INSUFFICIENT_CREDITS | Hesabınızda yeterli kredi yok |
| 403 | IP_NOT_WHITELISTED | IP adresiniz beyaz listede değil |
| 429 | RATE_LIMIT_EXCEEDED | Çok fazla istek — hız sınırı aşıldı |
| 500 | INTERNAL_ERROR | Bir iç sunucu hatası oluştu |
| 502 | WORKER_FAILED | Anahtar kelime verileri alınamadı |
| 504 | TIMEOUT | İstek zaman aşımına uğradı (maks 10 dakika) |
{
"error": "Your account does not have enough credits",
"code": "INSUFFICIENT_CREDITS"
}Krediler & Rate Limits
Krediler
Her istek, bakiyenizden kredi tüketir. Maliyet, mobile parametresine göre değişebilir. Bakiyeniz yetersizse, API HTTP 402 döndürür.
Rate Limits
İstekler, planınıza göre dakika başına ve gün başına sınırlara tabidir. Sınırların aşılması HTTP 429 döndürür.
