Medya API'si
Medya yükleme API'si
Çalışma alanınızın medya kitaplığına bir görsel, belge, ses veya video dosyası yükleyin ve bir indirme URL'si alın. Kendi dosya barındırmanız olmadığında bu URL'yi Mesaj gönderme endpoint'ine veya yalnızca görseller için Hatırlatıcı oluşturma endpoint'ine img_url olarak iletin.
https://wbiztool.com/api/v1/media/upload/Gövde: multipart/form-data
Dosya hemen kaydedilir ve yanıt dosyanın file_url değerini içerir. Yüklenen dosyalar panelinizdeki Medya klasörü sayfasında da görünür.
Hızlı örnek#
curl -X POST https://wbiztool.com/api/v1/media/upload/ \
-F client_id=12345 \
-F api_key=YOUR_API_KEY \
-F media_file=@./invoice-4821.pdfimport requests
with open("invoice-4821.pdf", "rb") as f:
response = requests.post(
"https://wbiztool.com/api/v1/media/upload/",
data={"client_id": 12345, "api_key": "YOUR_API_KEY"},
files={"media_file": f},
timeout=120,
)
try:
result = response.json()
except ValueError:
# A proxy can reject a very large upload with an HTML page before it reaches Wbiztool.
raise SystemExit(f"HTTP {response.status_code}: not JSON. Check the file size.")
if result["status"] == 1:
print("Uploaded:", result["data"]["file_url"])
else:
print("Failed:", result["message"])// 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("client_id", "12345");
form.append("api_key", "YOUR_API_KEY");
form.append("media_file", await openAsBlob("./invoice-4821.pdf"), "invoice-4821.pdf");
// Don't set Content-Type yourself; fetch adds the multipart boundary.
const response = await fetch("https://wbiztool.com/api/v1/media/upload/", { method: "POST", body: form });
const result = await response.json();
if (result.status === 1) {
console.log("Uploaded:", result.data.file_url);
} else {
console.error("Failed:", result.message);
}<?php
$ch = curl_init('https://wbiztool.com/api/v1/media/upload/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
// An array body (not json_encode) makes cURL send multipart/form-data.
CURLOPT_POSTFIELDS => [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'media_file' => new CURLFile('/path/to/invoice-4821.pdf', 'application/pdf', 'invoice-4821.pdf'),
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Uploaded: ' . $result['data']['file_url'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}12345 ve YOUR_API_KEY değerlerini kendi değerlerinizle değiştirin. Bunları nerede bulacağınız için Kimlik doğrulama bölümüne bakın.
İstek parametreleri#
İsteği multipart/form-data olarak gönderin. Bu endpoint JSON gövdelerini ve sorgu dizesi parametrelerini okumaz.
client_idintegerzorunluAyarlar → API anahtarları sayfasındaki API Client ID'niz.
api_keystringzorunluAynı sayfadaki API anahtarınız.
media_filefilezorunluYüklenecek dosya, en fazla 64 MB. Türü dosya adının uzantısına göre belirlenir; bu yüzden ad desteklenen uzantılardan biriyle bitmelidir.
Desteklenen dosya türleri#
| Kategori | Uzantılar |
|---|---|
| Görseller | .jpg, .jpeg, .png, .gif |
| Belgeler | .pdf, .doc, .xls, .ppt, .txt, .csv |
| Ses | .mp3, .wav |
| Video | .mp4, .mov |
| Arşivler | .zip |
Görseller file_type değeri image olarak kaydedilir; diğer her şey file olur.
Yanıt#
Başarılı bir istek HTTP 200 döndürür:
{
"status": 1,
"message": "File uploaded successfully",
"data": {
"id": 5122,
"file_name": "media_12345_17895804001234.pdf",
"original_file_name": "invoice-4821.pdf",
"file_url": "https://wbiztool-static.s3.ap-southeast-1.amazonaws.com/media/org_12345/media_12345_17895804001234.pdf",
"file_type": "file",
"file_size": 248312,
"file_size_display": "242.5 KB",
"mime_type": "application/pdf",
"is_image": false,
"file_extension": "pdf",
"created_at": "2026-09-16T10:20:31.512934+00:00"
}
}
| Alan | Tür | Açıklama |
|---|---|---|
status | integer | Dosya yüklendiyse 1, istek başarısız olduysa 0. |
message | string | File uploaded successfully, aksi halde hata mesajı. |
data.id | integer | Medya dosyasının ID'si. Medya dosyası getirme ile kullanın. |
data.file_name | string | Dosyanın kaydedildiği, Wbiztool tarafından oluşturulan ad. |
data.original_file_name | string | Yüklediğiniz dosyanın adı. |
data.file_url | string | Doğrudan indirme URL'si. Gönderirken img_url veya file_url olarak kullanın. |
data.file_type | string | image veya file. |
data.file_size | integer | Bayt cinsinden boyut. |
data.file_size_display | string | Tek ondalıklı okunabilir boyut, örneğin 242.5 KB. |
data.mime_type | string | Uzantıdan belirlenen MIME türü, örneğin application/pdf. |
data.is_image | boolean | file_type değeri image olduğunda true. |
data.file_extension | string | original_file_name değerinin noktasız, küçük harfli uzantısı. |
data.created_at | string | Yükleme zamanı, +00:00 farkıyla UTC'de ISO 8601. |
Hatalar#
Hatalar da status değeri 0 olarak HTTP 200 döndürür:
{ "status": 0, "message": "File is too large. Maximum size is 64MB. Your file: 71.3MB" }
| Mesaj | Nasıl düzeltilir |
|---|---|
Only POST method is supported | Bir POST isteği gönderin. |
client_id is required | client_id değerini form alanı olarak ekleyin. Gövdenin JSON değil, multipart/form-data olduğunu kontrol edin. |
api_key is required | api_key değerini form alanı olarak ekleyin. |
media_file is required | Dosyayı media_file adlı bir alanda gönderin. |
client_id must be a valid integer | client_id değerini sayı olarak gönderin. |
Invalid API key | Anahtarın mevcut olduğunu ve silinmediğini veya devre dışı bırakılmadığını kontrol edin. |
Invalid client_id for this API key | Anahtar farklı bir client_id değerine ait. |
File is too large. Maximum size is 64MB. Your file: …MB | 64 MB veya daha küçük bir dosya yükleyin. |
File type not supported. Type detected: … | Desteklenen uzantılardan birini kullanın. |
Error uploading file: … | Yükleme tamamlanamadı. Tekrar deneyin. API anahtarı bir çalışma alanına bağlı değilse de bunu alırsınız; kullanmak istediğiniz çalışma alanında yeni bir anahtar oluşturun. |
Yükleme ve gönderme#
Dosyayı yükleyin, ardından file_url değerini Mesaj gönderme endpoint'ine iletin: görseller için msg_type 1 ile img_url olarak, diğer dosyalar için msg_type 2 ile file_url olarak.
import requests
BASE = "https://wbiztool.com/api/v1"
AUTH = {"client_id": 12345, "api_key": "YOUR_API_KEY"}
with open("invoice-4821.pdf", "rb") as f:
upload = requests.post(f"{BASE}/media/upload/", data=AUTH, files={"media_file": f}, timeout=120).json()
if upload["status"] != 1:
raise SystemExit("Upload failed: " + upload["message"])
media = upload["data"]
message = {
**AUTH,
"whatsapp_client": 678,
"country_code": "91",
"phone": "9876543210",
"msg": "Your invoice for order #4821 is attached.",
}
if media["is_image"]:
message.update(msg_type=1, img_url=media["file_url"])
else:
message.update(msg_type=2, file_url=media["file_url"], file_name=media["original_file_name"])
sent = requests.post(f"{BASE}/send_msg/", json=message, timeout=60).json()
print(sent)// Node.js 20+ (built-in fetch, FormData and fs.openAsBlob). Save as .mjs to use top-level await.
import { openAsBlob } from "node:fs";
const BASE = "https://wbiztool.com/api/v1";
const form = new FormData();
form.append("client_id", "12345");
form.append("api_key", "YOUR_API_KEY");
form.append("media_file", await openAsBlob("./invoice-4821.pdf"), "invoice-4821.pdf");
const upload = await (await fetch(`${BASE}/media/upload/`, { method: "POST", body: form })).json();
if (upload.status !== 1) throw new Error(`Upload failed: ${upload.message}`);
const media = upload.data;
const message = {
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
country_code: "91",
phone: "9876543210",
msg: "Your invoice for order #4821 is attached.",
...(media.is_image
? { msg_type: 1, img_url: media.file_url }
: { msg_type: 2, file_url: media.file_url, file_name: media.original_file_name }),
};
const sent = await fetch(`${BASE}/send_msg/`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(message),
});
console.log(await sent.json());Mesaj gönderme endpoint'inin kendi dosya uzantısı listesi vardır. Bu API'nin kabul ettiği türlerden .doc, .ppt, .csv, .zip, .wav ve .mov dosyaları msg_type 2 ile gönderildiğinde adlarına .pdf eklenerek teslim edilir (örneğin brochure.doc.pdf). Belgeleri göndermeden önce PDF'ye dönüştürün. Bkz. Görsel ve dosya gönderme. Ad ayrıca küçük harflerle gönderilir (Invoice-4821.PDF, invoice-4821.pdf olarak ulaşır).
msg_type 1 ile gönderilen görseller 16 MB veya daha küçük olmalıdır. Daha büyük görseller burada sorunsuz yüklenir ama gönderilirken File exceeds WhatsApp size limit (16MB max) ile başarısız olur. Önce sıkıştırın veya msg_type 2 ile dosya olarak gönderin.
İpuçları#
- Yüklemeleri yeniden kullanın.
idveyafile_urldeğerini saklayın ve aynı dosyayı yeniden yüklemek yerine birçok kez gönderin. - Orijinal adı anlamlı tutun.
original_file_namepanelde gördüğünüz addır ve gönderirkenfile_nameiçin iyi bir değerdir. - Önceki yüklemeleri bulun: Medya listeleme ile bulun.
