Media-API
Medien hochladen (API)
Laden Sie ein Bild, ein Dokument, eine Audio- oder eine Videodatei in die Medienbibliothek Ihres Arbeitsbereichs hoch und erhalten Sie eine Download-URL zurück. Übergeben Sie diese URL an Nachricht senden oder, nur bei Bildern, als img_url an Erinnerung erstellen, wenn Sie kein eigenes Datei-Hosting haben.
https://wbiztool.com/api/v1/media/upload/Body: multipart/form-data
Die Datei wird sofort gespeichert, und die Antwort enthält ihre file_url. Hochgeladene Dateien erscheinen außerdem auf der Seite Medienverzeichnis in Ihrem Dashboard.
Kurzes Beispiel#
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');
}Ersetzen Sie 12345 und YOUR_API_KEY durch Ihre eigenen Werte. Wo Sie diese finden, steht unter Authentifizierung.
Request-Parameter#
Senden Sie den Request als multipart/form-data. JSON-Bodys und Query-String-Parameter werden von diesem Endpoint nicht gelesen.
client_idintegererforderlichIhre API-Client-ID aus Einstellungen → API-Schlüssel.
api_keystringerforderlichIhr API-Schlüssel von derselben Seite.
media_filefileerforderlichDie hochzuladende Datei, bis zu 64 MB. Ihr Typ wird anhand der Endung des Dateinamens bestimmt, der Name muss daher auf eine der unterstützten Endungen enden.
Unterstützte Dateitypen#
| Kategorie | Endungen |
|---|---|
| Bilder | .jpg, .jpeg, .png, .gif |
| Dokumente | .pdf, .doc, .xls, .ppt, .txt, .csv |
| Audio | .mp3, .wav |
| Video | .mp4, .mov |
| Archive | .zip |
Bilder werden mit file_type gleich image gespeichert, alles andere als file.
Antwort#
Ein erfolgreicher Request gibt HTTP 200 zurück:
{
"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"
}
}
| Feld | Typ | Beschreibung |
|---|---|---|
status | integer | 1, wenn die Datei hochgeladen wurde, 0, wenn der Request fehlgeschlagen ist. |
message | string | File uploaded successfully, andernfalls der Fehler. |
data.id | integer | ID der Mediendatei. Verwenden Sie sie mit Mediendatei abrufen. |
data.file_name | string | Name, unter dem die Datei gespeichert ist, von Wbiztool generiert. |
data.original_file_name | string | Der Name der hochgeladenen Datei. |
data.file_url | string | Direkte Download-URL. Verwenden Sie sie beim Senden als img_url oder file_url. |
data.file_type | string | image oder file. |
data.file_size | integer | Größe in Bytes. |
data.file_size_display | string | Lesbare Größe mit einer Nachkommastelle, zum Beispiel 242.5 KB. |
data.mime_type | string | Aus der Endung ermittelter MIME-Typ, zum Beispiel application/pdf. |
data.is_image | boolean | true, wenn file_type den Wert image hat. |
data.file_extension | string | Endung von original_file_name in Kleinbuchstaben, ohne Punkt. |
data.created_at | string | Upload-Zeitpunkt, ISO 8601 in UTC mit der Abweichung +00:00. |
Fehler#
Auch Fehler geben HTTP 200 zurück, mit status gleich 0:
{ "status": 0, "message": "File is too large. Maximum size is 64MB. Your file: 71.3MB" }
| Meldung | Lösung |
|---|---|
Only POST method is supported | Senden Sie einen POST-Request. |
client_id is required | Fügen Sie client_id als Formularfeld hinzu. Prüfen Sie, ob der Body multipart/form-data ist und nicht JSON. |
api_key is required | Fügen Sie api_key als Formularfeld hinzu. |
media_file is required | Senden Sie die Datei in einem Feld namens media_file. |
client_id must be a valid integer | Senden Sie client_id als Zahl. |
Invalid API key | Prüfen Sie, ob der Schlüssel existiert und nicht gelöscht oder deaktiviert wurde. |
Invalid client_id for this API key | Der Schlüssel gehört zu einer anderen client_id. |
File is too large. Maximum size is 64MB. Your file: …MB | Laden Sie eine Datei mit höchstens 64 MB hoch. |
File type not supported. Type detected: … | Verwenden Sie eine der unterstützten Endungen. |
Error uploading file: … | Der Upload konnte nicht abgeschlossen werden. Versuchen Sie es erneut. Diese Meldung erhalten Sie auch, wenn der API-Schlüssel mit keinem Arbeitsbereich verknüpft ist; erstellen Sie einen neuen Schlüssel in dem Arbeitsbereich, den Sie verwenden möchten. |
Hochladen und senden#
Laden Sie die Datei hoch und übergeben Sie dann file_url an Nachricht senden: als img_url mit msg_type 1 für Bilder oder als file_url mit msg_type 2 für andere Dateien.
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());Nachricht senden hat eine eigene Liste von Dateiendungen. Von den Typen, die diese API akzeptiert, werden .doc-, .ppt-, .csv-, .zip-, .wav- und .mov-Dateien, die mit msg_type 2 gesendet werden, mit angehängtem .pdf im Namen zugestellt (zum Beispiel brochure.doc.pdf). Konvertieren Sie Dokumente vor dem Senden in PDF. Siehe Bilder und Dateien senden. Der Name wird außerdem in Kleinbuchstaben gesendet (Invoice-4821.PDF kommt als invoice-4821.pdf an).
Mit msg_type 1 gesendete Bilder dürfen höchstens 16 MB groß sein. Größere Bilder lassen sich hier zwar hochladen, schlagen aber beim Senden mit File exceeds WhatsApp size limit (16MB max) fehl. Komprimieren Sie sie vorher oder senden Sie sie als Datei mit msg_type 2.
Tipps#
- Uploads wiederverwenden. Speichern Sie die
idoderfile_urlund senden Sie dieselbe Datei mehrfach, statt sie erneut hochzuladen. - Aussagekräftige Originalnamen verwenden.
original_file_namesehen Sie im Dashboard, und der Wert eignet sich gut alsfile_namebeim Senden. - Frühere Uploads finden Sie mit Medien auflisten.
