API v2 (Beta)
Medien
Das Medienverzeichnis enthält die Dateien Ihres Arbeitsbereichs: Preislisten, Speisekarten, Broschüren, Produktfotos. Laden Sie eine Datei einmal hoch und senden Sie sie dann so oft Sie möchten mit "media": {"media_id": …} in einer Nachricht oder einer Erinnerung. Es ist dasselbe Verzeichnis wie die Seite Medienverzeichnis im Dashboard, dort hochgeladene Dateien erscheinen also auch hier.
| Vorgang | Endpoint | Scope |
|---|---|---|
| Datei hochladen | POST /api/v2/media | media |
| Dateien auflisten | GET /api/v2/media | media |
| Datei abrufen | GET /api/v2/media/{id} | media |
| Datei löschen | DELETE /api/v2/media/{id} | media |
Datei hochladen#
https://wbiztool.com/api/v2/mediaBody: multipart/form-data
Senden Sie eine Datei pro Request als multipart/form-data im Feld file. Dies ist der einzige v2-Endpoint, der kein JSON annimmt. Die Antwort ist 201 mit dem Media-Objekt.
- Bis zu 64 MB pro Datei.
- Typen: Der Typ ergibt sich aus der Endung am Ende des Dateinamens, behalten Sie diese also bei.
| Art | Endungen |
|---|---|
| Bilder | .jpg, .jpeg, .jpe, .png, .gif, .webp, .bmp |
| Dokumente | .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .csv, .txt |
| Audio | .mp3, .m4a, .wav, .ogg, .oga, .aac |
| Video | .mp4, .mov, .avi |
| Archive | .zip, .rar |
- Speicherplatz: Alle Dateien des Arbeitsbereichs zusammen dürfen so viel belegen, wie sein Plan erlaubt, von 250 MB bis 10 GB (siehe Speicherplatz pro Plan). Eine Datei, die nicht mehr passt, wird mit
storage_fullabgelehnt. - Eine Bilddatei (
typeimage) wird standardmäßig als Bild gesendet, alles andere als Datei. - Senden Sie einen
Idempotency-Keymit, damit eine Wiederholung nach einem Timeout die Datei nicht doppelt speichert.
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'];Antwort (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"
}
Dann senden Sie sie:
{
"to": { "phone": "+919876543210" },
"text": "Here is our new price list.",
"media": { "media_id": 3301 }
}
Der Empfänger sieht den Namen, mit dem die Datei hochgeladen wurde (price list.pdf); setzen Sie media.file_name in der Nachricht, um einen anderen anzuzeigen.
Fehler beim Hochladen#
| HTTP | Code | Wann |
|---|---|---|
400 | validation_failed | Keine Datei im Feld file oder mehr als eine |
413 | file_too_large | Die Datei ist größer als 64 MB |
415 | unsupported_file_type | Die Endung gehört zu keinem der obigen Typen |
415 | unsupported_content_type | Der Request ist nicht multipart/form-data (sondern etwa JSON) |
422 | storage_full | Die Datei passt nicht in den Speicherplatz des Plans; used und limit nennen die Werte in Byte |
502 | upload_failed | Die Datei konnte nicht gespeichert werden. Versuchen Sie es erneut (mit demselben Idempotency-Key) |
Dateien auflisten#
https://wbiztool.com/api/v2/mediaDie Dateien des Arbeitsbereichs, die neuesten zuerst, in Seiten (limit 1 bis 100, Standard 25, und cursor).
curl "https://wbiztool.com/api/v2/media?limit=100" \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Die Antwort ist {"data": [Media, …], "next_cursor": "…" or null}.
Datei abrufen#
https://wbiztool.com/api/v2/media/{id}curl https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Eine Datei, die es nicht gibt oder die gelöscht wurde, antwortet mit 404 media_not_found.
Datei löschen#
https://wbiztool.com/api/v2/media/{id}Löscht die Datei aus dem Medienverzeichnis und aus dem Speicher, ihre url funktioniert danach also nicht mehr. Bereits gesendete Nachrichten behalten ihre Kopie auf dem Telefon des Empfängers.
Das Löschen wird abgelehnt, solange etwas die Datei noch senden wird: eine Nachricht, die auf den Versand wartet (auch aus einer Kampagne), eine aktive Erinnerung oder ein aktiver Google-Sheets-Trigger. Die Antwort ist dann 409 media_in_use, und count nennt die Anzahl. Stornieren oder ändern Sie diese zuerst oder warten Sie, bis die Nachrichten gesendet wurden.
curl -X DELETE https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{ "id": 3301, "deleted": true }
| HTTP | Code | Wann |
|---|---|---|
404 | media_not_found | Keine solche Datei |
409 | media_in_use | Eine wartende Nachricht, eine aktive Erinnerung oder ein Google-Sheets-Trigger verwendet sie noch |
Das Media-Objekt#
| Feld | Typ | Beschreibung |
|---|---|---|
id | integer | Die ID der Datei: die media_id, mit der Sie sie senden. |
name | string | Der Name, mit dem sie hochgeladen wurde. |
type | string | image für Bilddateien, file für alles andere. |
mime_type | string | Zum Beispiel application/pdf oder image/jpeg. |
size | integer | Größe in Byte. |
url | string | Ein öffentlicher Link zur Datei. Jeder mit dem Link kann sie öffnen, laden Sie also keine Dateien hoch, die privat bleiben müssen. |
created_at | string | Wann sie hochgeladen wurde. |
Verwandte Themen#
- Medienverzeichnis im Dashboard
- Nachrichten → Medien: Senden mit
media_idoder einem Link - Fehler
