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 ve oturum işlemleri için panelden aldığınız API key gereklidir.
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.
curl https://whatsapp.tikoapi.com/health
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.
sessionId, 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.
| Endpoint | Açıklama |
|---|---|
status | Oturumun bağlı olup olmadığını ve bağlı hesap bilgisini döndürür. |
start | Oturumu başlatır; bağlantı yoksa QR akışına hazırlar. |
restart | WhatsApp oturumunu yeniden başlatır. |
stop | Bağlı cihaz oturumunu sonlandırır. |
qr | QR görselini image/png olarak döndürür. |
Mesajlar
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.
| Parametre | Tip | Açıklama |
|---|---|---|
sessionId | string | Panelde görünen oturum kimliği. API key bir numaraya bağlıysa bu oturum kullanılmalıdı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." }'
{ "id": 4821, "status": "queued", "chatId": "905xxxxxxxxx@c.us" }
Public olarak erişilebilen 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şilebilen 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" }'
Konuşma okuma
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.
| 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"
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.
| Olay | Tetiklenme |
|---|---|
messages.received | Müşteriden yeni mesaj alındığında. |
messages.upsert | Mesaj kaydı oluşturulduğunda veya güncellendiğinde. |
messages.update | Mesaj durumu güncellendiğinde. |
message.sent | API üzerinden gönderilen mesaj kuyruğa alındığında. |
session.status | WhatsApp oturum bağlantı durumu değiştiğinde. |
| Header | Açıklama |
|---|---|
X-Tiko-Event | Gönderilen olay adı. |
X-Tiko-Delivery | Tekil webhook teslimat kimliği. |
X-Tiko-Session-Id | Olayın kaynak numarasına ait public sessionId değeri. |
X-Tiko-Signature | Secret tanımlıysa sha256=... formatında HMAC imzası. |
{ "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.
/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}API key'i pasifleştirir./v1/panel/sessionsWhatsApp numaralarını listeler./v1/panel/sessionsYeni telefon oturumu oluşturur./v1/panel/webhooks?sessionId={publicId}Seçili numaranın webhook adreslerini listeler./v1/panel/webhookssessionId, url, secret ve events ile seçili numaraya endpoint ekler veya aynı URL'yi günceller./v1/panel/webhooks/testsessionId, webhookId ve opsiyonel event ile seçili numara metası taşıyan test olayı gönderir./v1/panel/webhooks/{id}?sessionId={publicId}Seçili numaranın webhook adresini siler./v1/panel/webhook-deliveries?sessionId={publicId}Seçili numaranın webhook teslimat geçmişini listeler.Hata kodları
| Kod | Anlam |
|---|---|
200 | Başarılı okuma isteği. |
202 | İstek kabul edildi; mesaj veya oturum işlemi işleniyor. |
400 | Eksik veya geçersiz gövde. Örn. MISSING_TO_OR_TEXT, INVALID_MEDIA_URL, INVALID_POLL_OPTIONS veya INVALID_TYPING_ACTION. |
401 | Geçersiz veya eksik API key. |
402 | Aktif paket yok, paket süresi dolmuş veya mesaj limiti dolmuş. |
403 | API key bu WhatsApp oturumu için yetkili değil. |
404 | Oturum 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 →