API Dokümantasyonu
Linkqink REST API ile kısa linkleri programatik olarak oluşturun, güncelleyin ve tıklama istatistiklerine erişin. Herhangi bir platformdan (CRM, e-posta aracı, no-code otomasyon, kendi backend'iniz) entegre edebilirsiniz.
Base URL
https://api.linkqink.com
Kimlik
Bearer / x-api-key
Format
JSON
Kimlik Doğrulama
Tüm korumalı uçlar bir API token ister. Token'ı Panel → API Anahtarları bölümünden oluşturursunuz. Token yalnızca bir kez gösterilir; güvenli saklayın. Token'ı iki şekilde gönderebilirsiniz:
Authorization header
Authorization: Bearer linkqink_xxx_yyy
x-api-key header
x-api-key: linkqink_xxx_yyy
No-code platformlar (Zapier, Make vb.) için pratik.
Token'ınızı test etmek için GET /api/health çağırın — yanıttaki authenticated: true token'ın geçerli olduğunu gösterir.
curl -X GET "https://api.linkqink.com/api/health" \
-H "Authorization: Bearer $LINKQINK_TOKEN"Hızlı Başlangıç
En basit entegrasyon: bir uzun URL gönderin, kısa link geri alın. Slug otomatik üretilir ve varsayılan projeye/domaine bağlanır.
curl -X POST "https://api.linkqink.com/api/shortlinks/quick" \
-H "Authorization: Bearer $LINKQINK_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://uzun-adres.com/kampanya/2026"}'{
"id": "clx0abc123",
"slug": "Ab3xK9Zq",
"shortUrl": "https://gg0go.com/Ab3xK9Zq",
"targetTemplate": "https://uzun-adres.com/kampanya/2026",
"status": "active",
"domain": {
"domain": "gg0go.com"
},
"createdAt": "2026-08-20T10:00:00.000Z"
}Her oluşturma ve detay yanıtı kullanıma hazır bir shortUrl alanı döner — domain ve slug'ı kendiniz birleştirmenize gerek yok.
Yanıt & Hatalar
Başarılı yanıtlar doğrudan JSON nesnesi/dizisi döner. Hatalarda error alanı ve uygun HTTP durum kodu döner.
{
"error": "Unauthorized"
}| 200 / 201 | Başarılı |
| 400 | Geçersiz istek / doğrulama hatası |
| 401 | Token yok veya geçersiz |
| 404 | Kayıt bulunamadı |
| 410 | Link devre dışı |
| 500 | Sunucu hatası |
Dinamik Parametreler
Hedef şablonda {ad} biçiminde yer tutucular kullanabilirsiniz. Ziyaretçi kısa linke bir query parametresiyle geldiğinde bu değer şablona yerleştirilir. Böylece tek bir sabit kısa link, her ziyaret için farklı bir hedefe yönlenir.
Şablon (oluştururken)
https://www.domain.com/#/?action=reset_password&rdcode={rdcode}
Ziyaret edilen kısa link
https://gg0go.com/sifre-sifirla?rdcode=ABC123
Yönlendirilen hedef
https://www.domain.com/#/?action=reset_password&rdcode=ABC123
Güvenlik: proje değişkenleri (ör. {BASE_URL}) her zaman gelen query parametrelerinden önceliklidir; sabit değişkenler dışarıdan ezilemez.
CORS & Limitler
- •CORS: Tüm
/apiuçları tarayıcıdan çağrılabilir (Access-Control-Allow-Origin: *). Token header ile gönderildiğinden ve cookie kullanılmadığından bu güvenlidir. Yine de token'ı istemci tarafında ifşa etmeyin — gizli işlemleri sunucudan çağırın. - •Preflight:
OPTIONSistekleri otomatik yanıtlanır. - •Hız limiti: Şu an katı bir istek limiti yoktur; adil kullanım beklenir. Yüksek hacimli entegrasyonlar için istekleri toplu/aralıklı gönderin.
- •Token kapsamı: Bir token, onu oluşturan kullanıcının tüm projelerine erişir. Her entegrasyon için ayrı token oluşturun; sızıntı durumunda ilgili token'ı silin.
Endpoint Referansı
Public = kimlik gerektirmez · Token = Bearer veya x-api-key gerekir.
| Method | Endpoint | Açıklama | Kimlik |
|---|---|---|---|
| GET | /api/health | Bağlantı ve token doğrulama testi | Public |
| POST | /api/shortlinks/quick | Tek adımda kısa link oluştur (otomatik slug) | Token |
| GET | /api/shortlinks/quick | Varsayılan projenin linklerini listele | Token |
| GET | /api/projects | Projeleri listele | Token |
| POST | /api/projects | Yeni proje oluştur | Token |
| GET | /api/projects/:id | Proje detayı | Token |
| PATCH | /api/projects/:id | Proje güncelle (base URL / değişken) | Token |
| GET | /api/projects/:id/domains | Projeye ait domainler | Token |
| GET | /api/projects/:id/shortlinks | Projedeki linkleri listele | Token |
| POST | /api/projects/:id/shortlinks | Şablonlu kısa link oluştur | Token |
| GET | /api/projects/:id/variables | Proje değişkenleri | Token |
| POST | /api/projects/:id/variables | Değişken ekle | Token |
| PATCH | /api/projects/:id/variables/:key | Değişken güncelle | Token |
| DELETE | /api/projects/:id/variables/:key | Değişken sil | Token |
| GET | /api/shortlinks/:id | Link detayı | Token |
| PATCH | /api/shortlinks/:id | Link güncelle | Token |
| DELETE | /api/shortlinks/:id | Link sil | Token |
| GET | /api/shortlinks/:id/clicks | Tıklama olayları (?stats=1, ?hours=48) | Token |
| GET | /api/shortlinks/:id/analytics | Link analitiği | Token |
| GET | /api/analytics/project/:id | Proje tıklama istatistikleri | Token |
Örnek İşlemler
GET Projeleri listele
Link oluşturmadan önce hedef proje ve domain kimliklerini buradan alın.
curl -X GET "https://api.linkqink.com/api/projects" \
-H "Authorization: Bearer $LINKQINK_TOKEN"POST Şablonlu (parametreli) link oluştur
{rdcode} yer tutucusu, ziyaretçinin URL'sindeki ?rdcode= değerinden doldurulur.
curl -X POST "https://api.linkqink.com/api/projects/PROJECT_ID/shortlinks" \
-H "Authorization: Bearer $LINKQINK_TOKEN" \
-H "Content-Type: application/json" \
-d '{"slug":"sifre-sifirla","name":"Şifre sıfırlama","targetTemplate":"https://www.domain.com/#/?action=reset_password&rdcode={rdcode}","domainId":"DOMAIN_ID"}'GET Tıklama istatistikleri
Son 48 saatteki tıklama özetini alın (?stats=1&hours=48).
curl -X GET "https://api.linkqink.com/api/shortlinks/LINK_ID/clicks?stats=1&hours=48" \
-H "Authorization: Bearer $LINKQINK_TOKEN"{
"hasMore": false,
"nextCursor": null,
"stats": {
"total": 1280,
"last24h": 96,
"prev24h": 74,
"last7d": 512,
"prev7d": 430,
"last30d": 1280,
"hourly": [
{
"hour": "2026-08-20T09:00:00.000Z",
"count": 12
}
]
}
}GET Detaylı analitik kırılımı
Ülke, referer, cihaz, tarayıcı, işletim sistemi, dil ve IP bazında dağılım artı trafik kalitesi (bot oranı). range =24h · 7d · 30d · all, ?bots=1 botları dahil eder.
curl -X GET "https://api.linkqink.com/api/shortlinks/LINK_ID/analytics?range=7d" \
-H "Authorization: Bearer $LINKQINK_TOKEN"{
"range": "7d",
"total": 512,
"byCountry": [
{
"key": "TR",
"count": 340
},
{
"key": "DE",
"count": 88
}
],
"byDevice": [
{
"key": "mobile",
"count": 300
},
{
"key": "desktop",
"count": 212
}
],
"byBrowser": [
{
"key": "Chrome",
"count": 410
}
],
"byOS": [
{
"key": "Android",
"count": 250
}
],
"byReferer": [
{
"key": "instagram.com",
"count": 190
}
],
"byLanguage": [
{
"key": "tr",
"count": 360
}
],
"byIp": [
{
"key": "203.0.113.5",
"count": 4,
"isBot": false
}
],
"quality": {
"total": 512,
"uniqueIps": 430,
"botCount": 18,
"repeatIps": 52
}
}