İçeriğe geç
Veri MerkeziVeri MerkeziAPI

API referansı

WhatsApp içinde açılan çok ekranlı formları (WhatsApp Flows) oluşturun, yayınlayın ve izleyin. Formlar WABA düzeyindedir; yönetim kredisizdir.

#Flow nesnesi

  • idstring
    Form kimliği; flow_id ile aynı değer (yalnız GET /flows listesinde).
  • flow_idstring
    Form kimliği.
  • namestring · boş olabilir
    Form adı.
  • statusstring · boş olabilir
    Durum.Değerler: DRAFT, PUBLISHED, DEPRECATED, BLOCKED, THROTTLED
  • categoriesarray
    Kategoriler.Değerler: SIGN_UP, SIGN_IN, APPOINTMENT_BOOKING, LEAD_GENERATION, CONTACT_US, CUSTOMER_SUPPORT, SURVEY, OTHER
  • validation_errorsarray
    Meta Flow JSON doğrulama hataları.
  • health_statusobject · boş olabilir
    Meta sağlık durumu (can_send_message vb.).
  • json_versionstring · boş olabilir
    Flow JSON sürümü.
  • data_api_versionstring · boş olabilir
    Data API sürümü.
  • endpoint_uristring · boş olabilir
    Endpoint adresi (data_exchange).
  • waba_idstring
    Formun bağlı olduğu WABA (yalnız GET /flows listesinde).
  • phone_number_idstring · boş olabilir
    Listeyi istediğiniz numara (yalnız GET /flows listesinde).
  • updated_atstring · boş olabilir
    Veri Merkezi kaydında formun son değişikliğinin gözlendiği zaman (ISO 8601, ofsetli). Meta form güncellenme zamanı vermez; ad, durum, kategori ya da doğrulama hataları değiştiğinde ilerler. Kayıt yazılamadıysa null (yalnız GET /flows listesinde).
Flow nesnesi
{
  "flow_id": "1234567890123456",
  "name": "Kredi başvurusu",
  "status": "PUBLISHED",
  "categories": [
    "LEAD_GENERATION"
  ],
  "validation_errors": [],
  "health_status": {
    "can_send_message": "AVAILABLE"
  },
  "json_version": "7.2",
  "data_api_version": null,
  "endpoint_uri": null
}

#Formları listele

GET/flows
Numaranın WABA'sındaki formları döndürür. İmleçli sayfalama: yanıttaki next_cursor değerini bir sonraki istekte cursor (ya da after) olarak gönderin; has_more: false olduğunda liste biter. Kapsam: flows:read
2.26.0: her formda id (= flow_id), waba_id, phone_number_id, updated_at; yanıtta next_cursor ve has_more (eski paging.after korunur, next_cursor ile aynıdır).
Test anahtarı (vmk_test_) bu uçta da Meta'daki gerçek listeyi okur (form okuma uçları test anahtarıyla çalışır; simülasyon yalnız yazma uçlarında 403 test_mode_unsupported biçimindedir).

Sorgu parametreleri

  • phone_number_idstringzorunlu
    Numaranızın Meta kimliği.
  • limitintegeristeğe bağlı
    Sayfa boyutu (1–200; 200'den büyük değer 200'e indirilir). Verilmezse Meta varsayılanı (25).
  • afterstringisteğe bağlı
    Sayfalama imleci (next_cursor). cursor adıyla da gönderilebilir.
  • cursorstringisteğe bağlı
    after ile aynı; önceki yanıttaki next_cursor değeri.

Hatalar

DurumKodNe zaman
403insufficient_scopeAnahtarda flows:read kapsamı yok.
404number_not_foundNumara size ait değil.
409number_detachedNumara hesabınızdan ayrılmış; panelden yeniden bağlayın.
422invalid_phone_number_idphone_number_id zorunlu.
422invalid_requestafter / cursor geçersiz (field: after).
curl -X GET "https://api.verimerkezi.app/wa/flows?phone_number_id=1234567890" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{
  "ok": true,
  "phone_number_id": "1234567890",
  "waba_id": "1029384756",
  "flows": [
    {
      "id": "1234567890123456",
      "flow_id": "1234567890123456",
      "name": "Kredi başvurusu",
      "status": "PUBLISHED",
      "categories": [
        "LEAD_GENERATION"
      ],
      "validation_errors": [],
      "health_status": {
        "can_send_message": "AVAILABLE"
      },
      "json_version": "7.2",
      "data_api_version": null,
      "endpoint_uri": null,
      "waba_id": "1029384756",
      "phone_number_id": "1234567890",
      "updated_at": "2026-10-14T10:32:05+03:00"
    }
  ],
  "paging": {
    "after": "QVFIUmxNQ2w0ZAFRB"
  },
  "next_cursor": "QVFIUmxNQ2w0ZAFRB",
  "has_more": true
}

#Form oluştur

POST/flows
Formu verilen Flow JSON ile DRAFT durumunda oluşturur. Meta doğrulama hataları validation_errors alanında döner. Kapsam: flows:write
Şifreli Endpoint (data_exchange) trafiğini Veri Merkezi karşılamaz; kendi sunucunuz karşılar.
Yayınlanmamış formu POST /messages ile flow.mode: "draft" göndererek deneyebilirsiniz.
Meta, Flow JSON'u koşul ifadesindeki tür uyuşmazlığıyla reddederse (Type mismatch in an equality operation) yanıta hint ve Türkçe hint_message eklenir: başarılı yanıtta (validation_errors içinde) üst düzeyde, hata yanıtında (422 meta_flow_failed) error nesnesinde. hint: "flow_chained_equality" — tek ifadede birden fazla eşitlik var; hint: "crm_update_required" — istek bir Sigorta CRM hizmetine bağlı anahtardan geldi, CRM yazılımını güncelleyin. Flow JSON değiştirilmez.
Meta koşul kuralları — If bileşeni condition: == / != için iki taraf aynı türde olmalı; metin değişmezi tek tırnakla ('2'), sayı tırnaksız yazılır; >, >=, <, <= yalnız sayılarla; iç içe If en fazla 3 seviye (Meta: https://developers.facebook.com/docs/whatsapp/flows/reference/components#if). Canlı Meta testlerinde (14.10.2026) gözlenen ek kısıtlar: bir ifadede yalnız bir eşitlik kullanılabilir — (${form.x} == '2') || (${form.x} == '3') Meta derleyicisinde ((${form.x} == '2') || ${form.x}) == '3' olarak çözülüp reddedilir. Çalışan biçimler: tek karşılaştırma, ${form.bool} || (${form.x} == 'a'), sayısal (${form.n} > 2) || (${form.n} < 1). Birden çok değer için koşulu iç içe If'lere bölün (≤ 3 seviye) ya da her değere ayrı If yazın. Switch bileşeni aynı testlerde Cannot read property 'type' hatası verdi; şimdilik If tercih edin.

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: true başlığıyla döndürür. 24 saat saklanır.

İstek gövdesi

  • phone_number_idstringzorunlu
    Formun WABA'sını belirleyen numara.
  • namestringzorunlu
    Form adı (en fazla 200).
  • categoriesarrayzorunlu
    En az bir kategori.Değerler: SIGN_UP, SIGN_IN, APPOINTMENT_BOOKING, LEAD_GENERATION, CONTACT_US, CUSTOMER_SUPPORT, SURVEY, OTHER
  • flow_jsonobject | stringzorunlu
    Flow JSON nesnesi ya da metni (en fazla 10 MB).
  • endpoint_uristringisteğe bağlı
    Data exchange için kendi https uç noktanız.

Hatalar

DurumKodNe zaman
403test_mode_unsupportedYazma uçları test anahtarıyla çalışmaz.
403insufficient_scopeAnahtarda flows:write kapsamı yok.
404flow_not_foundForm yok ya da size ait değil.
409number_detachedNumara hesabınızdan ayrılmış; panelden yeniden bağlayın.
422invalid_flow_idflow_id yalnız rakam olmalı.
422meta_flow_failedMeta isteği reddetti. Zincirlenmiş eşitlikte error.hint (flow_chained_equality | crm_update_required) ve error.hint_message eklenir.
409idempotency_in_progressAynı anahtarla bir istek hâlâ işleniyor. Retry-After kadar bekleyin.
422idempotency_key_conflictAynı anahtar farklı bir gövdeyle kullanılmış.
422invalid_requestParametre hatalı.
422invalid_flow_jsonFlow JSON geçersiz ya da 10 MB'ı aşıyor.
409meta_outcome_unknownSonuç belirsiz; GET /flows ile kontrol edin.
curl -X POST "https://api.verimerkezi.app/wa/flows" \
  -H "Authorization: Bearer $VM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number_id": "1234567890",
    "name": "Kredi başvurusu",
    "categories": [
      "LEAD_GENERATION"
    ],
    "flow_json": {
      "version": "7.2",
      "screens": [
        {
          "id": "WELCOME",
          "title": "Başvuru",
          "terminal": true,
          "layout": {
            "type": "SingleColumnLayout",
            "children": []
          }
        }
      ]
    }
  }'
Yanıt 201
{
  "ok": true,
  "flow_id": "1234567890123456",
  "status": "DRAFT",
  "validation_errors": []
}

#Form ayrıntısını getir

GET/flows/{flow_id}
Formun durumunu, doğrulama hatalarını ve sağlık bilgisini döndürür. Kapsam: flows:read

Yol parametreleri

  • flow_idstringzorunlu
    Form kimliği (yalnız rakam).

Sorgu parametreleri

  • phone_number_idstringisteğe bağlı
    Yalnız Meta arayüzünde oluşturulmuş formlar için; formu hesabınıza bağlar.

Hatalar

DurumKodNe zaman
403insufficient_scopeAnahtarda flows:read kapsamı yok.
404flow_not_foundForm yok ya da size ait değil.
422invalid_flow_idflow_id yalnız rakam olmalı.
curl -X GET "https://api.verimerkezi.app/wa/flows/1234567890123456" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{
  "flow_id": "1234567890123456",
  "name": "Kredi başvurusu",
  "status": "PUBLISHED",
  "categories": [
    "LEAD_GENERATION"
  ],
  "validation_errors": [],
  "health_status": {
    "can_send_message": "AVAILABLE"
  },
  "json_version": "7.2",
  "data_api_version": null,
  "endpoint_uri": null,
  "ok": true
}

#Form JSON'unu güncelle

PUT/flows/{flow_id}/json
Taslak formun Flow JSON'unu değiştirir. Yalnız DRAFT formlarda çalışır. Kapsam: flows:write
Meta, Flow JSON'u koşul ifadesindeki tür uyuşmazlığıyla reddederse (Type mismatch in an equality operation) yanıta hint ve Türkçe hint_message eklenir: başarılı yanıtta (validation_errors içinde) üst düzeyde, hata yanıtında (422 meta_flow_failed) error nesnesinde. hint: "flow_chained_equality" — tek ifadede birden fazla eşitlik var; hint: "crm_update_required" — istek bir Sigorta CRM hizmetine bağlı anahtardan geldi, CRM yazılımını güncelleyin. Flow JSON değiştirilmez.

Yol parametreleri

  • flow_idstringzorunlu
    Form kimliği (yalnız rakam).

Sorgu parametreleri

  • phone_number_idstringisteğe bağlı
    Yalnız Meta arayüzünde oluşturulmuş formlar için; formu hesabınıza bağlar.

İstek gövdesi

  • flow_jsonobject | stringzorunlu
    Yeni Flow JSON.

Hatalar

DurumKodNe zaman
403test_mode_unsupportedYazma uçları test anahtarıyla çalışmaz.
403insufficient_scopeAnahtarda flows:write kapsamı yok.
404flow_not_foundForm yok ya da size ait değil.
409number_detachedNumara hesabınızdan ayrılmış; panelden yeniden bağlayın.
422invalid_flow_idflow_id yalnız rakam olmalı.
422meta_flow_failedMeta isteği reddetti. Zincirlenmiş eşitlikte error.hint (flow_chained_equality | crm_update_required) ve error.hint_message eklenir.
409flow_not_draftYalnız DRAFT formda güncellenebilir.
422invalid_flow_jsonFlow JSON geçersiz.
curl -X PUT "https://api.verimerkezi.app/wa/flows/1234567890123456/json" \
  -H "Authorization: Bearer $VM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "flow_json": {
      "version": "7.2",
      "screens": []
    }
  }'
Yanıt 200
{
  "ok": true,
  "flow_id": "1234567890123456",
  "validation_errors": [
    {
      "error": "INVALID_PROPERTY_VALUE",
      "message": "Ekran listesi boş olamaz.",
      "line_start": 1
    }
  ]
}

#Formu yayınla

POST/flows/{flow_id}/publish
Formu yayınlar. Yayınlanan form değiştirilemez; yeni sürüm için yeni form oluşturun. Kapsam: flows:write
Doğrulama hatası olan form yayınlanamaz (422 meta_flow_failed).
Meta yayınlamayı koşul ifadesi nedeniyle reddederse error.hint / error.hint_message döner (bkz. Form oluştur).

Yol parametreleri

  • flow_idstringzorunlu
    Form kimliği (yalnız rakam).

Sorgu parametreleri

  • phone_number_idstringisteğe bağlı
    Yalnız Meta arayüzünde oluşturulmuş formlar için; formu hesabınıza bağlar.

Hatalar

DurumKodNe zaman
403test_mode_unsupportedYazma uçları test anahtarıyla çalışmaz.
403insufficient_scopeAnahtarda flows:write kapsamı yok.
404flow_not_foundForm yok ya da size ait değil.
409number_detachedNumara hesabınızdan ayrılmış; panelden yeniden bağlayın.
422invalid_flow_idflow_id yalnız rakam olmalı.
422meta_flow_failedMeta isteği reddetti. Zincirlenmiş eşitlikte error.hint (flow_chained_equality | crm_update_required) ve error.hint_message eklenir.
curl -X POST "https://api.verimerkezi.app/wa/flows/1234567890123456/publish" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{
  "ok": true,
  "flow_id": "1234567890123456",
  "status": "PUBLISHED"
}

#Formu kullanımdan kaldır

POST/flows/{flow_id}/deprecate
Yayınlanmış formu kullanımdan kaldırır. Kapsam: flows:write

Yol parametreleri

  • flow_idstringzorunlu
    Form kimliği (yalnız rakam).

Sorgu parametreleri

  • phone_number_idstringisteğe bağlı
    Yalnız Meta arayüzünde oluşturulmuş formlar için; formu hesabınıza bağlar.

Hatalar

DurumKodNe zaman
403test_mode_unsupportedYazma uçları test anahtarıyla çalışmaz.
403insufficient_scopeAnahtarda flows:write kapsamı yok.
404flow_not_foundForm yok ya da size ait değil.
409number_detachedNumara hesabınızdan ayrılmış; panelden yeniden bağlayın.
422invalid_flow_idflow_id yalnız rakam olmalı.
422meta_flow_failedMeta isteği reddetti.
curl -X POST "https://api.verimerkezi.app/wa/flows/1234567890123456/deprecate" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{
  "ok": true,
  "flow_id": "1234567890123456",
  "status": "DEPRECATED"
}

#Taslak formu sil

DELETE/flows/{flow_id}
Taslak formu siler. Yalnız DRAFT formlarda çalışır. Kapsam: flows:write

Yol parametreleri

  • flow_idstringzorunlu
    Form kimliği (yalnız rakam).

Sorgu parametreleri

  • phone_number_idstringisteğe bağlı
    Yalnız Meta arayüzünde oluşturulmuş formlar için; formu hesabınıza bağlar.

Hatalar

DurumKodNe zaman
403test_mode_unsupportedYazma uçları test anahtarıyla çalışmaz.
403insufficient_scopeAnahtarda flows:write kapsamı yok.
404flow_not_foundForm yok ya da size ait değil.
409number_detachedNumara hesabınızdan ayrılmış; panelden yeniden bağlayın.
422invalid_flow_idflow_id yalnız rakam olmalı.
422meta_flow_failedMeta isteği reddetti.
409flow_not_draftYalnız DRAFT form silinebilir.
curl -X DELETE "https://api.verimerkezi.app/wa/flows/1234567890123456" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{
  "ok": true,
  "flow_id": "1234567890123456",
  "deleted": true
}

#Önizleme bağlantısı al

GET/flows/{flow_id}/preview
Formun Meta önizleme bağlantısını döndürür. Kapsam: flows:read

Yol parametreleri

  • flow_idstringzorunlu
    Form kimliği (yalnız rakam).

Sorgu parametreleri

  • invalidatebooleanisteğe bağlı
    true yeni bağlantı üretir.Varsayılan: False
  • phone_number_idstringisteğe bağlı
    Yalnız Meta arayüzünde oluşturulmuş formlar için; formu hesabınıza bağlar.

Hatalar

DurumKodNe zaman
403insufficient_scopeAnahtarda flows:read kapsamı yok.
404flow_not_foundForm bulunamadı.
curl -X GET "https://api.verimerkezi.app/wa/flows/1234567890123456/preview" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{
  "ok": true,
  "flow_id": "1234567890123456",
  "preview_url": "https://business.facebook.com/wa/manage/flows/1234567890123456/preview/?token=abc123",
  "expires_at": "2026-11-09T10:00:00+0000"
}

#Form metriklerini getir

GET/flows/{flow_id}/metrics
Endpoint'li formların Meta metriklerini aynen döndürür. Varsayılan aralık son 7 gündür. Kapsam: flows:read

Yol parametreleri

  • flow_idstringzorunlu
    Form kimliği (yalnız rakam).

Sorgu parametreleri

  • fromstringisteğe bağlı
    Başlangıç (YYYY-AA-GG); varsayılan to − 6 gün.
  • tostringisteğe bağlı
    Bitiş (YYYY-AA-GG); varsayılan bugün.
  • metricstringisteğe bağlı
    Metrik.Değerler: ENDPOINT_REQUEST_COUNT, ENDPOINT_REQUEST_ERROR, ENDPOINT_REQUEST_ERROR_RATE, ENDPOINT_REQUEST_LATENCY_SECONDS_CEIL, ENDPOINT_AVAILABILITYVarsayılan: ENDPOINT_REQUEST_COUNT
  • granularitystringisteğe bağlı
    Ayrıntı.Değerler: DAY, HOUR, LIFETIMEVarsayılan: DAY
  • phone_number_idstringisteğe bağlı
    Yalnız Meta arayüzünde oluşturulmuş formlar için; formu hesabınıza bağlar.

Hatalar

DurumKodNe zaman
403insufficient_scopeAnahtarda flows:read kapsamı yok.
404flow_not_foundForm bulunamadı.
curl -X GET "https://api.verimerkezi.app/wa/flows/1234567890123456/metrics" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{
  "ok": true,
  "flow_id": "1234567890123456",
  "from": "2026-10-01",
  "to": "2026-10-07",
  "metric": {
    "name": "ENDPOINT_REQUEST_COUNT",
    "granularity": "DAY",
    "data_points": []
  }
}