Giriş
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.
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.
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.
curl https://whatsapp.tikoapi.com/v1/sessions/YOUR_SESSION_ID/status \ -H "Authorization: Bearer YOUR_API_KEY"
Mesajlar
Bağlı WhatsApp oturumunuzdan tek alıcıya metin mesajı gönderir.
| Parametre | Tip | Açıklama |
|---|---|---|
sessionId | string | API key'in bağlı olduğu numara. Boş bırakılırsa key kapsamındaki numara kullanılır. |
tozorunlu | string | Ülke koduyla telefon numarası. Örn. 905xxxxxxxxx. |
textzorunlu | string | Gönderilecek mesaj metni. |
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." }'
Public olarak erişilebilir bir görsel URL'sini WhatsApp mesajı olarak gönderir.
| Parametre | Tip | Açıklama |
|---|---|---|
sessionId | string | Mesajın gönderileceği WhatsApp oturumu. Boş bırakılırsa API key kapsamındaki numara kullanılır. |
tozorunlu | string | Alıcı telefon numarası. |
imageUrlzorunlu | string | Credentials içermeyen, public hosta ait mutlak HTTPS görsel adresi. |
caption | string | Görsel alt yazısı. |
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.
| Parametre | Tip | Açıklama |
|---|---|---|
sessionId | string | Mesajın gönderileceği WhatsApp oturumu. Boş bırakılırsa API key kapsamındaki numara kullanılır. |
tozorunlu | string | Alıcı telefon numarası. |
documentUrlzorunlu | string | Credentials içermeyen, public hosta ait mutlak HTTPS doküman adresi. |
caption | string | Dokü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.
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" }'
{ "id": 4821, "status": "queued", "chatId": "905xxxxxxxxx@c.us" }
Anket mesajı
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.
| Parametre | Tip | Açıklama |
|---|---|---|
sessionId | string | Mesajın gönderileceği WhatsApp oturumu. Boş bırakılırsa API key kapsamındaki numara kullanılır. |
tozorunlu | string | Alıcı telefon numarası. |
questionzorunlu | string | Anket sorusu, 1-255 karakter. |
optionszorunlu | array | 2-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ı. |
maxAnswers | number | Seçilebilecek en fazla seçenek sayısı. Varsayılan 1. |
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.
{ "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
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.
| Parametre | Tip | Açıklama |
|---|---|---|
sessionId | string | Kullanılacak WhatsApp oturumu. Boş bırakılırsa API key kapsamındaki numara kullanılır. |
tozorunlu | string | Alıcı telefon numarası. |
action | string | start (varsayılan) veya stop. |
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" }'
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.
| Query | Tip | Açıklama |
|---|---|---|
phone | string | Telefon numarasına göre konuşma veya mesaj filtreler. |
chatId | string | Tek WhatsApp konuşmasını okumak için kullanılır. |
direction | string | inbound veya outbound. |
source | string | customer, api veya manual. |
since | datetime | Belirli tarihten sonraki mesajları getirir. |
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.
/v1/auth/registerPanel hesabı ve tenant oluşturur./v1/auth/loginPanel oturumu açar./v1/auth/forgot-passwordŞifre sıfırlama isteği alır./v1/panel/api-keysAPI key listesini döndürür./v1/panel/api-keysYeni API key oluşturur ve tam değeri bir kez gösterir./v1/panel/api-keys/{id}Aktif API key'i pasifleştirir./v1/panel/sessionsPaneldeki WhatsApp telefon oturumlarını listeler./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.
/v1/panel/webhooksWebhook adreslerini listeler./v1/panel/webhooksYeni webhook adresi ekler./v1/panel/webhooks/testKayıtlı webhook adresine test event gönderir./v1/panel/webhooks/{id}Webhook adresini siler./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.
{ "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ı
| Kod | Anlam |
|---|---|
200 / 201 | İstek başarılı. |
400 | Eksik 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. |
401 | Geçersiz veya eksik token/API key. |
404 | Kaynak bulunamadı. |
429 | İstek sınırı aşıldı; Retry-After header'ındaki süre kadar bekleyin. |
500 | Sunucu tarafında beklenmeyen hata. |