API v2 (beta)
Medya
Medya klasörü, çalışma alanınızın dosyalarını tutar: fiyat listeleri, menüler, broşürler, ürün fotoğrafları. Bir dosyayı bir kez yükleyin, ardından bir mesajda veya bir hatırlatıcıda "media": {"media_id": …} ile istediğiniz kadar gönderin. Paneldeki Medya klasörü sayfasıyla aynı klasördür; orada yüklenen dosyalar burada da listelenir.
| İşlem | Endpoint | Kapsam |
|---|---|---|
| Dosya yükleyin | POST /api/v2/media | media |
| Dosyaları listeleyin | GET /api/v2/media | media |
| Bir dosyayı alın | GET /api/v2/media/{id} | media |
| Bir dosyayı silin | DELETE /api/v2/media/{id} | media |
Dosya yükleyin#
https://wbiztool.com/api/v2/mediaGövde: multipart/form-data
Her istekte bir dosyayı multipart/form-data olarak, file alanında gönderin. JSON almayan tek v2 endpoint'i budur. Yanıt, Media nesnesiyle birlikte 201 olur.
- Dosya başına en fazla 64 MB.
- Türler: tür, dosya adının sonundaki uzantıdan belirlenir; bu yüzden uzantıyı koruyun.
| Tür | Uzantılar |
|---|---|
| Görseller | .jpg, .jpeg, .jpe, .png, .gif, .webp, .bmp |
| Belgeler | .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .csv, .txt |
| Ses | .mp3, .m4a, .wav, .ogg, .oga, .aac |
| Video | .mp4, .mov, .avi |
| Arşivler | .zip, .rar |
- Depolama: çalışma alanının tüm dosyaları birlikte planının izin verdiği kadar yer kaplayabilir; bu 250 MB ile 10 GB arasındadır (bkz. Plana göre depolama). Sığmayan bir dosya
storage_fullile reddedilir. - Bir görsel dosyası (
typeimage) varsayılan olarak görsel olarak, diğer her şey dosya olarak gönderilir. - Zaman aşımından sonraki bir yeniden deneme dosyayı iki kez kaydetmesin diye bir
Idempotency-Keygönderin.
curl -X POST https://wbiztool.com/api/v2/media \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Idempotency-Key: price-list-2026-10" \
-F "file=@./price list.pdf"import os
import requests
with open("price list.pdf", "rb") as f:
response = requests.post(
"https://wbiztool.com/api/v2/media",
headers={"Authorization": f"Bearer {os.environ['WBIZTOOL_API_KEY']}"},
files={"file": ("price list.pdf", f, "application/pdf")},
timeout=120,
)
media = response.json()
print(response.status_code, media.get("id"), media.get("url"))// Node.js 20+ (built-in fetch, FormData and fs.openAsBlob). Save as .mjs to use top-level await.
import { openAsBlob } from "node:fs";
const form = new FormData();
form.append("file", await openAsBlob("./price list.pdf"), "price list.pdf");
// Don't set Content-Type yourself; fetch adds the multipart boundary.
const response = await fetch("https://wbiztool.com/api/v2/media", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.WBIZTOOL_API_KEY}` },
body: form,
});
const media = await response.json();
console.log(response.status, media.id, media.url);<?php
$ch = curl_init('https://wbiztool.com/api/v2/media');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('WBIZTOOL_API_KEY')],
// An array body makes cURL send multipart/form-data.
CURLOPT_POSTFIELDS => ['file' => new CURLFile('/path/to/price list.pdf', 'application/pdf', 'price list.pdf')],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
$media = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $media['id'] . ' ' . $media['url'];Yanıt (201):
{
"id": 3301,
"name": "price list.pdf",
"type": "file",
"mime_type": "application/pdf",
"size": 182344,
"url": "https://media.wbiztool.com/media/org_5012/media_5012_17608123450000_0.pdf",
"created_at": "2026-10-18T10:31:40.120Z"
}
Ardından gönderin:
{
"to": { "phone": "+919876543210" },
"text": "Here is our new price list.",
"media": { "media_id": 3301 }
}
Alıcı, dosyanın yüklendiği adı (price list.pdf) görür; başka bir ad göstermek için mesajda media.file_name değerini ayarlayın.
Yüklerken oluşan hatalar#
| HTTP | Kod | Ne zaman |
|---|---|---|
400 | validation_failed | file alanında dosya yok veya birden fazla dosya var |
413 | file_too_large | Dosya 64 MB'tan büyük |
415 | unsupported_file_type | Uzantı yukarıdaki türlerden biri değil |
415 | unsupported_content_type | İstek multipart/form-data değil (örneğin JSON) |
422 | storage_full | Dosya planın depolama alanına sığmıyor; used ve limit bayt cinsinden ne kadar olduğunu söyler |
502 | upload_failed | Dosya kaydedilemedi. Yeniden deneyin (aynı Idempotency-Key ile) |
Dosyaları listeleyin#
https://wbiztool.com/api/v2/mediaÇalışma alanının dosyaları, en yeniler önce, sayfalar hâlinde (limit 1 ile 100 arası, varsayılan 25, ve cursor).
curl "https://wbiztool.com/api/v2/media?limit=100" \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Yanıt {"data": [Media, …], "next_cursor": "…" or null} biçimindedir.
Bir dosyayı alın#
https://wbiztool.com/api/v2/media/{id}curl https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Var olmayan veya silinmiş bir dosya 404 media_not_found döndürür.
Bir dosyayı silin#
https://wbiztool.com/api/v2/media/{id}Dosyayı Medya klasöründen ve depolamadan siler; böylece url bağlantısı çalışmayı durdurur. Önceden gönderilmiş mesajların kopyası alıcının telefonunda kalır.
Bir şey dosyayı hâlâ gönderecekse silme reddedilir: gönderilmeyi bekleyen bir mesaj (bir kampanyanınkiler dahil), etkin bir hatırlatıcı veya etkin bir Google Sheets tetikleyicisi. Bu durumda yanıt 409 media_in_use olur ve count kaç tane olduğunu söyler. Önce bunları iptal edin veya değiştirin ya da mesajlar gönderilene kadar bekleyin.
curl -X DELETE https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{ "id": 3301, "deleted": true }
| HTTP | Kod | Ne zaman |
|---|---|---|
404 | media_not_found | Böyle bir dosya yok |
409 | media_in_use | Bekleyen bir mesaj, etkin bir hatırlatıcı veya bir Google Sheets tetikleyicisi dosyayı hâlâ kullanıyor |
Media nesnesi#
| Alan | Tür | Açıklama |
|---|---|---|
id | integer | Dosyanın kimliği: dosyayı göndermek için kullanılan media_id. |
name | string | Dosyanın yüklendiği ad. |
type | string | Görsel dosyaları için image, diğer her şey için file. |
mime_type | string | Örneğin application/pdf veya image/jpeg. |
size | integer | Bayt cinsinden boyut. |
url | string | Dosyaya giden herkese açık bir bağlantı. Bağlantıya sahip herkes dosyayı açabilir; bu yüzden gizli kalması gereken dosyaları yüklemeyin. |
created_at | string | Dosyanın yüklendiği zaman. |
İlgili sayfalar#
- Paneldeki Medya klasörü
- Mesajlar → Medya:
media_idveya bir bağlantıyla gönderme - Hatalar
