Kaynaklar
Değişiklik günlüğü
API'deki yenilikler ve değişiklikler. Geriye dönük uyumluluğu bozan bir değişiklik önceden duyurulur.
v2.32.1
- Bağlantı önizlemesi:
POST /wa/messagesmetin mesajlarındatext: { "body": "...", "preview_url": true }gönderildiğinde değer Meta'ya iletilir ve metindeki bağlantının önizlemesi gösterilir.preview_urlgönderilmezse önizleme eskisi gibi kapalıdır; mevcut entegrasyonlar etkilenmez.
v2.32.0
- Hata sözlüğü:
GET /meta/error-codes(Meta mesaj, şablon, hesap ve arama kodları + Veri Merkezi kodları; Türkçe açıklama, adım, önem,retryable, kategori). Yalnız Meta'nın belgelediği kodlar. message.status.failed:errors[]öğelerinemessage_tr,action_tr,severity,retryable,category,known; üst düzeyde ilk hatanın özeti (error_code,error_message_tr,error_action_tr,error_severity,error_retryable,error_category). Meta alanları (error_data.detailsdahil) aynen kalır.- Hata yanıtları: Meta kaynaklı her hatada
meta_code(bağlantı hatasında0); tümerrorgövdelerindemessage_tr,action_tr.error.messageartık Türkçe ve teknik metinsiz; Meta'nın ham metni yalnızmeta_message/meta_user_messageda. Arama ve form hatalarındameta_message_tr. - Şablon olayları:
reason_code,reason_tr,action_tr,paused_until,meta_description;rejected_reason_texther redde dolu. Yeni olaylar:template.pending,template.in_appeal,template.locked,template.archived,template.unarchived,template.deleted,template.pending_deletion,template.limit_exceeded. account.alertyapılandırıldı:type,severity,message_tr,action_tr,link(+ Metaalert_infoalanları).number.name_changed:rejection_reason_tr.number.status_changed:ACCOUNT_VIOLATION→restricted+violation_type.- Yeni olaylar:
number.limit_changed(Meta mesaj limiti),account.review_changed(hesap incelemesi),message.status.deleted. Yeni olayların hiçbiri*aboneliğine dahil değildir; açıkça seçilmelidir. GET /numbers:payment_method_status(ok|missing|unknown),payment_method_action_tr.
v2.31.1
- Kopma nedeni sonradan gelirse güncellenir: kopmadan sonraki 10 dakika içinde aynı WABA için nedenli bir kopma olayı (ör.
PARTNER_REMOVED+disconnection_info.reason) gelirsedisconnect_reasonvedisconnect_initiated_bygüncellenir; CRM'e nedenli tek birnumber.status_changeddaha gider (reason,disconnect_message_tr,disconnect_action_tr,reconnect_url). Mevcut olay sırası ve alanlar değişmedi. - Sözlük:
BUSINESS_DOWNGRADE→ "Numara telefonda WhatsApp Business'tan normal WhatsApp'a geçirildi." Adım: (1) numarayı telefonda tekrar WhatsApp Business'a taşıyın, (2) Veri Merkezi panelinde Numaralar sayfasından yeniden bağlayın.
v2.31.0
- Kopma nedenleri sözlüğü:
GET /meta/disconnect-reasons(Metaaccount_updatedeğerleri + Veri Merkezi olayları; kod, kaynak, kısa Türkçe açıklama, müşterinin adımı). GET /numbers:disconnect_message_tr,disconnect_action_tr,reconnect_url(aktif değilse kopma nedeni, aktif ama yetki düşmüşseREAUTH_REQUIRED; bilinmiyorsanull). 2.30.0 alanları aynen kalır.number.status_changed: aynı üç alan her olayda.ACCOUNT_RESTRICTIONartıkstatus: "restricted"olarak yayınlanır (restriction_type,restriction_types,restricted_until,remediation).- Düzeltme:
DISABLED_UPDATEolayında yalnızwaba_ban_state: DISABLEnumarayı kapatır;SCHEDULE_FOR_DISABLEkapatmaz,REINSTATEkapalı numarayı yeniden açar vestatus: "connected"yayınlar.
v2.30.0
- Düzeltme: Meta hesap olaylarında (
PARTNER_REMOVEDvb.) WABA kimliğiwaba_info.waba_idalanından okunur. Önceden bazı kopmalarda numaraactivekalıyor venumber.status_changedyayınlanmıyordu. PARTNER_APP_UNINSTALLEDartık kopma sayılır: numaradisconnectedolur. MetaPARTNER_REMOVEDile art arda gönderdiğinde numara başına teknumber.status_changedyayınlanır.GET /numbersyeni alanlar:disconnect_reason,disconnect_initiated_by(Metadisconnection_info; yalnız numara aktif değilken dolu),reauth_required(boolean),reauth_required_at.- Not: coexistence numaralarında Meta, telefondaki WhatsApp Business uygulaması uzun süre kullanılmazsa bağlantıyı
PRIMARY_INACTIVITYnedeniyle kaldırır. Numara panelden yeniden bağlanmalıdır.
v2.29.0
POST /privacy/erasure: isteğe bağlıreference(1–64 karakter) gövde alanı; 202 yanıtında veprivacy.erasure_completedolayında aynen döner (verilmediysenull).POST /privacy/erasure:Idempotency-Keydesteği. Aynı anahtar ve gövdeyle yeniden denemede aynıerasure_idve yanıtIdempotent-Replay: trueile döner; silme ikinci kez çalışmaz. İşlem sürerken409 idempotency_in_progress, farklı gövdede422 idempotency_key_conflict.- Geriye uyumlu: alanlar isteğe bağlı; mevcut istemciler değişiklik gerektirmez.
v2.28.0
- Eşzamanlı medya indirme sınırı: hesap başına aynı anda en fazla 6 indirme; birinci taraf anahtar 6 yuvanın tamamını, diğer anahtarlar birlikte 2 yuvayı kullanır. Dolunca
429 rate_limited+error.scope: concurrency,X-Concurrency-Limit,Retry-After: 2.HEADve?meta=1sayılmaz. - Dayanıklılık: doğrulanmış anahtar bilgisi 15 sn, medya üstverisi 10 dk sunucu önbelleğinde tutulur (istek başına daha az veritabanı sorgusu). İptal ve IP listesi değişikliği önbelleği hemen temizler.
- Veritabanı devre kesicisi: kısa sürede art arda bağlantı reddinde API birkaç saniye bağlantı denemeden
503 temporarily_unavailabledöner; önbellekteki bilgilerle medya indirmeleri sürer. - SDK'lar 2.28.0: davranış aynı (429/503 Retry-After ile yeniden deneme eşzamanlılık sınırını da kapsar).
v2.27.0
- Hesap düzeyi hız sınırı: anahtar sınırına ek olarak hesabın tüm anahtarları kova başına ortak bir bütçe paylaşır (JSON kovaları 300/dk, medya 150/dk). Ayrıntı: Hız sınırları rehberi.
- Birinci taraf önceliği: bağlı hizmetin kurulum anahtarı (ör. Sigorta CRM) hesap bütçesinin tamamını kullanabilir; anahtar sınırı da hesap bütçesine eşittir. Hesapta böyle bir anahtar varken diğer anahtarlar bütçenin %40'ını birlikte paylaşır. Diğer anahtarların kendi sınırları (120/dk, medya 60/dk) değişmedi.
- Yeni başlıklar:
X-RateLimit-Bucket,X-RateLimit-Account-Limit,X-RateLimit-Account-Remaining,X-RateLimit-Account-Reset; 429 yanıtındaX-RateLimit-Scope(key,account,account_share) ve gövdedeerror.scope,error.bucket. TümüAccess-Control-Expose-Headersile okunabilir. - Geçici altyapı hataları (veritabanı bağlantı reddi vb.) artık
500yerine503 temporarily_unavailable+Retry-After: 5döner; bu durumda anahtar doğrulanamazsa da401 invalid_api_keyyerine503döner. API uçlarında beklenmeyen hata yanıtı HTML yerine JSON (server_error). - Giden webhook teslimi abonelikler arasında adil paylaştırılır; abonelik içinde canlı olaylar
message.historyolaylarından önce teslim edilir. - SDK'lar: 429 ve 503 yanıtlarında
Retry-Afterkadar bekleyip otomatik yeniden dener (en fazla 3).
v2.26.1
- Belge düzeltmesi (davranış değişmedi):
opt_out_autoreply_enabledvedefault_opt_out_autoreply_enabled11.10.2026'dan beri her zamantrue; RET onay mesajı zorunludur,falsegönderilirse yok sayılır ve yanıttatruedöner. Ayar eşitleyen istemciler bu alanı göndermemeli ya da beklenen değeritruekabul etmelidir.
v2.26.0
GET /flows: her formdaid(=flow_id),waba_id,phone_number_id,updated_at(Veri Merkezi kaydında son gözlenen değişiklik, ISO 8601); yanıttanext_cursorvehas_more.limitüst sınırı 100'den 200'e çıktı; imleçcursoradıyla da gönderilebilir. Eskiflow_idvepaging.afteralanları aynen korunur.- Formlar: Meta Flow JSON'u
Type mismatch in an equality operationile reddederse (POST /flows,PUT /flows/{flow_id}/json→validation_errors;POST /flows/{flow_id}/publishve diğer yazma uçları →422 meta_flow_failed) yanıtahint+hint_messageeklenir:flow_chained_equalityya da (Sigorta CRM hizmetine bağlı anahtarlarda)crm_update_required. Flow JSON değiştirilmez. - Belgeler: Meta koşul kuralları — ifade başına tek eşitlik, iç içe If en fazla 3 seviye, Switch uyarısı (canlı Meta testleri, 14.10.2026).
- SDK'lar:
listFlows/list_flows200'e kadarlimitvenext_cursorile çalışır (imza değişmedi). OpenAPI ve Postman güncellendi.
v2.25.0
- Yeni:
POST /templates/media— medya başlıklı şablon için örnek dosyayı yükler veheader_handle+header_media_refdöndürür. Giriş:multipart/form-datafile, JSONurlya da JSONmedia_id. Kabul: JPEG/PNG (IMAGE, en çok 5 MB), MP4 (VIDEO, 16 MB), PDF (DOCUMENT, 100 MB). Yanıt201:header_handle,header_media_ref,format,mime_type,file_size,waba_id. - Yeni:
POST /templates/{id}(PATCH /templates/{id}eşdeğeri),POST /templates/{id}/copy(yeni ad / dil / kategori ile kopya,componentsverilirse çeviri) veDELETE /templates?name=…(adın tüm dilleri;ids,languages). - Düzeltme:
DELETE /templates/{id}artık yalnız o dili siler (Meta'ya ad +hsm_id). Önceden Meta'da adın tüm dilleri siliniyordu, yerelde tek satır. Meta'da zaten yoksa yanıttameta_missing: true. POST /templates: yeni alanlarparameter_format(POSITIONAL|NAMED),allow_category_change,message_send_ttl_seconds,cta_url_link_tracking_opted_out,header_media_ref. Tam bileşen desteği:NAMEDdeğişkenler, metin başlıkta 1 değişken + örnek,LOCATIONbaşlık,COPY_CODEdüğmesi. Aynı WABA'da aynı ad + dil için409 template_exists; Meta reddederse yereldeDRAFTartığı kalmaz.- Düzenleme kuralları: yalnız
APPROVED/REJECTED/PAUSED(aksi409 template_not_editable); onaylıda kategori değişmez (422 category_not_editable), 24 saatte 1 ve 30 günde 10 düzenleme sınırı (429 template_edit_limit,next_edit_at,retry_after).name,language,parameter_formatdüzenlenemez. - Hatalar: doğrulama hataları (
422 invalid_request/template_invalid)error.fieldile alan yolunu verir (ör.components[0].text;POST /templates/validatedahil). Meta kaynaklı hatalardameta_code,meta_subcode(metin),meta_message,meta_user_title,meta_user_message,fbtrace_iddöner. Yeni kodlar:template_exists,template_not_editable,category_not_editable,template_edit_limit,meta_unavailable(502);template_edit_failed,template_delete_failed,meta_upload_failed,media_invalid_format,header_media_fetch_failedşablon uçlarında da kullanılır. - Şablon nesnesi:
previous_category,parameter_format,rejected_reason_textve listedequality_score; ayrıntıda ayrıcaheader_media_refveedit_limit(editable,edits_last_30d,max_edits_30d,next_edit_at). - Yeni olaylar:
template.disabledvetemplate.reinstated.*aboneliğine dahil değildir; açıkça seçilmelidir. Durum olaylarının (approved,rejected,paused,flagged,disabled,reinstated) yüküneprevious_status,rejected_reason,rejected_reason_text,quality_score,occurred_atvesource(webhook|sync) eklendi;reasonkorunur. Meta webhook'u gelmediyse geçiş senkronda yakalanır, aynı geçiş iki kez yayınlanmaz. - Test anahtarı: yeni yazma uçları dahil tümü simüle edilir (Meta'ya gitmez, veri değişmez;
simulated: true,X-Test-Mode: 1):POST /templates/media201(header_handle: "4::test…",header_media_ref: null),POST/PATCH /templates/{id}200,POST /templates/{id}/copy202(id: 0), silme uçları200. - Şablon nesnesi:
GET /templatesveGET /templates/{id}her şablondaheader_mediadöner. Medya başlıklı ve Veri Merkezi'nde dosya kopyası olan şablonda{ url, mime_type, file_size, sha256, filename, format, temporary: false }(urlkalıcı herkese açık bağlantı); kopya yoksa Meta onay örneği{ url, format, temporary: true }; medya başlığı yoksanull. POST /messagestype: "template": kayıtlı şablon medya başlıklıysa veheaderbileşeni gönderilmezse kayıtlı medya kalıcı bağlantıyla otomatik eklenir;headergönderirseniz aynen kalır.- Dinamik URL butonu gönderimi netleştirildi:
{ type: "button", sub_type: "url", index: "0", parameters: [{ type: "text", text: "<adres sonu>" }] }; sabit adresli URL butonuna bileşen gönderilmez. Yeni hata422 invalid_template_parameters(field:template.components[0].parameters|template.components[0].index|template.components): sabit URL'ye parametre,index'teki düğme URL değil, değişkenli URL için parametre yok. Denetim yalnız şablon Veri Merkezi'nde kayıtlıysa yapılır (AUTHENTICATIONhariç); kayıtlı değilse istek aynen gider. - SDK'lar:
uploadTemplateMedia,updateTemplate,copyTemplate,deleteTemplate,deleteTemplatesByName(PHP, Node.js) ve Python'daupload_template_media,update_template,copy_template,delete_template,delete_templates_by_name. OpenAPI ve Postman güncellendi.
v2.24.0
- Yeni alan:
type: "unsupported"olanmessage.receivedolaylarındadata.unsupported={ type, raw_type, error_code, error_title }gelir. Meta mesajın içeriğini iletmediğinde nedeni (ör.131060"This message is unavailable.") burada. Diğer türlerdenull; mevcut alanlar değişmedi.
v2.23.0
- Yeni: WhatsApp Business uygulaması rehberi (coexistence).
GET /app-contacts(süzgeçler:phone_number_id,updated_since,include_removed; imleçle sayfalama) veGET /numbers/{phone_number_id}/app-contacts/sync(senkron durumu). Kapsamcontacts:read, kredi düşmez. Panel kişi rehberi (GET /contacts) değişmedi. - Yeni olay:
contact.synced— rehberde ekleme, düzenleme ve silme; numara başına en fazla 100 değişiklikle toplu (batch.index/batch.count,sync_type: initial | incremental).*aboneliğine dahil değildir. - 2.23.0 öncesinde saklanmış rehber olayları geriye dönük işlendi; bu kayıtlar
source: "app_backfill"ile döner (olay yayınlanmaz). - Meta ilk aktarımı yalnız bağlantıdan sonraki 24 saat içinde ve bir kez verir; tekrar isteme ucu yoktur (durum:
initial_sync.status: "expired"). POST /test/inboundtype: "app_contact_sync"örnekcontact.syncedgönderir; test anahtarındaGET /app-contacts3 örnek kayıt döner.- Silme:
number.purgedolayındacounts.app_contacts,POST /privacy/erasureyanıtında veprivacy.erasure_completedolayındaerased.app_contacts. - SDK'lar:
listAppContacts/getAppContactsSyncStatus(PHP, Node.js), Python'dalist_app_contacts/get_app_contacts_sync_status. OpenAPI ve Postman güncellendi.
v2.22.0
- Yeni:
POST /messagestype: "interactive"—button(en çok 3 yanıt düğmesi),list(en çok 10 satır),cta_url(bağlantı düğmesi),location_request_message(konum isteği). Meta sınırları gönderimden önce doğrulanır (422 invalid_interactive+field). Serbest mesaj kuralları aynen geçerli. - Gelen seçimler:
message.received/message.echoolaylarındakidata.interactivenesnesinereply_id,reply_title,reply_descriptioneklendi (geriye uyumlu;type,namevedata.buttondeğişmedi). - Test anahtarı düzeltmesi: şablon, profil, numara/hesap ayarı, saklama süresi, kişi ve
POST /messages/readuçları artık simüle edilir; webhook aboneliği yazma uçları,POST /privacy/erasureve geçmiş aktarımı başlatma403 test_mode_unsupporteddöner. Simüle ya da engellenen yanıtlardaX-Test-Mode: 1başlığı bulunur. - SDK'lar:
sendButtons/sendList/sendCtaUrl/requestLocation/sendInteractive(PHP, Node.js), Python'da snake_case karşılıkları. OpenAPI ve Postman'e dört örnek eklendi.
v2.21.0
- Yeni:
POST /messagestype: "location"(enlem, boylam, isteğe bağlı ad/adres) vetype: "contacts"(1–20 kişi kartı,name.formatted_namezorunlu). Serbest mesaj kuralları aynen geçerli: 24 saat pencere, 1 kredi,Idempotency-Key, test anahtarında simülasyon. Yeni hata kodları422 invalid_location,422 invalid_contacts. - SDK'lar:
sendLocation/sendContacts(PHP, Node.js),send_location/send_contacts(Python). OpenAPI'yeLocationMessage/ContactsMessageşemaları, Postman'e iki örnek istek eklendi. - Belgelendi:
message.status.*olaylarındauser_idvedirection;message.receivedolayındainteractive({type, name}). - Belge düzeltmeleri: uç sayısı 61 (+
HEAD /media/{media_id}), olay sayısı 32.
v2.20.0
- Yeni:
POST /numbers/{phone_number_id}/detach— numarayı hesaptan ayırma;purge_messageszorunlu. Yeni olaylarnumber.detached,number.purged; yeni hata kodları409 number_detached,422 deregister_not_supported. - Yeni:
POST /templates/syncveGET /templates?refresh=1— Meta'dan anlık şablon senkronu (WABA başına dakikada 1). Otomatik senkron 15 dakikaya indi. - Yeni: Formlar (WhatsApp Flows) — 9 uç,
flows:read/flows:writekapsamları;POST /messagestype: "flow"; şablonlarda FLOW butonu. - Yeni olaylar:
flow.completed,flow.status_changed. - Arama uygunluk kontrolü (
eligibility) ve yeni arama hata kodları.
v2.19.2
- Yalnız belge:
PATCH /account/retentionaçıklaması düzeltildi (saklama süresi şu an yalnız arama kayıtlarına uygulanır).
v2.19.1
- Belgeler, OpenAPI, SDK'lar ve Postman tek sürümde hizalandı; eksik 5 uç (
PATCH /account/settings,PATCH /account/retention,POST /privacy/erasure,POST /test/inbound,POST /webhooks/{id}/rotate-secret) belgelendi.
v2.19.0
- Yeni: Arama (Calling) — 10 uç,
calls:read/calls:writekapsamları. - Yeni olaylar:
call.connect,call.status,call.terminate,call.permission_reply. - Arama eylemleri kredisizdir; arama izni isteği 1 kredi.
v2.18.0
- Yeni: sesli not —
audio.voicealanı. OGG/Opus ses varsayılan olarak sesli not gider. - Düzeltme:
POST /mediadosyayı Meta'ya türüne uygun uzantılı adla yükler.
v2.17.0
- Yeni olaylar:
template.category_changed,template.quality_changed,number.name_changed. message.receivediçindekiusernamevecontact.usernamealanları belgelendi.
v2.16.0
- Yeni olay:
contact.opt_out_changed. - Yeni uç:
GET /contacts/opted-out. GET /contacts:opted_out_atalanı ve?opted_out=süzgeci.- Anahtar oluştururken geçersiz kapsamlar artık
*'a yükseltilmez.
v2.15.2
- Yalnız belge:
FLAGGEDbir şablon durumu değildir; geçerli kümeDRAFT,PENDING,APPROVED,REJECTED,PAUSED,DISABLED.
v2.15.1
- Yalnız belge: test anahtarında mesaj Meta'ya gitmez ve
wamidsahtedir;texthem düz metin hem{ "body": "..." }kabul eder.
v2.15.0
message.received,message.echovemessage.historyolaylarınabutton: { payload, text }alanı eklendi.
v2.14.0
- Şablonlar WABA düzeyinde:
POST /templatesiçinphone_number_idzorunlu değil; birden çok WABA'da422 waba_required. GET /templates: yeniphone_number_idsalanı.- Yeni hata kodu
422 template_not_in_waba(Meta 132001).
v2.13.0
- Dayanıklılık: webhook sonrası işler için kalıcı kuyruk. API sözleşmesi değişmedi.
v2.12.0
- Başarısız kimlik doğrulama için IP başına dakikada 60 sınırı.
v2.11.0
- Yeni:
POST /webhooks/{id}/rotate-secret— kesintisiz anahtar döndürme veX-VeriMerkezi-Signature-256-Previousbaşlığı. POST /messages/readgönderim sayacını tüketmez.
v2.10.0
- Webhook
*artık 12 klasik olaya genişletilerek kaydedilir. - Aynı adrese ikinci aktif abonelik
409 webhook_url_existsdöner.
v2.9.0
- Webhook olay listesi doğrulaması (
422 invalid_webhook). - IPv6 adresleri için SSRF koruması.
v2.8.0
- Webhook teslim adresi her denemede yeniden doğrulanır ve doğrulanan IP'ye sabitlenir.
v2.7.0
biz_opaque_callback_dataile gönderim ↔ durum olayı eşleştirmesi (Idempotency-Key ile otomatik).message.status.*olaylarınaphone_number_id,conversation,pricing,biz_opaque_callback_dataeklendi.
v2.6.0
- Çift mesaj koruması:
409 idempotency_in_progress,409 meta_outcome_unknown. - Gönderim hatalarına
retryable,meta_code,meta_subcodealanları. GET /numbers?status=all;number.status_changedzenginleşti.POST /messagestextalanı{ "body": "..." }kabul eder.
v2.5.0
- Yeni:
POST /privacy/erasure,PATCH /account/retention,PATCH /account/settings,POST /test/inbound. - Webhook teslim yanıt gövdesi artık saklanmaz (KVKK).
v2.4.0
- Şablon yönetimi API'si ve webhook aboneliği API'si.
- Yeni olaylar
credit.low,credit.exhausted.
v2.3.0
- Yeni olaylar:
message.revoked,message.edited,message.sent,message.history,number.status_changed. - Yeni:
POST /media, alıntılı yanıt, tepki,GET /messages,POST /webhooks/redeliver, geçmiş aktarımı, numara ayarları,GET /health.
v2.2.0
- Gelen medyayı indirme:
GET /media/{media_id},GET /media; medya için ayrı hız sınırı (60/dk).
v2.1.0
- Yeni: doğrulama kodu (
AUTHENTICATION) şablonları —POST /messagestemplate.otpalanıyla tek satırda OTP gönderimi.
v2.0.0
- Yeni:
api.verimerkezi.appalan adı; eski adres kullanımdan kaldırıldı. - Yeni: giden webhook altyapısı (HMAC-SHA256 imza).
- Yeni: PHP, Node.js ve Python SDK dosyaları; OpenAPI 3.1 tanımı.
- API anahtarı sistemi (kapsam, IP izin listesi, canlı/test modu),
Idempotency-Key, dakikada 120 istek sınırı ve imleçli sayfalama.
