İçeriğe geç
Geliştiriciler

Onelinks API

Onelinks'i kendi araçlarınıza ve iş akışlarınıza entegre edin. Tam API erişimi Kurumsal planda sunulur.

Kimlik Doğrulama

Onelinks API, oturum tabanlı kimlik doğrulama kullanır. onelinks_token adlı HTTP-only cookie ile çalışır. Kimlik doğrulamak için POST /api/auth/login endpoint'ini kullanıcı adı ve şifrenizle çağırın — bu işlem cookie'yi ayarlar ve sonraki tüm isteklere dahil edilmesi gerekir.

HTTP-only Cookie

TARAYICI

Uygulama içindeki tüm API istekleri onelinks_tokenJWT cookie'si ile otomatik kimlik doğrular. CSRF koruması dahildir.

Cookie: onelinks_token=<jwt>

Bearer Token

API

Dış entegrasyonlar ve otomasyon için. Dashboard → Entegrasyonlar bölümünden oluşturulur. Sadece Kurumsal Plan'da kullanılabilir.

Authorization: Bearer ol_live_...

Bearer token kullanılmaz

API, Authorization header veya API anahtarı desteklemiyor. Tüm istekler, giriş sonrasında elde edilen onelinks_token oturum cookie'si ile doğrulanır.

Token Formatı

ol_live_<64 hex karakter>

Tokenler ol_live_ öneki ile başlar ve ardından 64 karakterlik bir hex dizisi içerir. Toplam uzunluk 72 karakterdir. Token üretildiğinde yalnızca bir kez gösterilir — kaydetmeyi unutma.

Hızlı Başlangıç

Aşağıdaki örnekler API tokeninizi kullandığınızı varsayar. Tokeni Dashboard → Entegrasyonlar bölümünden oluşturabilirsiniz.

1Linklerinizi listeleyin

curl https://onelinks.co/api/links \
  -H "Authorization: Bearer ol_live_YOUR_TOKEN_HERE"

2Yeni link oluşturun

curl -X POST https://onelinks.co/api/links \
  -H "Authorization: Bearer ol_live_YOUR_TOKEN_HERE" \
  -H "Content-Type: application/json" \
  -d '{"title":"GitHub Profilim","url":"https://github.com/kullanici","type":"SOCIAL"}'

3Analitik verisini çekin

curl "https://onelinks.co/api/analytics?range=7d" \
  -H "Authorization: Bearer ol_live_YOUR_TOKEN_HERE"

JavaScript / Node.js Örneği

Node.js ortamında cookie tabanlı oturum açmak için onelinks_token cookie değerini manuel olarak Cookie başlığı ile iletebilirsiniz. API tokeni olan Kurumsal kullanıcılar için Authorization: Bearer tercih edilen yöntemdir.

Analitik

GET/api/analytics?range=7d

Kimliği doğrulanmış kullanıcının tüm linkleri için birleştirilmiş analitik verisini döner. Gelişmiş analitik (saatlik dağılım, coğrafi veriler, referrer kaynakları) Kurumsal Plan'da tam olarak raporlanır.

Query Parametreleri

AlanTürZorunluAçıklama
rangestringHayır"24h" | "7d" | "30d" — varsayılan: "7d"

Yanıt

{
  "total":    843,
  "thisWeek": 312,
  "range":    "7d",
  "since":    "2026-07-11T00:00:00.000Z",

  // Saatlik dağılım — son 24 saatin her saati için tıklama sayısı
  "hourly": [12, 5, 2, 1, 0, 0, 3, 8, 22, 35, 41, 38, 29, 27, 31, 44, 52, 67, 71, 58, 43, 29, 18, 14],

  // Günlük dağılım
  "daily": [
    { "date": "2026-07-12", "count": 97 },
    { "date": "2026-07-13", "count": 115 },
    { "date": "2026-07-14", "count": 134 }
  ],

  // Cihaz dağılımı
  "device": [
    { "device": "Mobil",     "key": "mobile",  "pct": 78 },
    { "device": "Masaüstü",  "key": "desktop", "pct": 19 },
    { "device": "Tablet",    "key": "tablet",  "pct": 3  }
  ],

  // Coğrafi dağılım (Kurumsal Plan)
  "geo": [
    { "country": "Türkiye",  "code": "TR", "clicks": 612, "pct": 73 },
    { "country": "Almanya",  "code": "DE", "clicks": 91,  "pct": 11 },
    { "country": "ABD",      "code": "US", "clicks": 67,  "pct": 8  }
  ],

  // Referrer kaynakları (Kurumsal Plan)
  "referrers": [
    { "source": "instagram.com", "clicks": 501, "pct": 59 },
    { "source": "direct",        "clicks": 189, "pct": 22 },
    { "source": "twitter.com",   "clicks": 87,  "pct": 10 }
  ],

  // Link bazlı performans
  "links": [
    { "id": "clxyz123", "title": "GitHub Profilim",     "clicks": 312 },
    { "id": "clxyz456", "title": "Portföy Sitem",       "clicks": 198 },
    { "id": "clxyz789", "title": "LinkedIn Profilim",   "clicks": 156 }
  ]
}
# Son 7 günün analitikleri
curl "https://onelinks.co/api/analytics?range=7d" \
  -H "Authorization: Bearer ol_live_YOUR_TOKEN_HERE"

# Son 30 günün analitikleri
curl "https://onelinks.co/api/analytics?range=30d" \
  -H "Authorization: Bearer ol_live_YOUR_TOKEN_HERE"

Profil

GET/api/auth/me

Oturum açmış kullanıcı ve ilgili profil verisini döner. Şifre alanı asla yanıta dahil edilmez.

Yanıt

{
  "id":          "clxyz000abc",
  "name":        "Ada Şahin",
  "email":       "[email protected]",
  "username":    "ada",
  "accountType": "INDIVIDUAL",
  "plan":        "CORPORATE",
  "isAdmin":     false,
  "createdAt":   "2026-01-15T09:00:00.000Z",
  "profile": {
    "bio":              "İçerik üreticisi & fotoğrafçı",
    "jobTitle":         "Freelance Fotoğrafçı",
    "location":         "İstanbul",
    "website":          "https://adasahin.com",
    "theme":            "midnight",
    "avatar":           "/api/avatars/ada.jpg",
    "companyName":      null,
    "brandColor":       null,
    "slogan":           null,
    "customDomain":     null,
    "ga4Id":            null,
    "gtmId":            null,
    "zapierWebhookUrl": null
  }
}
curl https://onelinks.co/api/auth/me \
  -H "Authorization: Bearer ol_live_YOUR_TOKEN_HERE"
PATCH/api/profile

Profil alanlarını kısmen günceller. Yalnızca gönderilen alanlar değiştirilir. Güncellenmiş kullanıcı + profil nesnesini döner.

İstek gövdesi (tüm alanlar opsiyonel)

AlanTürZorunluAçıklama
namestringHayırGörünen ad. 1–100 karakter.
biostringHayırProfil biyografisi. Maks 500 karakter.
jobTitlestringHayırİş unvanı. Maks 80 karakter.
locationstringHayırKonum bilgisi. Maks 80 karakter.
websitestringHayırWeb sitesi URL&apos;i. Geçerli URL veya boş string.
themestringHayırAktif tema slug. Maks 50 karakter.
companyNamestring | nullHayırŞirket adı (Kurumsal hesaplar için).
brandColorstring | nullHayırMarka rengi — hex formatında (örn. #14b8a6). Kurumsal Plan.
sloganstring | nullHayırŞirket sloganı. Kurumsal Plan.
customDomainstring | nullHayırÖzel alan adı (örn. links.sitem.com). Kurumsal Plan.
ga4Idstring | nullHayırGoogle Analytics 4 ölçüm ID (G-XXXXXXXXXX). Analitik entegrasyon özelliği.
gtmIdstring | nullHayırGoogle Tag Manager container ID (GTM-XXXXXXX). Analitik entegrasyon özelliği.
zapierWebhookUrlstring | nullHayırZapier webhook URL. Webhook entegrasyon özelliği.
curl -X PATCH https://onelinks.co/api/profile \
  -H "Authorization: Bearer ol_live_YOUR_TOKEN_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "bio": "Full-stack developer & açık kaynak tutkunuzu",
    "location": "İstanbul, Türkiye",
    "website": "https://benim.dev"
  }'

Token Yönetimi

Sadece Kurumsal Plan

Token yönetimi endpoint'leri yalnızca aktif Kurumsal Plan'a sahip hesaplarda kullanılabilir. Ücretsiz veya Pro hesaplar için 403 Forbidden döner.
GET/api/tokenCORPORATE

Mevcut API token bilgilerini döner. Güvenlik için token'in tamamı yerine yalnızca son 8 karakteri gösterilir.

Yanıt

{
  "hasToken":   true,
  "tokenHint":  "...a3f9bc12",
  "createdAt":  "2026-07-10T14:22:00.000Z"
}

// Token yoksa
{ "hasToken": false }
curl https://onelinks.co/api/token \
  -H "Authorization: Bearer ol_live_YOUR_TOKEN_HERE"
POST/api/tokenCORPORATE

Yeni bir API token üretir veya mevcut token'i yeniler. Önceki token geçersiz kılınır. Yanıt olarak token yalnızca bu noktada tam haliyle döner — kaydetmeyi unutma.

Bu endpoint'i çağırdıktan sonra eski token geçersiz olur. Tüm entegrasyonlarınızı yeni token ile güncellemeyi unutmayın.

Yanıt

{
  "token":     "ol_live_a1b2c3d4e5f6...64hexchars",
  "createdAt": "2026-07-18T10:30:00.000Z"
}
# Cookie ile (Dashboard oturumu)
curl -X POST https://onelinks.co/api/token \
  -b cookies.txt

Hata Kodları

Tüm API yanıtları HTTP standart durum kodlarını kullanır. Hata yanıtları aşağıdaki yapıda döner:

{
  "error": "Hata açıklaması"
  // Bazı endpoint'lerde ek alanlar da bulunabilir:
  // "limitReached": true, "maxLinks": 5
}
KodDurumAçıklama
200OKİstek başarıyla tamamlandı.
201CreatedKaynak başarıyla oluşturuldu (POST /api/links).
400Bad Requestİstek gövdesi veya parametreler geçersiz. Doğrulama hatası.
401UnauthorizedGeçerli bir kimlik doğrulama bilgisi (cookie veya Bearer token) bulunamadı.
403ForbiddenKimlik doğrulandı ancak bu kaynağa erişim iznin yok. Plan limiti aşımı veya başka kullanıcının kaynağına erişim.
404Not FoundKaynak bulunamadı. Link mevcut değil veya başka kullanıcıya ait.
429Too Many RequestsHız limiti aşıldı. Retry-After başlığını kontrol ederek bekleme süresini öğrenebilirsiniz.
500Server ErrorBeklenmeyen bir sunucu hatası oluştu. Sorun devam ederse destek ile iletişime geçin.

Rate Limit ve Plan Gereksinimleri

Şu an herhangi bir rate limit uygulanmamaktadır. API erişimi (programatik kullanım) Kurumsal plan gerektirir. Link zamanlama, şifreli linkler ve özel alan adı gibi özellikler plan bazlıdır; planınız bu özellikleri desteklemiyorsa sessizce göz ardı edilir.

Ücretsiz Plan

60 istek/dakika

Kullanıcı başına

Pro Plan

300 istek/dakika

Kullanıcı başına

Kurumsal Plan

1000 istek/dakika

Kullanıcı başına

Limit Aşımı

API token (Bearer) ile kimlik doğrulanan istekler dakikada 1000 istek (Kurumsal) ile sınırlıdır. Limit aşıldığında istek 429 Too Many Requests ve { "error": "...", "code": "RATE_LIMITED" }yanıtı döner. Bir sonraki dakika penceresinde sayaç sıfırlanır.

API tokenine nasıl ulaşırsınız?

  1. 1Dashboard → Entegrasyonlar sayfasına gidin.
  2. 2"API Token Oluştur" butonuna tıklayın (sadece Kurumsal Plan).
  3. 3Token yalnızca bir kez gösterilir — güvenli bir yere kaydedin.
  4. 4İsteklerinizde Authorization: Bearer <token> başlığını kullanın.

API'yi Denemeye Hazır mısın?

Kurumsal plan ile API tokenini hemen oluştur ve entegrasyona başla.

SLA Garantisi (Kurumsal)

Kurumsal plan için ölçülebilir hizmet seviyesi taahhüdü. Aşağıdaki değerler sözleşmenin bir parçasıdır.

Uptime Hedefi

%99.9

Aylık, zamanlanmış bakım hariç

Ölçüm

5 dk aralık

Harici izleme; /status sayfasında yayınlanır

İzin verilen kesinti

~43 dk/ay

%99.9 → aylık azami

İhlal halinde servis kredisi

Aylık uptimeServis kredisi
%99.0 – %99.9aylık ücretin %10'u
%95.0 – %99.0aylık ücretin %25'i
%95.0 altıaylık ücretin %50'si

Kredi Talebi

Ölçüm harici izleme (uptime monitörü) ile yapılır ve /status sayfasında yayınlanır. Kredi talebi, ihlalin gerçekleştiği ayı takip eden 30 gün içinde [email protected] adresine yazılı bildirimle yapılır; kredi bir sonraki fatura döneminden düşülür. Zamanlanmış bakım ve mücbir sebepler kapsam dışıdır.