Tiko®
GELİŞTİRİCİ

API Dokümantasyonu

WhatsApp numaranızı panele bağlayın, API key oluşturun ve tek bir REST API ile metin, görsel veya doküman mesajı gönderin. Webhook'larla gelen mesajları ve durum olaylarını kendi sisteminize aktarın.

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 ve oturum işlemleri için panelden aldığınız API key gereklidir.

GEThttps://whatsapp.tikoapi.com/health

Kimlik doğrulama

API key'inizi panelden, kullanacağınız WhatsApp numarasını seçerek oluşturun. Public API isteklerinde Authorization: Bearer YOUR_API_KEY header'ı kullanılır. API key'i istemci tarafında veya mobil uygulama içinde paylaşmayın.

bash · sağlık kontrolükopyala
curl https://whatsapp.tikoapi.com/health
bash · yetkili istekkopyala
curl https://whatsapp.tikoapi.com/v1/sessions/YOUR_SESSION_ID/status \
  -H "Authorization: Bearer YOUR_API_KEY"

Hızlı başlangıç

İlk mesaj için önce panelden hesap oluşturun, WhatsApp numaranızı QR ile bağlayın, o numaraya bağlı bir API key üretin ve aşağıdaki metin mesajı isteğini gönderin.

1. Numara eklePanelden WhatsApp numaranızı oluşturun ve QR kod ile bağlayın.
2. API key alAPI key'i ilgili numaraya bağlı oluşturun; tam değer yalnızca bir kez gösterilir.
3. Mesaj göndersessionId, alıcı numarası ve mesaj metniyle public API'ye istek atın.

Oturumlar

Her WhatsApp numarasının panelde görünen bir sessionId değeri vardır. API key bir numaraya bağlıysa isteklerde yalnızca o oturum kullanılabilir.

GET/v1/sessions/YOUR_SESSION_ID/status
POST/v1/sessions/YOUR_SESSION_ID/start
POST/v1/sessions/YOUR_SESSION_ID/restart
POST/v1/sessions/YOUR_SESSION_ID/stop
GET/v1/sessions/YOUR_SESSION_ID/qr
EndpointAçıklama
statusOturumun bağlı olup olmadığını ve bağlı hesap bilgisini döndürür.
startOturumu başlatır; bağlantı yoksa QR akışına hazırlar.
restartWhatsApp oturumunu yeniden başlatır.
stopBağlı cihaz oturumunu sonlandırır.
qrQR görselini image/png olarak döndürür.

Mesajlar

POST/v1/messages/text

Bağlı WhatsApp oturumunuzdan tek alıcıya metin mesajı gönderir. Başarılı istekler işlenmek üzere kuyruğa alınır ve 202 yanıtı döner.

ParametreTipAçıklama
sessionIdstringPanelde görünen oturum kimliği. API key bir numaraya bağlıysa bu oturum kullanılmalıdır.
tozorunlustringÜlke koduyla telefon numarası. Örn. 905xxxxxxxxx.
textzorunlustringGönderilecek mesaj metni.
bash · metin mesajıkopyala
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."
  }'
json · yanıt 202
{
  "id": 4821,
  "status": "queued",
  "chatId": "905xxxxxxxxx@c.us"
}
POST/v1/messages/image

Public olarak erişilebilen 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şilebilen 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ıkopyala
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ıkopyala
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östergesikopyala
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" }'

Konuşma okuma

GET/v1/conversations
GET/v1/messages

CRM veya destek sisteminiz konuşmaları kendi tarafında işlerken Tiko'dan ham konuşma akışını okuyabilir. source alanı customer, api veya manual olarak döner.

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 · mesaj geçmişikopyala
curl "https://whatsapp.tikoapi.com/v1/messages?phone=905xxxxxxxxx" \
  -H "Authorization: Bearer YOUR_API_KEY"

Webhook

Her WhatsApp numarası için panelde ayrı HTTPS webhook adresleri tanımlanır. Bir endpoint yalnız seçildiği numaradan çıkan olayları alır; aynı URL farklı numaralara ayrı olay seçimleriyle kaydedilebilir. Secret girildiyse istekler X-Tiko-Signature: sha256=... header'ı ile imzalanır.

OlayTetiklenme
messages.receivedMüşteriden yeni mesaj alındığında.
messages.upsertMesaj kaydı oluşturulduğunda veya güncellendiğinde.
messages.updateMesaj durumu güncellendiğinde.
message.sentAPI üzerinden gönderilen mesaj kuyruğa alındığında.
session.statusWhatsApp oturum bağlantı durumu değiştiğinde.
HeaderAçıklama
X-Tiko-EventGönderilen olay adı.
X-Tiko-DeliveryTekil webhook teslimat kimliği.
X-Tiko-Session-IdOlayın kaynak numarasına ait public sessionId değeri.
X-Tiko-SignatureSecret tanımlıysa sha256=... formatında HMAC imzası.
json · örnek payload
{
  "event": "messages.received",
  "timestamp": "2026-06-01T04:42:00.000Z",
  "tenant": { "slug": "tiko-demo" },
  "session": { "id": "YOUR_SESSION_ID", "phone": "905xxxxxxxxx" },
  "data": {
    "message": {
      "direction": "inbound",
      "source": "customer",
      "phone": "905xxxxxxxxx",
      "text": "Merhaba",
      "status": "received"
    }
  }
}

Panel API

Panel, giriş, API key yönetimi, WhatsApp numarası ve webhook ayarları için aynı API üzerinde çalışır. Bu endpointler panel oturum token'ı ile kullanılı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}API key'i pasifleştirir.
GET/v1/panel/sessionsWhatsApp numaralarını listeler.
POST/v1/panel/sessionsYeni telefon oturumu oluşturur.
GET/v1/panel/webhooks?sessionId={publicId}Seçili numaranın webhook adreslerini listeler.
POST/v1/panel/webhookssessionId, url, secret ve events ile seçili numaraya endpoint ekler veya aynı URL'yi günceller.
POST/v1/panel/webhooks/testsessionId, webhookId ve opsiyonel event ile seçili numara metası taşıyan test olayı gönderir.
DELETE/v1/panel/webhooks/{id}?sessionId={publicId}Seçili numaranın webhook adresini siler.
GET/v1/panel/webhook-deliveries?sessionId={publicId}Seçili numaranın webhook teslimat geçmişini listeler.

Hata kodları

KodAnlam
200Başarılı okuma isteği.
202İstek kabul edildi; mesaj veya oturum işlemi işleniyor.
400Eksik veya geçersiz gövde. Örn. MISSING_TO_OR_TEXT, INVALID_MEDIA_URL, INVALID_POLL_OPTIONS veya INVALID_TYPING_ACTION.
401Geçersiz veya eksik API key.
402Aktif paket yok, paket süresi dolmuş veya mesaj limiti dolmuş.
403API key bu WhatsApp oturumu için yetkili değil.
404Oturum veya kayıt bulunamadı.
409Çakışan kayıt. Örn. aynı WhatsApp numarası zaten eklenmiş.
429İstek sınırı aşıldı; Retry-After header'ındaki süre kadar bekleyin.

Yardıma mı ihtiyacınız var? Ekibimize yazın →