API v2 (בטא)
מדיה
ספריית המדיה מחזיקה את הקבצים של סביבת העבודה שלכם: מחירונים, תפריטים, חוברות, תמונות מוצרים. העלו קובץ פעם אחת, ואז שלחו אותו כמה פעמים שתרצו עם "media": {"media_id": …} בהודעה או בתזכורת. זו אותה ספרייה כמו הדף ספריית מדיה בלוח הבקרה, כך שגם קבצים שהועלו שם מופיעים כאן.
| פעולה | Endpoint | הרשאה |
|---|---|---|
| העלאת קובץ | POST /api/v2/media | media |
| רשימת קבצים | GET /api/v2/media | media |
| קבלת קובץ | GET /api/v2/media/{id} | media |
| מחיקת קובץ | DELETE /api/v2/media/{id} | media |
העלאת קובץ#
https://wbiztool.com/api/v2/mediaגוף הבקשה: multipart/form-data
שלחו קובץ אחד בכל בקשה כ-multipart/form-data, בשדה file. זה ה-endpoint היחיד ב-v2 שלא מקבל JSON. התגובה היא 201 עם האובייקט Media.
- עד 64 MB לכל קובץ.
- סוגים: הסוג נקבע לפי הסיומת שבסוף שם הקובץ, לכן השאירו אותה.
| סוג | סיומות |
|---|---|
| תמונות | .jpg, .jpeg, .jpe, .png, .gif, .webp, .bmp |
| מסמכים | .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .csv, .txt |
| אודיו | .mp3, .m4a, .wav, .ogg, .oga, .aac |
| וידאו | .mp4, .mov, .avi |
| קבצים דחוסים | .zip, .rar |
- אחסון: כל הקבצים של סביבת העבודה יחד יכולים לתפוס עד מה שהתוכנית שלה מאפשרת, מ-250 MB עד 10 GB (ראו נפח אחסון לפי תוכנית). קובץ שלא נכנס נדחה עם
storage_full. - קובץ תמונה (
typeimage) נשלח כברירת מחדל כתמונה; כל השאר כקובץ. - שלחו
Idempotency-Keyכדי שניסיון חוזר אחרי timeout לא ישמור את הקובץ פעמיים.
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'];תגובה (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"
}
אחר כך שלחו אותו:
{
"to": { "phone": "+919876543210" },
"text": "Here is our new price list.",
"media": { "media_id": 3301 }
}
הנמען רואה את השם שאיתו הקובץ הועלה (price list.pdf); כדי להציג שם אחר, הגדירו את media.file_name בהודעה.
שגיאות בהעלאה#
| HTTP | קוד | מתי |
|---|---|---|
400 | validation_failed | אין קובץ בשדה file, או שיש יותר מאחד |
413 | file_too_large | הקובץ גדול מ-64 MB |
415 | unsupported_file_type | הסיומת אינה אחד מהסוגים שלמעלה |
415 | unsupported_content_type | הבקשה אינה multipart/form-data (למשל JSON) |
422 | storage_full | הקובץ לא נכנס באחסון של התוכנית; used ו-limit מציינים כמה, בבתים |
502 | upload_failed | לא הצלחנו לשמור את הקובץ. נסו שוב (עם אותו Idempotency-Key) |
רשימת קבצים#
https://wbiztool.com/api/v2/mediaהקבצים של סביבת העבודה, מהחדש לישן, בדפים (limit מ-1 עד 100, ברירת המחדל 25, ו-cursor).
curl "https://wbiztool.com/api/v2/media?limit=100" \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
התגובה היא {"data": [Media, …], "next_cursor": "…" or null}.
קבלת קובץ#
https://wbiztool.com/api/v2/media/{id}curl https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
קובץ שלא קיים או שנמחק מחזיר 404 media_not_found.
מחיקת קובץ#
https://wbiztool.com/api/v2/media/{id}מוחק את הקובץ מספריית המדיה ומהאחסון, כך שה-url שלו מפסיק לעבוד. בהודעות שכבר נשלחו, העותק נשאר בטלפון של הנמען.
המחיקה נדחית כל עוד משהו עדיין ישלח את הקובץ: הודעה שממתינה ליציאה (כולל הודעה של קמפיין), תזכורת פעילה או טריגר פעיל של Google Sheets. התגובה היא אז 409 media_in_use, ו-count מציין כמה. בטלו או שנו אותם קודם, או חכו עד שההודעות ייצאו.
curl -X DELETE https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{ "id": 3301, "deleted": true }
| HTTP | קוד | מתי |
|---|---|---|
404 | media_not_found | אין קובץ כזה |
409 | media_in_use | הודעה ממתינה, תזכורת פעילה או טריגר של Google Sheets עדיין משתמשים בו |
האובייקט Media#
| שדה | סוג | תיאור |
|---|---|---|
id | integer | המזהה של הקובץ: ה-media_id שאיתו שולחים אותו. |
name | string | השם שאיתו הוא הועלה. |
type | string | image לקובצי תמונה, file לכל השאר. |
mime_type | string | למשל application/pdf או image/jpeg. |
size | integer | הגודל בבתים. |
url | string | קישור ציבורי לקובץ. כל מי שיש לו את הקישור יכול לפתוח אותו, לכן אל תעלו קבצים שחייבים להישאר פרטיים. |
created_at | string | מתי הוא הועלה. |
מדריכים קשורים#
- ספריית מדיה בלוח הבקרה
- הודעות ← מדיה: שליחה עם
media_idאו עם קישור - שגיאות
