API Media
API Unggah media
Unggah file gambar, dokumen, audio, atau video ke pustaka media workspace Anda dan dapatkan URL unduhannya. Kirim URL tersebut ke Kirim pesan, atau, khusus gambar, ke Buat pengingat sebagai img_url, jika Anda tidak memiliki hosting file sendiri.
https://wbiztool.com/api/v1/media/upload/Body: multipart/form-data
File langsung disimpan dan respons menyertakan file_url-nya. File yang diunggah juga muncul di halaman Media directory (Direktori media) di dashboard Anda.
Contoh singkat#
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');
}Ganti 12345 dan YOUR_API_KEY dengan nilai Anda sendiri. Lihat Autentikasi untuk mengetahui di mana menemukannya.
Parameter request#
Kirim request sebagai multipart/form-data. Body JSON dan parameter query string tidak dibaca oleh endpoint ini.
client_idintegerwajibAPI Client ID Anda dari Settings → API keys (Pengaturan → Kunci API).
api_keystringwajibAPI key Anda dari halaman yang sama.
media_filefilewajibFile yang akan diunggah, hingga 64 MB. Jenisnya ditentukan oleh ekstensi nama file, jadi nama harus diakhiri salah satu ekstensi yang didukung.
Jenis file yang didukung#
| Kategori | Ekstensi |
|---|---|
| Gambar | .jpg, .jpeg, .png, .gif |
| Dokumen | .pdf, .doc, .xls, .ppt, .txt, .csv |
| Audio | .mp3, .wav |
| Video | .mp4, .mov |
| Arsip | .zip |
Gambar disimpan dengan file_type bernilai image; semua jenis lainnya bernilai file.
Respons#
Request yang berhasil mengembalikan HTTP 200:
{
"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"
}
}
| Field | Tipe | Deskripsi |
|---|---|---|
status | integer | 1 jika file berhasil diunggah, 0 jika request gagal. |
message | string | File uploaded successfully, selain itu berisi error. |
data.id | integer | ID file media. Gunakan dengan Ambil file media. |
data.file_name | string | Nama penyimpanan file, dibuat oleh Wbiztool. |
data.original_file_name | string | Nama file yang Anda unggah. |
data.file_url | string | URL unduhan langsung. Gunakan sebagai img_url atau file_url saat mengirim. |
data.file_type | string | image atau file. |
data.file_size | integer | Ukuran dalam byte. |
data.file_size_display | string | Ukuran yang mudah dibaca dengan satu desimal, misalnya 242.5 KB. |
data.mime_type | string | Tipe MIME yang ditentukan dari ekstensi, misalnya application/pdf. |
data.is_image | boolean | true jika file_type bernilai image. |
data.file_extension | string | Ekstensi original_file_name dalam huruf kecil, tanpa titik. |
data.created_at | string | Waktu unggah, ISO 8601 dalam UTC dengan offset +00:00. |
Error#
Error juga mengembalikan HTTP 200, dengan status bernilai 0:
{ "status": 0, "message": "File is too large. Maximum size is 64MB. Your file: 71.3MB" }
| Pesan | Cara memperbaikinya |
|---|---|
Only POST method is supported | Kirim request POST. |
client_id is required | Tambahkan client_id sebagai field formulir. Pastikan body berupa multipart/form-data, bukan JSON. |
api_key is required | Tambahkan api_key sebagai field formulir. |
media_file is required | Kirim file di field bernama media_file. |
client_id must be a valid integer | Kirim client_id sebagai angka. |
Invalid API key | Pastikan key tersebut ada dan belum dihapus atau dinonaktifkan. |
Invalid client_id for this API key | Key tersebut milik client_id lain. |
File is too large. Maximum size is 64MB. Your file: …MB | Unggah file berukuran 64 MB atau kurang. |
File type not supported. Type detected: … | Gunakan salah satu ekstensi yang didukung. |
Error uploading file: … | Unggahan tidak dapat diselesaikan. Coba lagi. Anda juga mendapatkan error ini jika API key tidak terhubung ke workspace; buat key baru di workspace yang ingin Anda gunakan. |
Unggah lalu kirim#
Unggah file, lalu kirim file_url ke Kirim pesan: sebagai img_url dengan msg_type 1 untuk gambar, atau sebagai file_url dengan msg_type 2 untuk file lainnya.
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());Kirim pesan memiliki daftar ekstensi file sendiri. Dari jenis yang diterima API ini, file .doc, .ppt, .csv, .zip, .wav, dan .mov yang dikirim dengan msg_type 2 diterima dengan tambahan .pdf di namanya (misalnya brochure.doc.pdf). Konversi dokumen ke PDF sebelum mengirimnya. Lihat Mengirim gambar dan file. Nama juga dikirim dalam huruf kecil (Invoice-4821.PDF diterima sebagai invoice-4821.pdf).
Gambar yang dikirim dengan msg_type 1 harus berukuran 16 MB atau lebih kecil. Gambar yang lebih besar berhasil diunggah di sini, tetapi gagal saat dikirim dengan File exceeds WhatsApp size limit (16MB max). Kompres terlebih dahulu, atau kirim sebagai file dengan msg_type 2.
Tips#
- Gunakan ulang unggahan. Simpan
idataufile_urldan kirim file yang sama berkali-kali, alih-alih mengunggahnya lagi. - Gunakan nama asli yang bermakna.
original_file_nameadalah nama yang Anda lihat di dashboard dan nilai yang baik untukfile_namesaat mengirim. - Temukan unggahan sebelumnya dengan Daftar media.
