Örneklerde application/json kullanılır. Telefonla bağlanan WhatsApp = integration "QR" (eski WHATSAPP-BAILEYS), WhatsApp Business API = "META" (eski WHATSAPP-BUSINESS). Destek oturum türüne göre değişir; yalnızca izinli oturumlara erişilebilir. Instance kapsamlı API anahtarında instanceName path parametresi zorunlu değildir.
GET/api/wafixer/instance/fetchInstancesAPI key / Session
Anahtar veya kullanıcı kapsamındaki oturumları listeler.
Query
- instanceName?: string
- instanceId?: string
- Not: instanceName URL içindeki oturum adıdır; instanceId veritabanı kimliğidir. Boşluk ve Türkçe karakterleri encodeURIComponent ile kodlayın.
POST/api/wafixer/instance/createAPI key / Session
Yeni oturum oluşturur. Meta için hesap, numara ve token bilgileri kayıttan önce doğrulanır.
Body
- instanceName: string (Meta için 2-255 karakter)
- integration: "QR" | "META" | "WAFIXER" (eski WHATSAPP-BAILEYS / WHATSAPP-BUSINESS değerleri de kabul edilir)
- qrcode?: boolean (telefonla bağlanan WhatsApp oturumu)
- number: string (Meta için zorunlu Phone Number ID; telefonla bağlanan WhatsApp için isteğe bağlı telefon)
- businessId: string (Meta için zorunlu WABA ID)
- token: string (Meta için zorunlu erişim token’ı)
- appSecret?: string (Meta; numara müşterinin kendi Meta uygulamasıyla bağlıysa o uygulamanın 32 karakterlik App Secret değeri)
Response
- { instance, hash, settings, webhook?, websocket?, qrcode?, ... }
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"instanceName": "Destek",
"integration": "META",
"number": "123456789012345",
"businessId": "987654321098765",
"token": "META_SYSTEM_USER_ACCESS_TOKEN"
}
- Not: Oturum açmış kullanıcı veya global kapsamlı wfx_ anahtar gerekir. instance kapsamlı anahtar ve embed token oluşturma yapamaz; kanal kotası uygulanır.
- Not: META / WHATSAPP-BUSINESS için number ve businessId farklı Meta kimlikleridir (8-20 rakam). Görünen telefon numarasını number alanına yazmayın.
- Not: Meta token’ı 20-255 karakter olmalı; geçerlilik, süre, whatsapp_business_messaging ve whatsapp_business_management izinleri, WABA-numara eşleşmesi ve telefon doğrulaması kontrol edilir.
- Not: Meta cevabındaki instance.meta doğrulanan numarayı ve kimlikleri içerir. instance.webhookWaBusiness Callback URL, instance.accessTokenWaBusiness ise Meta Verify token değeridir. Bu alanları dışarıya açık istemcilerde paylaşmayın.
- Not: integration açıkça gönderilmelidir. QR, META ve WAFIXER kabul edilir; eski WHATSAPP-BAILEYS ve WHATSAPP-BUSINESS değerleri aynı kanallara çözülür. Kayıtta kanal tipi kanonik olarak saklanır.
- Not: instance kapsamlı wfx_ anahtarında instanceName path parametresi opsiyoneldir; anahtarın bağlı olduğu oturum kullanılır.
- Not: WAFIXER cevabındaki instance.webhookWafixer, dış sistemin bu oturuma olay göndereceği adrestir ve oturuma özgü token taşır; sonradan instance/wafixerWebhook ile yeniden alınabilir.
- Not: Webhook müşterinin kendi Meta uygulamasında kuruluysa appSecret gönderin: Meta bildirimleri o uygulamanın sırrıyla imzalar, sır yoksa gelen mesajlar 401 ile reddedilir. Sır token’ın uygulamasıyla Meta’da doğrulanır, şifreli saklanır ve hiçbir yanıtta dönmez; instance.meta.hasAppSecret kayıt durumunu gösterir.
GET/api/wafixer/instance/connectionState/{instanceName}API key / Session
Oturumun bağlantı durumunu döndürür. Instance kapsamlı anahtarda {instanceName} atlanabilir.
Response
- { instance: { instanceName, state, reconnect } }
- Not: reconnect yalnız telefonla bağlanan WhatsApp oturumunda ve bağlantı açık değilken dolar: { phase, attempt, maxAttempts, nextAttemptAt }. phase=reconnecting otomatik denemenin sürdüğünü (state connecting), phase=awaiting_qr eşli olmayan oturumda üç denemenin bittiğini ve telefonla yeniden bağlanana kadar bağlanılmayacağını gösterir. instance/connect çağrısı sayacı sıfırlar.
PATCH/api/wafixer/instance/updateMeta/{instanceName}API key / Session
Destek: Business API
Mevcut oturumun Phone Number ID / WABA eşleşmesini Meta’dan doğrulayarak düzeltir.
Body
- phoneNumberId: string (8-20 rakam)
- businessId: string (8-20 rakam)
Response
- { instanceName, phoneNumberId, businessId, displayPhoneNumber, changed }
- Not: Seçilen Meta telefonu mevcut oturumun telefonuyla aynı olmalıdır. Erişim token’ını değiştirmez.
GET/api/wafixer/instance/metaWebhook/{instanceName}API key / Session
Destek: Business API
WABA uygulama aboneliğini, okunabiliyorsa etkin Callback URL’yi ve yakın webhook gözlemlerini getirir.
Response
- { appId, businessId, phoneNumberId, subscribed, apps, callback, receiver }
- Not: subscribed=true WABA uygulama aboneliğini belirtir; Meta’daki messages alanı ve Callback URL ayrıca doğru olmalıdır. callback.available=false bilgiyi okuyamadığımızı gösterir.
POST/api/wafixer/instance/metaWebhook/{instanceName}API key / Session
Destek: Business API
Kayıtlı token’ın uygulamasını WABA’ya abone eder ve sonucu yeniden kontrol eder.
Body
- appId: string (beklenen Meta App ID, 8-20 rakam)
Response
- { appId, businessId, phoneNumberId, subscribed, apps, changed }
- Not: Callback URL’yi veya Meta messages alanını ayarlamaz. appId kayıtlı token’ın uygulamasıyla eşleşmelidir.
GET/api/wafixer/instance/wafixerWebhook/{instanceName}API key / Session
WAFIXER kanalı oturumuna olay gönderecek dış sistemin webhook adresini döndürür.
- Not: Yalnız integration WAFIXER olan oturumda çalışır. Olaylar bu adrese POST edilir; adres oturuma özgü token sorgu parametresi taşır, token’sız ya da yanlış token’lı istek 401 alır. Adresi dışarıya açık istemcilerde paylaşmayın.
GET/api/wafixer/instance/metaAppSecret/{instanceName}API key / Session
Destek: Business API
Oturumun webhook imzası için kayıtlı bir Meta uygulama sırrı olup olmadığını döndürür.
Response
- { instanceName, hasAppSecret, appId, available }
- Not: Sırrın değeri hiçbir zaman dönmez. available=false sır kaydının bu sunucuda henüz etkin olmadığını gösterir.
PATCH/api/wafixer/instance/metaAppSecret/{instanceName}API key / Session
Destek: Business API
Müşterinin kendi Meta uygulamasının sırrını kaydeder, değiştirir ya da kaldırır.
Body
- appSecret: string | null (32 karakter; null kayıtlı sırrı kaldırır)
Response
- { instanceName, hasAppSecret, appId, available }
- Not: Sır, kayıtlı erişim token’ının uygulamasıyla Meta’da doğrulanır; eşleşmezse 400 INVALID_APP_SECRET. Sır kayıtlıyken /webhook/meta bu oturumun bildirimlerini yalnız bu sırla imzalanmışsa kabul eder; kayıt yoksa WaFixer uygulamasının imzası beklenir.
POST/api/wafixer/message/sendText/{instanceName}API key / Session
Destek: WhatsApp / Business API
Metin mesajı gönderir.
Body
- number: string (ülke koduyla, + ve boşluk olmadan)
- text: string
- delay?: number (ms; WhatsApp)
- linkPreview?: boolean
- mentioned?: string[] (WhatsApp)
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"number": "905551112233",
"text": "Merhaba",
"linkPreview": false
}
- Not: Başarılı HTTP yanıtı alıcıya teslim veya okunma garantisi değildir; key.id ve messages.update olaylarıyla takip edin.
POST/api/wafixer/message/sendMedia/{instanceName}API key / Session
Destek: WhatsApp / Business API
Resim, video, doküman veya ses dosyası gönderir.
Body
- number: string
- mediatype: "image" | "video" | "document" | "audio"
- media: string (erişilebilir HTTP(S) URL veya ham base64)
- mimetype?: string (özellikle base64 için belirtin)
- caption?: string
- fileName?: string (base64 dokümanda zorunlu)
- delay?: number (WhatsApp)
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"number": "905551112233",
"mediatype": "image",
"media": "https://example.com/image.jpg",
"mimetype": "image/jpeg",
"caption": "Ürün fotoğrafı"
}
- Not: Dış /api/wafixer proxy’sine application/json gönderin. Bu proxy multipart dosya aktarmaz.
- Not: Meta’da ses için caption kullanılmaz. Gerçek MIME türünü ve dosya uzantısını gönderin.
POST/api/wafixer/message/sendWhatsAppAudio/{instanceName}API key / Session
Destek: WhatsApp / Business API
Ses mesajı gönderir; içerik audio alanındadır.
Body
- number: string
- audio: string (erişilebilir URL veya ham base64)
- delay?: number (WhatsApp)
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"number": "905551112233",
"audio": "https://example.com/voice.ogg"
}
- Not: Meta ses gönderiminde WAV / tarayıcı WebM içeriği gerektiğinde OGG/Opus’a çevrilir. Meta dönüştürme akışında 16 MiB sınırı uygulanır.
POST/api/wafixer/message/sendContact/{instanceName}API key / Session
Destek: WhatsApp / Business API
Kişi kartı gönderir; contact bir dizidir.
Body
- number: string
- contact: { fullName: string; phoneNumber: string; wuid?: string; organization?: string; email?: string; url?: string }[]
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"number": "905551112233",
"contact": [
{
"fullName": "Destek Ekibi",
"phoneNumber": "905559998877",
"wuid": "905559998877"
}
]
}
POST/api/wafixer/message/sendLocation/{instanceName}API key / Session
Destek: WhatsApp / Business API
Konum gönderir.
Body
- number: string
- latitude: number
- longitude: number
- name: string
- address: string
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"number": "905551112233",
"latitude": 41.0082,
"longitude": 28.9784,
"name": "Ofis",
"address": "İstanbul"
}
POST/api/wafixer/message/sendTemplate/{instanceName}API key / Session
Destek: Business API
Meta’da onaylanmış WhatsApp mesaj şablonunu gönderir.
Body
- number: string
- name: string (Meta şablon adı)
- language: string (örn. tr veya en_US)
- components?: unknown[] (şablon parametreleri)
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"number": "905551112233",
"name": "ONAYLI_SABLON_ADI",
"language": "tr",
"components": []
}
- Not: Panelde /api/me/template ile kaydedilen metin kısayollarından farklıdır. Meta’da onaylanmış ad, dil ve parametreler kullanılmalıdır.
POST/api/wafixer/chat/findChats/{instanceName}API key / Session
Destek: WhatsApp / Business API
Panelde kayıtlı sohbetleri sorgular.
Body
- where?: { remoteJid?: string; messageTimestamp?: { gte: string; lte: string } }
- limit?: number (varsayılan 50, maks 200)
- page?: number (1’den başlar)
- realtime?: boolean (okuma önbelleğini atla)
Response
- Chat[] (windowRequired, windowActive, windowStart, windowExpires, lastInboundAt dahil)
- Not: Meta (WhatsApp Business) bağlantısında 24 saatlik müşteri hizmeti penceresi kişinin son gelen mesajından sayılır: windowRequired=true, windowActive pencere açıkken true, windowExpires bitiş anıdır. Pencere kapalıyken yalnızca onaylı şablon (sendTemplate) gönderilebilir.
- Not: Telefonla bağlanan WhatsApp oturumunda böyle bir sınır yoktur: windowRequired=false, windowActive her zaman true, windowStart/windowExpires null döner.
POST/api/wafixer/chat/findMessages/{instanceName}API key / Session
Destek: WhatsApp / Business API
Panelde kayıtlı mesajları sorgular; kayıtlar messages.records içindedir.
Body
- where?: { key?: { remoteJid?: string; id?: string; fromMe?: boolean }; ... }
- limit?: number (varsayılan 50, maks 200)
- page?: number (1’den başlar)
- includeTotal?: boolean (varsayılan false)
- realtime?: boolean (okuma önbelleğini atla)
Response
- { messages: { total: number | null, pages: number | null, currentPage, records: Message[] } }
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"where": {
"key": {
"remoteJid": "905551112233@s.whatsapp.net",
"fromMe": false
}
},
"limit": 50,
"page": 1,
"includeTotal": false
}
- Not: includeTotal=false iken total/pages null döner. fromMe=false gelen, fromMe=true giden mesajdır.
- Not: Meta geçmiş gelen kutusunu bu çağrıyla çekmez; yalnızca webhook ile alınan ve panelden gönderilip kaydedilen mesajlar listelenir.
POST/api/wafixer/chat/findContacts/{instanceName}API key / Session
Destek: WhatsApp / Business API
Panelde kayıtlı kişileri sayfalı sorgular.
Body
- where?: { id?: string; remoteJid?: string; pushName?: string }
- limit?: number (varsayılan 200, maks 500)
- page?: number (1’den başlar)
POST/api/wafixer/chat/markMessageAsRead/{instanceName}API key / Session
Destek: WhatsApp
Mesajları WhatsApp’ta okundu olarak işaretler.
Body
- readMessages: { id: string; fromMe: boolean; remoteJid: string }[]
- Not: Bu endpoint mevcut Meta entegrasyonunda desteklenmez; 400 döner.
POST/api/wafixer/chat/getBase64FromMediaMessage/{instanceName}API key / Session
Destek: WhatsApp / Business API
Medya mesajının içeriğini base64 olarak döndürür.
Body
- message: object (/chat/findMessages sonucundaki tam medya mesajı)
- convertToMp4?: boolean (WhatsApp)
Response
- { mediaType, fileName?, caption?, size?, mimetype?, base64 }
- Not: Meta için yalnızca key.id yeterli değildir: messageType ve message içindeki medya bilgileri de gönderilmelidir. Panel oturumu veya embed erişiminde /api/files/{id}/raw kullanılabilir.
GET/api/wafixer/webhook/find/{instanceName}API key / Session
WaFixer’dan kendi sunucunuza giden webhook ayarını döndürür.
Response
- Webhook & { hasSigningSecret: boolean } | null
- Not: İmza sırrının değeri hiçbir zaman dönmez; yalnız tanımlı olup olmadığı görünür.
POST/api/wafixer/webhook/signingSecret/{instanceName}API key / Session
Webhook imza sırrını üretir ya da yeniler; değer yalnız bu yanıtta bir kez döner.
Response
- { hasSigningSecret: true, secret: string }
- Not: Sır tanımlıysa her teslimata X-Wafixer-Timestamp (Unix saniye) ve X-Wafixer-Signature: sha256=<hex> eklenir; imza HMAC-SHA256(sır, timestamp + "." + ham gövde) değeridir.
- Not: Alıcı imzayı ham gövdeyle sabit zamanlı karşılaştırmalı ve 5 dakikadan eski zaman damgasını reddetmeli. wafixer-sdk verifyWebhookSignature bu denetimi yapar.
- Not: Yenileme eski sırrı hemen geçersiz kılar; yeni değeri alıcıya kaydetmeden önce yenilemeyin.
DELETE/api/wafixer/webhook/signingSecret/{instanceName}API key / Session
Webhook imza sırrını kaldırır; teslimatlar yeniden imzasız gider.
Response
- { hasSigningSecret: false }
POST/api/wafixer/webhook/set/{instanceName}API key / Session
WaFixer olaylarını kendi sunucunuza iletmek için webhook ayarlar.
Body
- webhook: { enabled: boolean; url: string; events: string[]; byEvents?: boolean; base64?: boolean; headers?: Record<string,string> }
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"webhook": {
"enabled": true,
"url": "https://example.com/whatsapp-events",
"byEvents": false,
"base64": false,
"events": [
"MESSAGES_UPSERT",
"MESSAGES_UPDATE",
"SEND_MESSAGE"
]
}
}
- Not: Body webhook nesnesiyle sarılmalıdır. events: [] tüm olayları seçer; events alanını gönderin.
- Not: byEvents=true olduğunda URL’ye /messages-upsert gibi olay yolu eklenir. Meta’nın wafixer.com/webhook/meta Callback URL ayarı ayrı işlemdir.
GET/api/wafixer/websocket/find/{instanceName}API key / Session
Oturumun Socket.IO olay ayarlarını döndürür.
POST/api/wafixer/websocket/set/{instanceName}API key / Session
Harici API anahtarı bağlantıları için Socket.IO olay yayınını ayarlar.
Body
- websocket: { enabled: boolean; events: string[] }
Örnek JSON body — değerleri kendi bilgilerinizle değiştirin
{
"websocket": {
"enabled": true,
"events": [
"MESSAGES_UPSERT",
"MESSAGES_UPDATE",
"SEND_MESSAGE"
]
}
}
- Not: Body websocket nesnesiyle sarılmalıdır. events: [] tüm olayları seçer; events alanını gönderin.
- Not: Ayardaki adlar MESSAGES_UPSERT gibi büyük harflidir; dinlenen olay messages.upsert biçimindedir. enabled=true ve ilgili olay aboneliği gerekir.
- Not: Namespace oturum adıyla, anahtar kapsamı da oturumun sahibiyle eşleşmelidir.
GET/api/wafixer/settings/find/{instanceName}API key / Session
Oturum ayarlarını döndürür.
POST/api/wafixer/settings/set/{instanceName}API key / Session
Oturum ayarlarını günceller. Yazıyor ve presence ayarları telefonla bağlanan WhatsApp oturumlarında uygulanır.
Body
- rejectCall: boolean
- msgCall?: string
- groupsIgnore: boolean
- alwaysOnline: boolean
- readMessages: boolean
- readStatus: boolean
- syncFullHistory: boolean
- historySyncDays?: number | null
- typingDefaultMs?: number | null (0-120000 ms)
- Not: Mevcut ayarları GET ile alıp değiştirerek gönderin. typingDefaultMs, WhatsApp gönderimi delay taşımadığında uygulanır; 0/null kapalıdır.
POST/api/wafixer/chat/updatePresence/{instanceName}API key / Session
Destek: WhatsApp
Anlık yazıyor/ses kaydediyor durumu gönderir; sendPresence gibi beklemez.
Body
- number: string
- presence?: "composing" | "recording" | "paused"
- subscribe?: boolean
- Not: presence verilmeden subscribe=true, sohbetin presence akışına abone olur. Yazma bitince paused gönderin.
- Not: Mevcut Meta entegrasyonunda bu endpoint desteklenmez; 400 döner.