TikoAPI
GELİŞTİRİCİ DOKÜMANI

API Dokümantasyonu

WhatsApp oturumunuzu Tiko WhatsApp API'ye bağlayın; metin, görsel ve doküman mesajları gönderin; webhook ile gelen mesajları kendi sisteminize aktarın. Bu sayfadaki örnekler canlı base URL üzerinden hazırlanmıştır.

Giriş

BASE URL · https://whatsapp.tikoapi.com

Tiko WhatsApp API REST tabanlıdır, JSON gövdeleriyle çalışır ve standart HTTP durum kodları döndürür. Mesaj gönderme endpointleri için panelden aldığınız API key gereklidir.

1. Hesap oluşturPanelden kayıt olun ve WhatsApp numaranızı ekleyin.
2. Oturumu bağlaQR kodu telefonunuzla tarayıp numara oturumunu aktif edin.
3. Mesaj gönderREST isteğiyle metin, görsel veya doküman mesajınızı iletin.

Kimlik doğrulama

Public API isteklerinde Authorization: Bearer YOUR_API_KEY header'ı kullanılır. Panel endpointleri ise panel girişinden dönen oturum token'ı ile çalışır.

bash · sağlık kontrolü
curl https://whatsapp.tikoapi.com/health

Oturum

Her WhatsApp numarasının panelde görünen bir sessionId değeri vardır. API key panelde seçilen numaraya bağlı oluşturulur.

GET/v1/sessions/YOUR_SESSION_ID/status
POST/v1/sessions/YOUR_SESSION_ID/start
GET/v1/sessions/YOUR_SESSION_ID/qr
bash · oturum durumu
curl https://whatsapp.tikoapi.com/v1/sessions/YOUR_SESSION_ID/status \
  -H "Authorization: Bearer YOUR_API_KEY"

Mesajlar

POST/v1/messages/text

Bağlı WhatsApp oturumunuzdan tek alıcıya metin mesajı gönderir.

ParametreTipAçıklama
sessionIdstringAPI key'in bağlı olduğu numara. Boş bırakılırsa key kapsamındaki numara kullanılır.
tozorunlustringÜlke koduyla telefon numarası. Örn. 905xxxxxxxxx.
textzorunlustringGönderilecek mesaj metni.
bash · metin mesajı
curl -X POST https://whatsapp.tikoapi.com/v1/messages/text \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "YOUR_SESSION_ID",
    "to": "905xxxxxxxxx",
    "text": "Merhaba, Tiko WhatsApp API aktif."
  }'
POST/v1/messages/image

Public olarak erişilebilir bir görsel URL'sini WhatsApp mesajı olarak gönderir.

ParametreTipAçıklama
sessionIdstringMesajın gönderileceği WhatsApp oturumu. Boş bırakılırsa API key kapsamındaki numara kullanılır.
tozorunlustringAlıcı telefon numarası.
imageUrlzorunlustringCredentials içermeyen, public hosta ait mutlak HTTPS görsel adresi.
captionstringGörsel alt yazısı.
POST/v1/messages/document

Public olarak erişilebilir bir doküman URL'sini WhatsApp mesajı olarak gönderir. Başarılı istek 202 durumuyla kuyruğa alınır.

ParametreTipAçıklama
sessionIdstringMesajın gönderileceği WhatsApp oturumu. Boş bırakılırsa API key kapsamındaki numara kullanılır.
tozorunlustringAlıcı telefon numarası.
documentUrlzorunlustringCredentials içermeyen, public hosta ait mutlak HTTPS doküman adresi.
captionstringDokümanla birlikte gönderilecek isteğe bağlı açıklama.

Dosya adı URL path'inin son bölümünden güvenli biçimde üretilir. Dosyayı sunan origin Content-Disposition döndürüyorsa filename değerini URL'deki dosya adıyla uyumlu tutun. Bilinmeyen dosya uzantıları application/octet-stream olarak gönderilir.

Görsel ve doküman URL'lerinde localhost, .local alanları ile literal private/reserved IP hedefleri kabul edilmez.

bash · doküman mesajı
curl -X POST https://whatsapp.tikoapi.com/v1/messages/document \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "YOUR_SESSION_ID",
    "to": "905xxxxxxxxx",
    "documentUrl": "https://cdn.example.com/docs/teklif.pdf",
    "caption": "Teklif dosyanız"
  }'
json · yanıt 202
{
  "id": 4821,
  "status": "queued",
  "chatId": "905xxxxxxxxx@c.us"
}

Anket mesajı

POST/v1/messages/poll

WhatsApp'ta tıklanarak seçilen bir anket gönderir. Müşterinin seçimi, verdiğiniz seçenek id değeriyle webhook'a gelir. Başarılı istek 202 ile kuyruğa alınır ve paket mesaj sayacına bir mesaj olarak yazılır.

ParametreTipAçıklama
sessionIdstringMesajın gönderileceği WhatsApp oturumu. Boş bırakılırsa API key kapsamındaki numara kullanılır.
tozorunlustringAlıcı telefon numarası.
questionzorunlustringAnket sorusu, 1-255 karakter.
optionszorunluarray2-12 seçenek. Her seçenek metin ya da { "id", "title" } nesnesidir; metin verilirse id başlıkla aynı olur. Başlıklar ve ID'ler benzersiz, 1-100 karakter olmalı.
maxAnswersnumberSeçilebilecek en fazla seçenek sayısı. Varsayılan 1.
bash · anket mesajı
curl -X POST https://whatsapp.tikoapi.com/v1/messages/poll \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "YOUR_SESSION_ID",
    "to": "905xxxxxxxxx",
    "question": "Randevunuzu onaylıyor musunuz?",
    "options": [
      { "id": "confirm", "title": "Evet, onaylıyorum" },
      { "id": "reschedule", "title": "Başka gün" }
    ]
  }'

Seçim messages.received olayıyla gelir: data.message.type değeri poll_vote olur, data.message.poll.messageId anket gönderim yanıtındaki id ile eşleşir ve poll.selected seçilen seçenekleri id ile taşır. Seçim kaldırılırsa selected boş dizi gelir.

json · webhook: anket seçimi
{
  "event": "messages.received",
  "data": {
    "message": {
      "direction": "inbound",
      "type": "poll_vote",
      "phone": "905xxxxxxxxx",
      "poll": {
        "type": "vote",
        "messageId": "ANKET_GONDERIM_ID",
        "question": "Randevunuzu onaylıyor musunuz?",
        "status": "resolved",
        "selected": [ { "id": "confirm", "title": "Evet, onaylıyorum" } ]
      }
    }
  }
}

Yazıyor göstergesi

POST/v1/messages/typing

Alıcının WhatsApp ekranında "yazıyor…" göstergesini açar veya kapatır. Gösterge mesaj gönderildiğinde ya da stop ile kapanır; WhatsApp bir süre sonra kendiliğinden de kaldırır. Mesaj sayacına yazılmaz; numara başına dakikada 120 istek sınırı vardır.

ParametreTipAçıklama
sessionIdstringKullanılacak WhatsApp oturumu. Boş bırakılırsa API key kapsamındaki numara kullanılır.
tozorunlustringAlıcı telefon numarası.
actionstringstart (varsayılan) veya stop.
bash · yazıyor göstergesi
curl -X POST https://whatsapp.tikoapi.com/v1/messages/typing \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "sessionId": "YOUR_SESSION_ID", "to": "905xxxxxxxxx", "action": "start" }'
GET/v1/conversations
GET/v1/messages

CRM'iniz ticket kaydını kendi tarafında tutarken Tiko'dan ham konuşma akışını okuyabilir. source alanı customer, api veya manual döner; böylece telefon/WhatsApp Web üzerinden atılan manuel mesajlar API çıkışlarından ayrılır.

QueryTipAçıklama
phonestringTelefon numarasına göre konuşma veya mesaj filtreler.
chatIdstringTek WhatsApp konuşmasını okumak için kullanılır.
directionstringinbound veya outbound.
sourcestringcustomer, api veya manual.
sincedatetimeBelirli tarihten sonraki mesajları getirir.
bash · konuşma akışı
curl https://whatsapp.tikoapi.com/v1/messages?phone=905xxxxxxxxx \
  -H "Authorization: Bearer YOUR_API_KEY"

Panel API

Kullanıcı paneli; giriş, API key yönetimi ve webhook ayarları için aynı API üzerinde çalışır.

POST/v1/auth/registerPanel hesabı ve tenant oluşturur.
POST/v1/auth/loginPanel oturumu açar.
POST/v1/auth/forgot-passwordŞifre sıfırlama isteği alır.
GET/v1/panel/api-keysAPI key listesini döndürür.
POST/v1/panel/api-keysYeni API key oluşturur ve tam değeri bir kez gösterir.
DELETE/v1/panel/api-keys/{id}Aktif API key'i pasifleştirir.
GET/v1/panel/sessionsPaneldeki WhatsApp telefon oturumlarını listeler.
POST/v1/panel/sessionsYeni telefon oturumu oluşturur; QR ile bağlanmaya hazır hale gelir.

Webhook

Gelen mesajları veya mesaj durumlarını sisteminize aktarmak için panelden HTTPS webhook adresi tanımlayın.

GET/v1/panel/webhooksWebhook adreslerini listeler.
POST/v1/panel/webhooksYeni webhook adresi ekler.
POST/v1/panel/webhooks/testKayıtlı webhook adresine test event gönderir.
DELETE/v1/panel/webhooks/{id}Webhook adresini siler.
GET/v1/panel/webhook-deliveriesCRM webhook teslimat geçmişini ve hata durumlarını listeler.

Webhook isteklerinde X-Tiko-Event, X-Tiko-Delivery ve secret tanımlıysa X-Tiko-Signature header'ları gönderilir. İmza formatı sha256=... şeklindedir.

json · örnek payload
{
  "event": "messages.received",
  "timestamp": "2026-06-01T04:42:00.000Z",
  "tenant": { "slug": "tiko-demo" },
  "session": { "id": "wa-905...", "phone": "905..." },
  "data": {
    "message": {
      "direction": "inbound",
      "source": "customer",
      "phone": "905xxxxxxxxx",
      "text": "Merhaba",
      "status": "received"
    }
  }
}

Hata kodları

KodAnlam
200 / 201İstek başarılı.
400Eksik veya hatalı gövde. Geçersiz medya URL'leri INVALID_MEDIA_URL, hatalı anket INVALID_POLL_OPTIONS / INVALID_POLL_QUESTION / INVALID_POLL_MAX_ANSWERS, hatalı gösterge isteği INVALID_TYPING_ACTION döndürür.
401Geçersiz veya eksik token/API key.
404Kaynak bulunamadı.
429İstek sınırı aşıldı; Retry-After header'ındaki süre kadar bekleyin.
500Sunucu tarafında beklenmeyen hata.