Ana içeriğe geç

// GELİŞTİRİCİ MERKEZİ

Ürününüzle bağlantıda kalın

WaFixer kullanıcı API'leriyle mesaj, oturum ve iş akışlarını kendi ürününüze bağlayın. Entegrasyon istekleri tek servis adresi olan https://wafixer.com üzerinden yapılır.

66
endpoint
3
auth tipi
22
proxy path

Panel session

WaFixer panelinde oturum açmış kullanıcı için çalışır. Örnek: GET /api/instances.

API key

Panelden oluşturulan wfx_... anahtar harici sistemlerde kullanılır.

Embed token

Seçili oturumlara okuma veya yazma erişimi verir. Süre sınırı ayarlanabilir; 0/null süresizdir.

Kimlik doğrulama

Auth

Harici entegrasyon için panelde Ayarlar → API Anahtarları bölümünden anahtar oluşturun.apikey: wfx_... veya Authorization: Bearer wfx_... kullanın. API anahtarları WhatsApp proxy yollarında geçerlidir; Session etiketli hesap yolları panel oturumu ister. Meta erişim token’ı, WaFixer API anahtarı ve webhook Verify token üç ayrı değerdir.

API key ile mesaj gönderme
curl -X POST "https://wafixer.com/api/wafixer/message/sendText/INSTANCE" \
  -H "apikey: wfx_xxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"number":"905551112233","text":"Merhaba"}'
Socket.IO ile canlı event dinleme
import { io } from "socket.io-client"

const instanceName = "Destek"
const socket = io("https://wafixer.com/" + encodeURIComponent(instanceName), {
  path: "/socket.io",
  query: { apikey: "wfx_xxxxxxxxxxxxx" },
  transports: ["websocket", "polling"],
})

socket.on("messages.upsert", ({ data }) => console.log(data))
socket.on("messages.update", ({ data }) => console.log(data))
Embed token durumu
curl "https://wafixer.com/api/embed/status" \
  -H "x-embed-token: EMBED_JWT"

WhatsApp Business API kurulumunda doğru bilgiler

Business API

Meta Developers → uygulamanız → WhatsApp → API Setup ekranından Phone number ID veWhatsApp Business account ID değerlerini kopyalayın. Oluşturma isteğindenumber Phone Number ID, businessId WABA ID olmalıdır. Başında +90 görünen telefon numarası bu kimliklerden farklıdır.

  1. Meta erişim token’ını token alanına gönderin. Token, izinler ve numara-hesap eşleşmesi kayıttan önce doğrulanır.
  2. Kayıt cevabındaki instance.webhookWaBusiness değerini Meta Webhooks → WhatsApp Business Account → Callback URL alanına yapıştırın. WaFixer.com için adres https://wafixer.com/webhook/meta.
  3. instance.accessTokenWaBusiness değerini aynı ekrandaki Verify token alanına yapıştırıp Verify and save yapın. Bu değer WBA ekleme ekranında da gösterilir.
  4. Webhook fields bölümündeki messages alanını Subscribed yapın. WABA’nın uygulamaya aboneliğini GET /api/wafixer/instance/metaWebhook/{instanceName} ile kontrol edin.

/webhook/meta, Meta’dan WaFixer’a gelen mesaj ve durum bildirimlerini alır./api/wafixer/webhook/set/... ise WaFixer’dan sizin sunucunuza olay gönderir. Gelen mesajlar webhook ile kaydedilir; geçmiş gelen kutusu sonradan API sorgusuyla çekilmez.

Panel ve hesap API

18 endpoint

Public etiketli yollar giriş gerektirmez. Diğer hesap, oturum, dosya ve ödeme yolları panel oturumu ister; wfx_ anahtarı tek başına yeterli değildir.

GET/api/public/statusPublic

Panel, API, veritabanı ve webhook teslimat gözlemlerinin anlık durumunu döndürür.

Response
  • { status, checkedAt, refreshAfterSeconds, services }
  • Not: Bağımlılık sorunu da HTTP 200 içinde durum verisi olarak döner. Webhook unknown değeri gözlem eksikliği anlamına gelebilir.
GET/api/plansPublic

Aktif paketleri listeler.

Response
  • { plans: Plan[] }
POST/api/auth/registerPublic

Yeni panel kullanıcısı oluşturur ve 15 günlük deneme aboneliği başlatır.

Body
  • email: string
  • password: string (min 8; en az bir harf ve bir rakam veya sembol)
  • name?: string
Response
  • { ok, verificationEmailSent, user?, trial?: { days, channels, endsAt } }
  • Not: Yaygın şifreler ve e-posta ile aynı şifre kabul edilmez. Deneme yeni hesap için 15 gün / 1 kanaldır; yeniden doğrulama isteği yeni deneme başlatmaz.
GET/api/auth/verify-email?token={token}Public

E-posta doğrulama tokenini doğrular ve /signin sayfasına yönlendirir.

Query
  • token: string
GET/api/instancesSession

Kullanıcının sahip olduğu instance kayıtlarını listeler.

Response
  • Instance[]
  • Not: Admin kullanıcı tüm instance kayıtlarını görebilir; normal kullanıcı sadece kendi ownerEmail kayıtlarını görür.
PATCH/api/instances/{id}Session

Oturum adını veya grup bilgisini günceller.

Body
  • name?: string (1-255)
  • groupId?: string | null
Response
  • { instance }
DELETE/api/instances/{id}Session

Instance kaydını veya seçili instance verilerini siler.

Body
  • scope?: "instance" | "data"
  • includes?: { messages?, contacts?, chats?, labels?, integrations?, media? }
Response
  • { ok, scope, summary? }
GET/api/analytics?range=7dSession

Mesaj serisi, toplamlar ve en aktif instance listesi döndürür.

Query
  • range?: "24h" | "7d" | "30d" | "90d"
Response
  • { range, granularity, series, bucketCount, bucketSec, fromSec, totals, topInstances }
GET/api/filesSession

Kullanıcının instance mesajlarından çıkarılan medya dosyalarını listeler.

Query
  • type?: "all" | "image" | "video" | "audio" | "document"
  • q?: string
  • instanceId?: string
  • limit?: 1..500 (varsayılan 200)
Response
  • { items, counts }
GET/api/files/{id}/rawSession / Embed token

Medya dosyasını binary olarak döndürür.

Query
  • download?: "1"
  • poster?: "1" (kapak resmi)
  • Not: id, /api/files sonucundaki item id veya message:{veritabanıMesajId} değeridir; WhatsApp key.id ile karıştırmayın.
  • Not: Embed erişimi x-embed-token ile ve token’ın izinli oturumlarıyla sınırlıdır. Medya artık alınamıyorsa hata dönebilir; HTTP Range istekleri desteklenir.
GET/api/preferencesSession

Bildirim tercihlerini döndürür.

Response
  • { notifyBrowser, notifySound, notifyUnreadDigest }
PATCH/api/preferencesSession

Bildirim tercihlerini günceller.

Body
  • notifyBrowser?: boolean
  • notifySound?: boolean
  • notifyUnreadDigest?: boolean
GET/api/subscriptionsSession

Kullanıcının aboneliklerini, ödemelerini ve özet bilgisini listeler.

Response
  • { subscriptions, payments, summary }
POST/api/stripe/checkoutSession

Sunucuda doğrulanan sepet için Stripe Checkout oturumu oluşturur.

Body
  • items: { planId: string; channels: number }[]
  • billingPeriod: "monthly" | "yearly"
Response
  • { url }
  • Not: Abonelik yalnızca Stripe ödemesi webhook veya dönüş doğrulamasıyla onaylandıktan sonra etkinleşir.
POST/api/stripe/portalSession

Ödeme yöntemi, fatura ve iptal işlemleri için Stripe müşteri portalını açar.

Response
  • { url }
GET/api/me/quotaSession

Kanal kotası ve kullanım bilgisini döndürür.

Response
  • { limit, used, available, canCreate }
GET/api/me/trialSession

Deneme/aktif abonelik, kalan gün ve kullanılan instance bilgisini döndürür.

Response
  • { isTrial, daysLeft, trialEndsAt, planName, totalChannels, usedInstances, activeSubscriptions }
GET/api/teamSession

Normal kullanıcı için kendi profilini, admin için tüm takım üyelerini listeler.

Response
  • { members, counts, currentUserEmail, canInvite }

Kullanıcı yönetimi

19 endpoint

API key, embed token, grup, şablon ve kampanya kayıtlarını yönetmek için kullanılır.

GET/api/me/apikeySession

Kullanıcıya ait API anahtarlarını listeler. Plain key tekrar gösterilmez.

Response
  • { keys }
POST/api/me/apikeySession

Yeni API anahtarı oluşturur.

Body
  • name: string (1-100)
  • scope?: "global" | "instance"
  • instanceId?: string | null
Response
  • { key, plain }
  • Not: plain sadece oluşturma cevabında gösterilir.
  • Not: global scope yalnızca anahtar sahibinin instance kayıtlarında çalışır.
  • Not: instance scope sadece seçilen instance API endpointleri ve Socket.IO namespace için geçerlidir; yeni instance oluşturamaz.
DELETE/api/me/apikey/{id}Session

API anahtarini revoke eder.

Response
  • { ok, alreadyRevoked? }
GET/api/me/embed-tokenSession

Embed token kayıtlarını listeler.

Response
  • { tokens }
POST/api/me/embed-tokenSession

Müşteriye özel, iptal edilebilir embed token ve embed URL oluşturur.

Body
  • customerLabel: string (1-120)
  • instanceIds: string[]
  • ttlMinutes?: number | null (30-43200; varsayılan 1440; 0/null süresiz)
  • permissions?: "read" | "read_write" (varsayılan read_write)
Response
  • { token, embedUrl, tokenId, customerLabel, instanceIds, permissions, expiresAt }
DELETE/api/me/embed-token/{id}Session

Embed tokeni revoke eder.

GET/api/embed/status?token={token}Embed token

Embed token durumunu, izinleri ve izinli instance listesini döndürür.

Query
  • token?: string
Response
  • { customerLabel, permissions, instances }
  • Not: Token query yerine x-embed-token header ile de gönderilebilir.
GET/api/me/instance-groupSession

Instance gruplarını listeler.

Response
  • { groups }
POST/api/me/instance-groupSession

Yeni instance grubu oluşturur.

Body
  • name: string (1-80)
  • color?: "grape" | "peach" | "wagreen" | "sky" | "rose" | "cream"
PATCH/api/me/instance-group/{id}Session

Instance grubunu günceller.

Body
  • name?: string (1-80)
  • color?: "grape" | "peach" | "wagreen" | "sky" | "rose" | "cream"
DELETE/api/me/instance-group/{id}Session

Instance grubunu siler; gruptaki instance kayıtları grupsuz kalır.

GET/api/me/templateSession

Kullanıcı mesaj şablonlarını listeler. Boş ise varsayılan şablonları seed eder.

Response
  • { templates }
POST/api/me/templateSession

Yeni panel mesaj şablonu oluşturur.

Body
  • title: string (1-120)
  • body: string
  • category?: string (max 60)
  • shortcut?: string (max 40)
PATCH/api/me/template/{id}Session

Panel mesaj şablonunu günceller.

Body
  • title?: string
  • body?: string
  • category?: string
  • shortcut?: string
DELETE/api/me/template/{id}Session

Panel mesaj şablonunu siler.

GET/api/me/campaignSession

Toplu kampanyaları listeler.

Response
  • { campaigns }
POST/api/me/campaignSession

Toplu mesaj kampanyası oluşturur ve arka planda başlatır.

Body
  • name: string (1-120)
  • instanceId: string
  • body: string
  • delayMs?: number (500-300000 ms; varsayılan 8000)
  • recipients: { phone: string; name?: string; vars?: Record<string,string> }[] (1-5000)
  • sendProfile?: { minDelayMs?, maxDelayMs?, typingMinMs?, typingMaxMs?, pauseEvery?, pauseMinMs?, pauseMaxMs?, linkPreview?, shuffleRecipients? }
Response
  • { campaign }
  • Not: Bağlı oturum gerekir. Kampanya paket yetkisi, sohbet limiti ve numara ısınma kurallarına tabidir.
  • Not: sendProfile gecikmeleri 500-300000 ms, yazıyor süreleri 0-60000 ms, mola süreleri 0-900000 ms, pauseEvery 0-500 aralığına sınırlandırılır.
GET/api/me/campaign/{id}Session

Tek kampanya detayını döndürür.

Response
  • { campaign }
DELETE/api/me/campaign/{id}Session

Kampanya queued/running ise iptal eder, bitmiş ise siler.

Response
  • { ok, action }

WhatsApp proxy API

29 endpoint

Ö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
Response
  • Instance[]
  • 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.

Response
  • { webhookUrl }
  • 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)
Response
  • Contact[]
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.

Response
  • Websocket | null
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.

Diğer desteklenen proxy pathleri

Proxy

Bu pathler https://wafixer.com/api/wafixer/{path}/{instanceName}formatıyla kullanılır. GET satırlarında belirtilen alanları query’ye, diğerlerinde JSON body’ye yazın. WhatsApp ve WhatsApp Business API desteği farklıdır; yalnız WhatsApp etiketli işlemler Business API oturumunda kullanılamaz.

MetotYol ve alanlarOturum
POSTmessage/sendSticker/{instanceName}

number, sticker (URL / base64)

WhatsApp
POSTmessage/sendReaction/{instanceName}

key: { id, remoteJid, fromMe }, reaction

WhatsApp / Business API
POSTmessage/sendPoll/{instanceName}

number, name, selectableCount, values[]

WhatsApp
POSTmessage/sendList/{instanceName}

number, title, footerText, buttonText, sections[]

WhatsApp / Business API
POSTmessage/sendButtons/{instanceName}

number, title, buttons[]; Meta: reply düğmeleri

WhatsApp / Business API
POSTchat/fetchProfile/{instanceName}

number

WhatsApp
POSTchat/fetchProfilePictureUrl/{instanceName}

number

WhatsApp
POSTchat/whatsappNumbers/{instanceName}

numbers: string[]

WhatsApp
POSTchat/sendPresence/{instanceName}

number, presence, delay?

WhatsApp
POSTgroup/create/{instanceName}

subject, participants: string[], description?

WhatsApp
GETgroup/fetchAllGroups/{instanceName}

query: getParticipants="true" | "false"

WhatsApp
GETgroup/findGroupInfos/{instanceName}

query: groupJid

WhatsApp
GETgroup/participants/{instanceName}

query: groupJid

WhatsApp
POSTgroup/updateParticipant/{instanceName}

groupJid, action, participants: string[]

WhatsApp
GETlabel/findLabels/{instanceName}

Body yok

WhatsApp
POSTlabel/handleLabel/{instanceName}

number, labelId, action: "add" | "remove"

WhatsApp
GETproxy/find/{instanceName}

Body yok

WhatsApp
POSTproxy/set/{instanceName}

enabled, host, port (string), protocol, username?, password?

WhatsApp
GETtemplate/find/{instanceName}

Body yok

Business API
POSTtemplate/create/{instanceName}

name, category, language, components[]

Business API
POSTtemplate/edit/{instanceName}

templateId, category?, components?, allowCategoryChange?, ttl?

Business API
DELETEtemplate/delete/{instanceName}

name, hsmId?

Business API

HTTP cevapları ve hatalar

Errors

Okumalar genellikle 200, oluşturma ve mesaj gönderimleri 201 döner. Mesajın teslim/okunma durumunumessages.update olaylarından takip edin. Panel hataları genellikle { error, detail?, code? }, WhatsApp servis hataları { status, error, response: { message } } biçimindedir;message metin veya dizi olabilir.

400

Geçersiz body veya parametre

401

Oturum, API key veya token yok/geçersiz

403

Kullanıcı bu kayıt veya path için yetkili değil

404

Kayıt bulunamadı

409

Tekrarlı numara, kayıt veya Meta uygulama/numara eşleşmesi çakışması

402

Abonelik veya paket kullanım hakkı bu işlemi karşılamıyor

429

İstek / kayıt denemesi sınırı aşıldı

500

Sunucu hatası

502

WhatsApp / Meta / ödeme servisi isteği tamamlanamadı

503

Gerekli servis yapılandırması hazır değil

Sürümlü mobil API ayrı olarak /api/mobile/v1 altında çalışır ve mobil Bearer oturumu kullanır.Mobil OpenAPI sözleşmesini aç.