İçeriğe geç
Veri MerkeziVeri MerkeziAPI

API referansı

Gönderim için dosyayı Meta'ya yükleyin; müşterilerinizin gönderdiği medyayı listeleyin ve indirin.

#Media nesnesi

  • media_idinteger
    Veri Merkezi depo kimliği. Webhook'taki data.media.media_id ile aynıdır.
  • client_idinteger · boş olabilir
    Medyanın ait olduğu numara kaydı.
  • kindstring
    Medya türü.Değerler: image, video, document, audio, sticker
  • sourcestring
    Kaynak.Değerler: inbound, outbound, echo
  • mimestring
    Dosyanın MIME türü.
  • sizeinteger
    Bayt cinsinden boyut.
  • sha256string · boş olabilir
    Dosyanın SHA-256 özeti (yalnız ?meta=1 yanıtında).
  • original_namestring · boş olabilir
    Özgün dosya adı.
  • created_atstring
    Kayıt zamanı.
  • download_urlstring
    İndirme adresi.
Media nesnesi
{
  "media_id": 13115,
  "client_id": 27,
  "kind": "image",
  "source": "inbound",
  "mime": "image/jpeg",
  "size": 108919,
  "sha256": "5d174a5bd79a7c91cc0ce4be0be40fdf61f6ae03c2b1e8d9f0a7b6c5d4e3f2a1",
  "original_name": null,
  "created_at": "2026-10-09 20:14:58",
  "download_url": "https://api.verimerkezi.app/wa/media/13115"
}

#Medya yükle

POST/media
Dosyayı herkese açık bir adreste yayınlamadan doğrudan Meta'ya yükler ve bir Meta medya kimliği döndürür. Kimlik 30 gün geçerlidir; POST /messages içinde {type}.id olarak kullanılır. İstek multipart/form-data olmalıdır. Kapsam: messages:send
Sınırlar: görsel (JPEG/PNG) 5 MB, çıkartma (WebP) 500 KB, video (MP4/3GPP) 16 MB, ses (AAC/AMR/MP3/MP4/OGG) 16 MB, belge (PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT) 100 MB.
Bu kimlik, gelen medyayı indirdiğiniz GET /media/{media_id} depo kimliğinden farklıdır.
Dosya Meta'ya türüne uygun bir adla yüklenir (ör. medya.ogg); kendi dosya adınız Meta'ya gitmez.
Test anahtarıyla Meta'ya istek gitmez; test.media. önekli bir kimlik ve simulated: true döner.
Bu uç medya hız sayacında (dakikada 60) sayılır.

İstek gövdesi

  • filefilezorunlu
    Yüklenecek tek dosya (multipart alanı).
  • phone_number_idstringzorunlu
    Dosyanın kullanılacağı numara (aynı WABA'da geçerlidir).

Hatalar

DurumKodNe zaman
403insufficient_scopeAnahtarda messages:send kapsamı yok.
404number_not_foundNumara size ait değil ya da aktif değil.
409number_detachedNumara hesabınızdan ayrılmış; panelden yeniden bağlayın.
413media_too_largeDosya türün sınırını aşıyor (max_bytes ve type alanları döner).
415unsupported_media_typeİstek multipart/form-data değil.
415media_invalid_formatDesteklenmeyen dosya türü; içerik gerçekten doğrulanır.
422invalid_requestphone_number_id ya da file eksik.
422invalid_mediaDosya boş.
422upload_failedDosya alınamadı.
422meta_upload_failedMeta dosyayı kabul etmedi.
curl -X POST "https://api.verimerkezi.app/wa/media" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 201
{
  "ok": true,
  "media_id": "1075907555339682",
  "type": "document",
  "mime_type": "application/pdf",
  "file_size": 183421,
  "phone_number_id": "1234567890",
  "expires_at": "2026-11-09T09:00:00Z",
  "mode": "live"
}

#Medya kayıtlarını listele

GET/media
Hesabınıza ait gelen ve giden medya kayıtlarını yeniden eskiye döndürür. Kapsam: inbox:read ya da messages:read
inbox:read ya da messages:read kapsamlarından biri yeterlidir.
Medya dosyaları süresiz saklanır.

Sorgu parametreleri

  • limitintegeristeğe bağlı
    Sayfa boyutu (1–100).Varsayılan: 50
  • cursorintegeristeğe bağlı
    Bu media_id değerinden küçük kayıtlar döner (önceki yanıttaki next_cursor).
  • sourcestringisteğe bağlı
    Yön süzgeci.Değerler: inbound, outbound, echo
  • kindstringisteğe bağlı
    Tür süzgeci.Değerler: image, video, document, audio, sticker

Hatalar

DurumKodNe zaman
403insufficient_scopeAnahtarda inbox:read ya da messages:read kapsamı yok.
curl -X GET "https://api.verimerkezi.app/wa/media?limit=50&source=inbound" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{
  "ok": true,
  "media": [
    {
      "media_id": 13115,
      "client_id": 27,
      "kind": "image",
      "source": "inbound",
      "mime": "image/jpeg",
      "size": 108919,
      "original_name": null,
      "created_at": "2026-10-09 20:14:58",
      "download_url": "https://api.verimerkezi.app/wa/media/13115"
    }
  ],
  "paging": {
    "limit": 50,
    "has_more": true,
    "next_cursor": 13115
  }
}

#Medya dosyasını indir

GET/media/{media_id}
Dosyanın kendisini ikili akış olarak döndürür. Webhook'ta gelen data.media.media_id değerini kullanın. ?meta=1 ile dosya yerine üstveri döner. Kapsam: inbox:read ya da messages:read
Örnek yanıt ?meta=1 içindir. Parametresiz çağrıda gövde dosyanın kendisidir; Content-Type, Content-Length, Content-Disposition, ETag, Accept-Ranges, X-Content-Type-Options: nosniff ve Cache-Control: private başlıkları döner.
Bu uç medya hız sayacında (dakikada 60) sayılır.

Yol parametreleri

  • media_idintegerzorunlu
    Medya depo kimliği (yalnız rakam).

Sorgu parametreleri

  • metaintegeristeğe bağlı
    1 dosya yerine JSON üstveri döndürür.Değerler: 0, 1

Başlıklar

  • Rangeisteğe bağlı
    Parça indirme, ör. bytes=0-1048575. Yanıt 206 Partial Content olur.
  • If-None-Matchisteğe bağlı
    Önceki yanıttaki ETag. Dosya değişmediyse 304 Not Modified döner.

Hatalar

DurumKodNe zaman
400invalid_media_idmedia_id yalnız rakamlardan oluşmalı.
403insufficient_scopeAnahtarda inbox:read ya da messages:read kapsamı yok.
404media_not_foundKayıt yok ya da sizin hesabınıza ait değil (varlığı sızdırılmaz).
404media_file_missingKayıt var, dosya depoda bulunamadı.
416range_not_satisfiableİstenen bayt aralığı geçersiz.
curl -X GET "https://api.verimerkezi.app/wa/media/13115?meta=1" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{
  "ok": true,
  "media": {
    "media_id": 13115,
    "client_id": 27,
    "kind": "image",
    "source": "inbound",
    "mime": "image/jpeg",
    "size": 108919,
    "sha256": "5d174a5bd79a7c91cc0ce4be0be40fdf61f6ae03c2b1e8d9f0a7b6c5d4e3f2a1",
    "original_name": null,
    "created_at": "2026-10-09 20:14:58",
    "download_url": "https://api.verimerkezi.app/wa/media/13115"
  }
}

#Medya başlıklarını getir

HEAD/media/{media_id}
Dosyayı aktarmadan Content-Length, Content-Type ve ETag başlıklarını döndürür. Kapsam: inbox:read ya da messages:read
Yanıtın gövdesi yoktur.

Yol parametreleri

  • media_idintegerzorunlu
    Medya depo kimliği.

Hatalar

DurumKodNe zaman
400invalid_media_idmedia_id yalnız rakamlardan oluşmalı.
403insufficient_scopeAnahtarda inbox:read ya da messages:read kapsamı yok.
404media_not_foundKayıt yok ya da size ait değil.
curl -X HEAD "https://api.verimerkezi.app/wa/media/13115" \
  -H "Authorization: Bearer $VM_API_KEY"
Yanıt 200
{}