API referansı
Numaralar
Hesabınıza bağlı WhatsApp numaraları; numara ayarları, geçmiş aktarımı ve numarayı hesaptan ayırma.
#Number nesnesi
idintegerVeri Merkezi'deki numara kaydının kimliği.waba_idstringNumaranın bağlı olduğu WhatsApp İşletme Hesabı (WABA) kimliği.phone_number_idstringNumaranın Meta kimliği. Gönderim ve diğer uçlarda bunu kullanırsınız.display_phone_numberstringGörünen telefon numarası.verified_namestringMeta'da onaylı görünen ad.quality_ratingstringMeta kalite puanı.Değerler:GREEN,YELLOW,RED,UNKNOWNstatusstringNumara durumu.Değerler:pending,active,disabled,banned,disconnectedstatus_reasonstring · boş olabilirDurum ayrıntısı (Meta inceleme durumu).disconnected_atstring · boş olabilirBağlantının koptuğu zaman.disconnect_reasonstring · boş olabilirMeta'nın bildirdiği kopma nedeni (ör.PRIMARY_INACTIVITY: coexistence'ta telefondaki WhatsApp Business uygulaması uzun süre kullanılmadı). Yalnız numara aktif değilken dolu. (2.30.0)disconnect_initiated_bystring · boş olabilirKopmayı başlatan taraf (ör.SYSTEM,USER). Yalnız numara aktif değilken dolu. (2.30.0)reauth_requiredbooleanMeta yetkisi düştü; numara panelden yeniden yetkilendirilmeli. Yeniden bağlanıncafalseolur. (2.30.0)reauth_required_atstring · boş olabilirYetki kaybının saptandığı zaman. (2.30.0)disconnect_message_trstring · boş olabilirKopma, kısıt ya da yeniden yetki nedeninin kısa Türkçe açıklaması (kopma nedenleri sözlüğü). Neden bilinmiyorsanull. (2.31.0)disconnect_action_trstring · boş olabilirMüşterinin yapacağı adım (Türkçe). Adım yoksanull. (2.31.0)reconnect_urlstring · boş olabilirNumaranın yeniden bağlanacağı Veri Merkezi panel sayfası; yalnız yeniden bağlama gerekiyorsa dolu. (2.31.0)detached_atstring · boş olabilirAPI ile hesaptan ayrıldığı zaman (ISO 8601).detached_reasonstring · boş olabilirAyırma gerekçesi.purgeobject · boş olabilirZamanlanmış kayıt silme durumu:status(scheduled/running/done),scheduled_at,due_by,done_at.connection_typestringBağlantı türü.coexistence, WhatsApp Business uygulamasıyla birlikte kullanılan numaradır.Değerler:standard,coexistenceconnected_atstringBağlanma zamanı.messaging_limit_tierstring · boş olabilirMeta mesajlaşma limiti kademesi (ör.TIER_250,TIER_2K,TIER_10K,TIER_100K,TIER_UNLIMITED).payment_method_statusstringMeta ödeme yöntemi durumu:ok,missingya daunknown. Mesaj ücretini WhatsApp işletme hesabının sahibi Meta'ya öder;missingiken pazarlama ve hizmet şablonları 131042 ile reddedilir. (2.32.0)payment_method_action_trstring · boş olabilirÖdeme yöntemi eksikse müşterinin yapacağı adım (Türkçe); aksi haldenull. (2.32.0)throughputobject · boş olabilirMeta gönderim hızı bilgisi (yalnız aktif numarada, bir saat önbellekli).automation_enabledbooleanVeri Merkezi otomasyonu bu numarada açık mı.opt_out_autoreply_enabledbooleanHer zamantrue: 11.10.2026'dan beri RET onay mesajı zorunludur, kapatılamaz;falsegönderilirse yok sayılır ve yanıttatruedöner. Çıkış talebi her durumda kaydedilir.
Number nesnesi
{
"id": 4,
"waba_id": "1029384756",
"phone_number_id": "1234567890",
"display_phone_number": "+90 555 000 00 00",
"verified_name": "Firma A.Ş.",
"quality_rating": "GREEN",
"status": "active",
"status_reason": null,
"disconnected_at": null,
"disconnect_reason": null,
"disconnect_initiated_by": null,
"reauth_required": false,
"reauth_required_at": null,
"detached_at": null,
"detached_reason": null,
"purge": null,
"connection_type": "standard",
"connected_at": "2026-05-26 17:50:24",
"messaging_limit_tier": "TIER_2K",
"throughput": {
"level": "STANDARD"
},
"automation_enabled": true,
"opt_out_autoreply_enabled": true
}#Numaraları listele
GET
/numbersHesabınıza bağlı WhatsApp numaralarını döndürür. Parametresiz çağrı yalnız aktif numaraları listeler. 2.31.0: aktif olmayan ya da yeniden yetki bekleyen numarada
disconnect_message_tr (kısa neden), disconnect_action_tr (müşterinin yapacağı adım) ve reconnect_url (yeniden bağlama sayfası) döner; neden bilinmiyorsa üçü de null. 2.32.0: payment_method_status (ok | missing | unknown) ve payment_method_action_tr. Kapsam: profile:readSorgu parametreleri
statusstringisteğe bağlıalltüm durumları, tek bir durum adı yalnız o durumu döndürür. Verilmezse yalnızactive.Değerler:all,pending,active,disabled,banned,disconnected
Hatalar
| Durum | Kod | Ne zaman |
|---|---|---|
| 403 | insufficient_scope | Anahtarda profile:read kapsamı yok. |
curl -X GET "https://api.verimerkezi.app/wa/numbers" \
-H "Authorization: Bearer $VM_API_KEY"const res = await fetch("https://api.verimerkezi.app/wa/numbers", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.VM_API_KEY}`,
},
});
const data = await res.json();import os, requests
res = requests.get(
"https://api.verimerkezi.app/wa/numbers",
headers={"Authorization": f"Bearer {os.environ['VM_API_KEY']}"},
)
data = res.json()<?php
$ch = curl_init("https://api.verimerkezi.app/wa/numbers");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("VM_API_KEY"),
],
]);
$data = json_decode(curl_exec($ch), true);Yanıt 200
{
"ok": true,
"numbers": [
{
"id": 4,
"waba_id": "1029384756",
"phone_number_id": "1234567890",
"display_phone_number": "+90 555 000 00 00",
"verified_name": "Firma A.Ş.",
"quality_rating": "GREEN",
"status": "active",
"status_reason": null,
"disconnected_at": null,
"disconnect_reason": null,
"disconnect_initiated_by": null,
"reauth_required": false,
"reauth_required_at": null,
"disconnect_message_tr": null,
"disconnect_action_tr": null,
"reconnect_url": null,
"detached_at": null,
"detached_reason": null,
"purge": null,
"connection_type": "standard",
"connected_at": "2026-05-26 17:50:24",
"messaging_limit_tier": "TIER_2K",
"payment_method_status": "ok",
"payment_method_action_tr": null,
"throughput": {
"level": "STANDARD"
},
"automation_enabled": true,
"opt_out_autoreply_enabled": true
}
]
}#Kopma nedenleri sözlüğü
GET
/meta/disconnect-reasonsNumara kopma, kısıt ve yeniden yetki nedenlerinin tamamını döndürür: kod, kaynak (
meta_disconnection_reason, meta_event, meta_ban_state, meta_restriction, vm_event), kısa Türkçe açıklama ve müşterinin yapacağı adım. Kodlar Meta account_update webhook referansındaki değerlerle ve Veri Merkezi'nin kendi olaylarıyla sınırlıdır; Meta süre belgelemediği için süre yazılmaz. GET /numbers ve number.status_changed aynı sözlükle disconnect_message_tr / disconnect_action_tr döndürür; yerel kopya tutabilirsiniz. (2.31.0)
Tam liste:
- PRIMARY_INACTIVITY (meta_disconnection_reason): Telefondaki WhatsApp Business uygulaması uzun süre açılmadığı için Meta bağlantıyı kaldırdı. Adım: Telefonda WhatsApp Business uygulamasını açın; ardından Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayın.
- COMPANION_INACTIVITY (meta_disconnection_reason): Bağlı cihaz uzun süre kullanılmadığı için Meta bağlantıyı kaldırdı. Adım: Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayın.
- BUSINESS_DOWNGRADE (meta_disconnection_reason): Numara telefonda WhatsApp Business'tan normal WhatsApp'a geçirildi. Adım: (1) Numarayı telefonda tekrar WhatsApp Business uygulamasına taşıyın. (2) Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayın.
- ACCOUNT_DISCONNECTED (meta_disconnection_reason): WhatsApp hesabı silindi ya da Meta tarafından kapatıldı. Adım: Telefonda WhatsApp hesabının durumunu kontrol edin; hesap açıksa Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayın.
- CHANGE_NUMBER (meta_disconnection_reason): WhatsApp hesabının telefon numarası değiştirildi. Adım: Yeni numarayı Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından bağlayın.
- USER_RE_REGISTERED (meta_disconnection_reason): Numara başka bir cihazda yeniden kaydedildi. Adım: Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayın.
- PARTNER_REMOVED (meta_event): Numaranın Veri Merkezi bağlantısı kaldırıldı. Adım: Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayın.
- PARTNER_APP_UNINSTALLED (meta_event): Veri Merkezi uygulamasının WhatsApp hesabındaki izni kaldırıldı. Adım: Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayıp izinleri onaylayın.
- ACCOUNT_DELETED (meta_event): WhatsApp işletme hesabı silindi. Adım: Yeni ya da mevcut bir WhatsApp işletme hesabıyla Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı bağlayın.
- ACCOUNT_OFFBOARDED (meta_event): WhatsApp işletme hesabı platformdan çıkarıldı. Adım: Veri Merkezi destek ekibiyle görüşün.
- ACCOUNT_RECONNECTED (meta_event): Numaranın bağlantısı yeniden kuruldu.
- ACCOUNT_VIOLATION (meta_event): Meta bu hesap için politika ihlali bildirdi. Adım: Meta Business Suite'teki bildirimi inceleyin ve ilgili içeriği düzeltin.
- ACCOUNT_RESTRICTION (meta_event): Meta bu hesapta bazı işlemleri geçici olarak kısıtladı. Adım: Kısıtın bitiş tarihini bekleyin; Meta bir düzeltme adımı bildirdiyse uygulayın.
- DISABLE (meta_ban_state): Meta WhatsApp işletme hesabını kapattı (politika ihlali). Adım: Meta Business Suite üzerinden itiraz edin.
- SCHEDULE_FOR_DISABLE (meta_ban_state): Meta WhatsApp işletme hesabını kapatmayı planladı. Adım: Bildirilen ihlali giderin ve Meta Business Suite üzerinden itiraz edin.
- REINSTATE (meta_ban_state): WhatsApp işletme hesabı yeniden açıldı.
- RESTRICTED_BIZ_INITIATED_MESSAGING (meta_restriction): İşletmenin başlattığı mesaj (şablon) gönderimi geçici olarak kısıtlandı. Adım: Kısıtın bitiş tarihini bekleyin; bu sürede yalnız müşteriden gelen mesajlara yanıt verebilirsiniz.
- RESTRICTED_CUSTOMER_INITIATED_MESSAGING (meta_restriction): Müşterilerden gelen mesajlara yanıt gönderimi geçici olarak kısıtlandı. Adım: Kısıtın bitiş tarihini bekleyin.
- RESTRICTED_ADD_PHONE_NUMBER_ACTION (meta_restriction): Bu hesaba yeni numara eklenmesi geçici olarak kısıtlandı. Adım: Kısıtın bitiş tarihini bekleyin.
- RESTRICTED_UTILITY_TEMPLATES (meta_restriction): Hizmet (utility) şablonlarının gönderimi kısıtlandı. Adım: Kısıtın bitiş tarihini bekleyin.
- RESTRICTED_DIRECT_SEND_UTILITY_TEMPLATES (meta_restriction): Hizmet (utility) şablonlarının doğrudan gönderimi kısıtlandı. Adım: Kısıtın bitiş tarihini bekleyin.
- RESTRICTED_BUSINESS_INITIATED_CALLING (meta_restriction): İşletmenin başlattığı aramalar kısıtlandı. Adım: Kısıtın bitiş tarihini bekleyin.
- RESTRICTED_USER_INITIATED_CALLING (meta_restriction): Müşterilerin işletmeyi araması kısıtlandı. Adım: Kısıtın bitiş tarihini bekleyin.
- RESTRICTED_BIZ_INITIATED_AND_USER_INITIATED_CALLING (meta_restriction): İşletme ve müşteri aramaları kısıtlandı. Adım: Kısıtın bitiş tarihini bekleyin.
- RESTRICTED_USER_INITIATED_CALLING_CALL_BUTTON_HIDDEN (meta_restriction): Müşteri arama düğmesi gizlendi; müşteriler işletmeyi arayamıyor. Adım: Kısıtın bitiş tarihini bekleyin.
- REAUTH_REQUIRED (vm_event): Meta'daki WhatsApp izni kalktı; numara yeniden yetkilendirilmeli. Adım: Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayıp izinleri onaylayın.
- CONNECTED_VIA_PANEL (vm_event): Numara Veri Merkezi panelinden bağlandı.
- DISCONNECTED_VIA_PANEL (vm_event): Numara Veri Merkezi panelinden ayrıldı. Adım: Yeniden kullanmak için Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayın.
- TRANSFERRED (vm_event): Numara başka bir Veri Merkezi hesabına taşındı. Kapsam: —Her geçerli API anahtarıyla okunabilir; kapsam gerekmez.
Bilinmeyen kodları tolere edin; Meta yeni değer eklediğinde sözlük güncellenir.
curl -X GET "https://api.verimerkezi.app/wa/meta/disconnect-reasons" \
-H "Authorization: Bearer $VM_API_KEY"const res = await fetch("https://api.verimerkezi.app/wa/meta/disconnect-reasons", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.VM_API_KEY}`,
},
});
const data = await res.json();import os, requests
res = requests.get(
"https://api.verimerkezi.app/wa/meta/disconnect-reasons",
headers={"Authorization": f"Bearer {os.environ['VM_API_KEY']}"},
)
data = res.json()<?php
$ch = curl_init("https://api.verimerkezi.app/wa/meta/disconnect-reasons");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("VM_API_KEY"),
],
]);
$data = json_decode(curl_exec($ch), true);Yanıt 200
{
"ok": true,
"reconnect_url": "https://verimerkezi.app/panel/wa/ayarlar?bolum=numaralar",
"reasons": [
{
"code": "PRIMARY_INACTIVITY",
"source": "meta_disconnection_reason",
"message_tr": "Telefondaki WhatsApp Business uygulaması uzun süre açılmadığı için Meta bağlantıyı kaldırdı.",
"action_tr": "Telefonda WhatsApp Business uygulamasını açın; ardından Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayın."
},
{
"code": "RESTRICTED_BIZ_INITIATED_MESSAGING",
"source": "meta_restriction",
"message_tr": "İşletmenin başlattığı mesaj (şablon) gönderimi geçici olarak kısıtlandı.",
"action_tr": "Kısıtın bitiş tarihini bekleyin; bu sürede yalnız müşteriden gelen mesajlara yanıt verebilirsiniz."
},
{
"code": "REAUTH_REQUIRED",
"source": "vm_event",
"message_tr": "Meta'daki WhatsApp izni kalktı; numara yeniden yetkilendirilmeli.",
"action_tr": "Veri Merkezi panelinde WhatsApp › Ayarlar › Numaralar sayfasından numarayı yeniden bağlayıp izinleri onaylayın."
}
]
}#Hata kodları sözlüğü
GET
/meta/error-codesMeta ve Veri Merkezi hata kodlarının Türkçe sözlüğü: kod (her zaman metin), kaynak (
meta_message, meta_template, meta_account, meta_call, vm), kısa Türkçe açıklama (message_tr), müşterinin adımı (action_tr), önem (info | warn | error | critical), retryable ve kategori (recipient | template | account | rate | payment | other; sayısal Meta kodlarında). Yalnız Meta'nın belgelediği kodlar yer alır. Webhook olaylarındaki ve hata yanıtlarındaki message_tr / action_tr alanları bu sözlükten gelir. (2.32.0) Kapsam: —Her geçerli API anahtarıyla okunabilir; kapsam gerekmez.
İçerik yalnız API sürümüyle değişir; günlük önbelleğe alabilirsiniz.
Sözlükte olmayan kodları tolere edin: olay ve hata yanıtlarında
message_tr yine dolu gelir ("Meta kodu X").Sorgu parametreleri
sourcestringisteğe bağlıYalnız bir kaynağın kayıtları:meta_message,meta_template,meta_account,meta_call,vm.Değerler:meta_message,meta_template,meta_account,meta_call,vm
curl -X GET "https://api.verimerkezi.app/wa/meta/error-codes" \
-H "Authorization: Bearer $VM_API_KEY"const res = await fetch("https://api.verimerkezi.app/wa/meta/error-codes", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.VM_API_KEY}`,
},
});
const data = await res.json();import os, requests
res = requests.get(
"https://api.verimerkezi.app/wa/meta/error-codes",
headers={"Authorization": f"Bearer {os.environ['VM_API_KEY']}"},
)
data = res.json()<?php
$ch = curl_init("https://api.verimerkezi.app/wa/meta/error-codes");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("VM_API_KEY"),
],
]);
$data = json_decode(curl_exec($ch), true);Yanıt 200
{
"ok": true,
"version": "2.32.0",
"count": 130,
"codes": [
{
"code": "131047",
"source": "meta_message",
"message_tr": "Kişinin son mesajının üzerinden 24 saatten fazla geçti; serbest mesaj gönderilemez.",
"action_tr": "Onaylı bir şablon mesajı gönderin; kişi yanıt verince 24 saat yeniden açılır.",
"severity": "info",
"retryable": false,
"category": "recipient"
},
{
"code": "131042",
"source": "meta_message",
"message_tr": "Meta faturalandırma (ödeme yöntemi) hatası.",
"action_tr": "Meta Business Suite › Faturalandırma bölümünde WhatsApp işletme hesabının ödeme yöntemini ekleyin ya da güncelleyin.",
"severity": "critical",
"retryable": false,
"category": "payment"
},
{
"code": "138006",
"source": "meta_call",
"message_tr": "Kişinin onayladığı bir arama izni yok.",
"action_tr": "Önce kişiden arama izni isteyin.",
"severity": "warn",
"retryable": false,
"category": "recipient"
},
{
"code": "FIRST_PAUSE",
"source": "meta_template",
"message_tr": "Şablon düşük kalite nedeniyle ilk kez duraklatıldı.",
"action_tr": "İçeriği ve gönderim kitlesini gözden geçirin.",
"severity": "warn",
"retryable": false,
"category": null
},
{
"code": "insufficient_credits",
"source": "vm",
"message_tr": "Mesaj kredisi yetersiz.",
"action_tr": "Veri Merkezi panelinden kredi yükleyin.",
"severity": "error",
"retryable": false,
"category": null
}
]
}#Geçmiş aktarımı durumunu getir
GET
/numbers/{phone_number_id}/history-importCoexistence numaralarında son 180 güne kadar yazışmanın aktarım durumunu döndürür. Aktarım numara bağlanınca otomatik başlar; mesajlar
message.history olayıyla gelir. Kapsam: profile:readstatus değerleri: not_applicable, not_started, pending, requested, in_progress, completed, declined, failed, window_expired.phase: 0 (0–1 gün), 1 (1–90 gün), 2 (90–180 gün). progress 0–100 arasıdır.Yol parametreleri
phone_number_idstringzorunluNumaranızın Meta kimliği (yalnız rakam, 5–32 hane).
Hatalar
| Durum | Kod | Ne zaman |
|---|---|---|
| 400 | invalid_phone_number_id | phone_number_id yalnız rakam olmalı. |
| 403 | insufficient_scope | Anahtarda profile:read kapsamı yok. |
| 404 | number_not_found | Numara size ait değil ya da aktif değil. |
curl -X GET "https://api.verimerkezi.app/wa/numbers/1234567890/history-import" \
-H "Authorization: Bearer $VM_API_KEY"const res = await fetch("https://api.verimerkezi.app/wa/numbers/1234567890/history-import", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.VM_API_KEY}`,
},
});
const data = await res.json();import os, requests
res = requests.get(
"https://api.verimerkezi.app/wa/numbers/1234567890/history-import",
headers={"Authorization": f"Bearer {os.environ['VM_API_KEY']}"},
)
data = res.json()<?php
$ch = curl_init("https://api.verimerkezi.app/wa/numbers/1234567890/history-import");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("VM_API_KEY"),
],
]);
$data = json_decode(curl_exec($ch), true);Yanıt 200
{
"ok": true,
"history_import": {
"phone_number_id": "1234567890",
"eligible": true,
"status": "in_progress",
"window_open": false,
"phase": 1,
"progress": 45,
"chunks_received": 4,
"messages_received": 180,
"media_downloaded": 12,
"error": null
}
}#Geçmiş aktarımını başlat
POST
/numbers/{phone_number_id}/history-importOtomatik başlatma kaçtıysa geçmiş aktarımını elle başlatır. Meta bu aktarıma yalnız bağlantıdan sonraki 24 saat içinde ve bir kez izin verir. Kapsam:
profile:writeHata kodu
history_ önekiyle mevcut durumu taşır. message alanındaki metin örnektir.Yol parametreleri
phone_number_idstringzorunluNumaranızın Meta kimliği (yalnız rakam, 5–32 hane).
Hatalar
| Durum | Kod | Ne zaman |
|---|---|---|
| 400 | invalid_phone_number_id | phone_number_id yalnız rakam olmalı. |
| 403 | insufficient_scope | Anahtarda profile:write kapsamı yok. |
| 404 | number_not_found | Numara size ait değil ya da aktif değil. |
| 409 | number_detached | Numara hesabınızdan ayrılmış; panelden yeniden bağlayın. |
| 409 | history_window_expired | 24 saatlik pencere kapandı; geçmiş için numarayı yeniden bağlamak gerekir. |
| 409 | history_in_progress | Aktarım zaten sürüyor (benzer biçimde history_requested, history_completed, history_declined). |
| 422 | history_not_applicable | Numara coexistence değil; geçmiş aktarımı yok. |
curl -X POST "https://api.verimerkezi.app/wa/numbers/1234567890/history-import" \
-H "Authorization: Bearer $VM_API_KEY"const res = await fetch("https://api.verimerkezi.app/wa/numbers/1234567890/history-import", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.VM_API_KEY}`,
},
});
const data = await res.json();import os, requests
res = requests.post(
"https://api.verimerkezi.app/wa/numbers/1234567890/history-import",
headers={"Authorization": f"Bearer {os.environ['VM_API_KEY']}"},
)
data = res.json()<?php
$ch = curl_init("https://api.verimerkezi.app/wa/numbers/1234567890/history-import");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("VM_API_KEY"),
],
]);
$data = json_decode(curl_exec($ch), true);Yanıt 202
{
"ok": true,
"history_import": {
"phone_number_id": "1234567890",
"eligible": true,
"status": "requested",
"window_open": false,
"phase": null,
"progress": 0,
"chunks_received": 0,
"messages_received": 0,
"media_downloaded": 0,
"error": null
},
"message": "Geçmiş aktarımı istendi."
}#Numara ayarlarını güncelle
PATCH
/numbers/{phone_number_id}/settingsKendi otomasyonunuzu çalıştırıyorsanız çift yanıtı önlemek için Veri Merkezi otomasyonunu ve abonelikten çıkış otomatik yanıtını numara bazında kapatın. Varsayılan: açık. Kapsam:
profile:writeYol parametreleri
phone_number_idstringzorunluNumaranızın Meta kimliği (yalnız rakam, 5–32 hane).
İstek gövdesi
automation_enabledbooleanisteğe bağlıVeri Merkezi otomasyon motoru.opt_out_autoreply_enabledbooleanisteğe bağlıHer zamantrue: 11.10.2026'dan beri RET onay mesajı zorunludur, kapatılamaz;falsegönderilirse yok sayılır ve yanıttatruedöner. Çıkış talebi her durumda kaydedilir.
Hatalar
| Durum | Kod | Ne zaman |
|---|---|---|
| 403 | insufficient_scope | Anahtarda profile:write kapsamı yok. |
| 404 | number_not_found | Numara size ait değil ya da aktif değil. |
| 422 | invalid_request | Alan yok ya da değer boolean değil. |
curl -X PATCH "https://api.verimerkezi.app/wa/numbers/1234567890/settings" \
-H "Authorization: Bearer $VM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"automation_enabled": false,
"opt_out_autoreply_enabled": true
}'const res = await fetch("https://api.verimerkezi.app/wa/numbers/1234567890/settings", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.VM_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"automation_enabled": false,
"opt_out_autoreply_enabled": true
}),
});
const data = await res.json();import os, requests
res = requests.patch(
"https://api.verimerkezi.app/wa/numbers/1234567890/settings",
headers={"Authorization": f"Bearer {os.environ['VM_API_KEY']}"},
json={
"automation_enabled": False,
"opt_out_autoreply_enabled": True
},
)
data = res.json()<?php
$ch = curl_init("https://api.verimerkezi.app/wa/numbers/1234567890/settings");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("VM_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"automation_enabled" => false,
"opt_out_autoreply_enabled" => true
]),
]);
$data = json_decode(curl_exec($ch), true);Yanıt 200
{
"ok": true,
"phone_number_id": "1234567890",
"settings": {
"automation_enabled": false,
"opt_out_autoreply_enabled": true
}
}#Numarayı hesaptan ayır
POST
/numbers/{phone_number_id}/detachNumarayı Veri Merkezi hesabınızdan ayırır. Numara Meta'da ve WABA'nızda kayıtlı kalır; yalnız Veri Merkezi bağı kopar. Kuyruktaki giden mesajlar iptal edilir ve kredi düşülmez. Kapsam:
profile:writeTekrar çağrı
already: true ve cancelled_outbound: 0 döndürür; zamanlanmış silme yeniden zamanlanmaz.Ayrılan numarada gönderim, şablon, form, arama ve profil uçları
409 number_detached döner; gelen olaylar size iletilmez.Olaylar:
number.detached ve (silme bitince) number.purged. İkisi de * aboneliğine dahil değildir.Numarayı panelden yeniden bağladığınızda etkinleşir; henüz başlamamış silme iptal olur. Silinen kayıtlar geri gelmez.
purge_messages: true numaranın uygulama rehberi kayıtlarını da siler (number.purged → counts.app_contacts). false ise kayıtlar kalır, yeni senkron durur.Yol parametreleri
phone_number_idstringzorunluNumaranızın Meta kimliği (yalnız rakam, 5–32 hane).
Başlıklar
Idempotency-Keyisteğe bağlı8–128 karakterlik benzersiz anahtar (UUID önerilir). Aynı anahtar ve aynı gövdeyle yapılan tekrar, ilk yanıtıIdempotent-Replay: truebaşlığıyla döndürür. 24 saat saklanır.
İstek gövdesi
purge_messagesbooleanzorunlufalse: yalnız bağ kopar, kayıtlar kalır.true: mesaj içerikleri, medya, konuşmalar, form gönderimleri, ham webhook kayıtları, arama ayrıntıları, API günlüğü ve teslim gövdeleri en geç 24 saat içinde silinir. Geri alınamaz.reasonstringisteğe bağlıAyırma gerekçesi, en fazla 100 karakter.deregister_metabooleanisteğe bağlıBu sürümde desteklenmez;truegönderilirse422 deregister_not_supporteddöner.
Hatalar
| Durum | Kod | Ne zaman |
|---|---|---|
| 400 | invalid_phone_number_id | phone_number_id yalnız rakam olmalı. |
| 403 | test_mode_unsupported | Bu işlem yalnız canlı anahtarla yapılır. |
| 403 | insufficient_scope | Anahtarda profile:write kapsamı yok. |
| 404 | number_not_found | Numara size ait değil ya da aktif değil. |
| 409 | idempotency_in_progress | Aynı anahtarla bir istek hâlâ işleniyor. |
| 422 | invalid_request | purge_messages eksik/boolean değil ya da reason 100 karakteri aşıyor. |
| 422 | deregister_not_supported | Meta'dan kaldırma bu sürümde yok. |
| 422 | idempotency_key_conflict | Aynı anahtar farklı gövdeyle kullanılmış. |
| 503 | feature_unavailable | Özellik geçici olarak kullanılamıyor. |
curl -X POST "https://api.verimerkezi.app/wa/numbers/1234567890/detach" \
-H "Authorization: Bearer $VM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"purge_messages": false,
"reason": "Numara başka sisteme taşındı"
}'const res = await fetch("https://api.verimerkezi.app/wa/numbers/1234567890/detach", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.VM_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"purge_messages": false,
"reason": "Numara başka sisteme taşındı"
}),
});
const data = await res.json();import os, requests
res = requests.post(
"https://api.verimerkezi.app/wa/numbers/1234567890/detach",
headers={"Authorization": f"Bearer {os.environ['VM_API_KEY']}"},
json={
"purge_messages": False,
"reason": "Numara başka sisteme taşındı"
},
)
data = res.json()<?php
$ch = curl_init("https://api.verimerkezi.app/wa/numbers/1234567890/detach");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("VM_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"purge_messages" => false,
"reason" => "Numara başka sisteme taşındı"
]),
]);
$data = json_decode(curl_exec($ch), true);Yanıt 200
{
"ok": true,
"phone_number_id": "1234567890",
"detached_at": "2026-10-08T14:05:00+03:00",
"already": false,
"cancelled_outbound": 3,
"purge": null
}