API v2 (bêta)
Médias
Le Répertoire média contient les fichiers de votre espace de travail : listes de prix, menus, brochures, photos de produits. Téléversez un fichier une fois, puis envoyez-le aussi souvent que vous le souhaitez avec "media": {"media_id": …} dans un message ou un rappel. C'est le même répertoire que la page Répertoire média du tableau de bord : les fichiers téléversés là-bas sont donc aussi listés ici.
| Opération | Endpoint | Scope |
|---|---|---|
| Téléverser un fichier | POST /api/v2/media | media |
| Lister les fichiers | GET /api/v2/media | media |
| Obtenir un fichier | GET /api/v2/media/{id} | media |
| Supprimer un fichier | DELETE /api/v2/media/{id} | media |
Téléverser un fichier#
https://wbiztool.com/api/v2/mediaCorps: multipart/form-data
Envoyez un fichier par requête en multipart/form-data, dans le champ file. C'est le seul endpoint v2 qui n'accepte pas de JSON. La réponse est 201 avec l'objet Média.
- Jusqu'à 64 Mo par fichier.
- Types : le type est déduit de l'extension à la fin du nom de fichier : conservez-la donc.
| Catégorie | Extensions |
|---|---|
| Images | .jpg, .jpeg, .jpe, .png, .gif, .webp, .bmp |
| Documents | .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .csv, .txt |
| Audio | .mp3, .m4a, .wav, .ogg, .oga, .aac |
| Vidéo | .mp4, .mov, .avi |
| Archives | .zip, .rar |
- Stockage : l'ensemble des fichiers de l'espace de travail peut occuper ce que son forfait autorise, de 250 Mo à 10 Go (voir Stockage par forfait). Un fichier qui ne tient pas est refusé avec
storage_full. - Un fichier image (
typeimage) est envoyé comme image par défaut ; tout le reste comme fichier. - Envoyez une
Idempotency-Keypour qu'une nouvelle tentative après un délai dépassé n'enregistre pas le fichier deux fois.
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'];Réponse (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"
}
Ensuite, envoyez-le :
{
"to": { "phone": "+919876543210" },
"text": "Here is our new price list.",
"media": { "media_id": 3301 }
}
Le destinataire voit le nom avec lequel il a été téléversé (price list.pdf) ; définissez media.file_name dans le message pour en afficher un autre.
Erreurs au téléversement#
| HTTP | Code | Quand |
|---|---|---|
400 | validation_failed | Aucun fichier dans le champ file, ou plus d'un |
413 | file_too_large | Le fichier dépasse 64 Mo |
415 | unsupported_file_type | L'extension ne fait pas partie des types ci-dessus |
415 | unsupported_content_type | La requête n'est pas en multipart/form-data (du JSON, par exemple) |
422 | storage_full | Le fichier ne tient pas dans le stockage du forfait ; used et limit indiquent combien, en octets |
502 | upload_failed | Le fichier n'a pas pu être enregistré. Réessayez (avec la même Idempotency-Key) |
Lister les fichiers#
https://wbiztool.com/api/v2/mediaLes fichiers de l'espace de travail, les plus récents d'abord, par pages (limit de 1 à 100, 25 par défaut, et cursor).
curl "https://wbiztool.com/api/v2/media?limit=100" \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
La réponse est {"data": [Media, …], "next_cursor": "…" or null}.
Obtenir un fichier#
https://wbiztool.com/api/v2/media/{id}curl https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Un fichier qui n'existe pas ou a été supprimé répond 404 media_not_found.
Supprimer un fichier#
https://wbiztool.com/api/v2/media/{id}Supprime le fichier du Répertoire média et du stockage : son url cesse donc de fonctionner. Les messages déjà envoyés gardent leur copie sur le téléphone du destinataire.
La suppression est refusée tant que quelque chose doit encore envoyer le fichier : un message en attente d'envoi (y compris celui d'une campagne), un rappel actif ou un déclencheur Google Sheets actif. La réponse est alors 409 media_in_use, et count indique combien. Annulez-les ou modifiez-les d'abord, ou attendez que les messages soient partis.
curl -X DELETE https://wbiztool.com/api/v2/media/3301 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{ "id": 3301, "deleted": true }
| HTTP | Code | Quand |
|---|---|---|
404 | media_not_found | Aucun fichier de ce type |
409 | media_in_use | Un message en attente, un rappel actif ou un déclencheur Google Sheets l'utilise encore |
L'objet Média#
| Champ | Type | Description |
|---|---|---|
id | integer | L'identifiant du fichier : le media_id avec lequel l'envoyer. |
name | string | Le nom avec lequel il a été téléversé. |
type | string | image pour les fichiers image, file pour tout le reste. |
mime_type | string | Par exemple application/pdf ou image/jpeg. |
size | integer | Taille en octets. |
url | string | Un lien public vers le fichier. Toute personne qui a le lien peut l'ouvrir : ne téléversez donc pas de fichiers qui doivent rester privés. |
created_at | string | Quand il a été téléversé. |
Voir aussi#
- Répertoire média dans le tableau de bord
- Messages → Médias : envoyer avec
media_idou un lien - Erreurs
