Media
Upload files once, then reference them by media_id in messages.
Upload a file
Section titled “Upload a file”POST
/v1/mediaAvailableMultipart upload. Limits follow WhatsApp: images 5 MB, video 16 MB, audio 16 MB,
documents 100 MB. Returns a media_id to use in messages.
Request body (multipart/form-data)
| Field | Type | Description |
|---|---|---|
file required |
string |
curl -X POST "https://api.waasl.io/v1/media" \ -H "Authorization: Bearer $WAASL_API_KEY" \ -F "file=@./menu.jpg"import { openAsBlob } from "node:fs";
const form = new FormData();form.append("file", await openAsBlob("./menu.jpg"), "menu.jpg");
const res = await fetch("https://api.waasl.io/v1/media", { method: "POST", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` }, body: form,});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.post( "https://api.waasl.io/v1/media", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"}, files={"file": open("menu.jpg", "rb")},)r.raise_for_status()print(r.json())Response 201 — Stored file
{ "id": "med_k2Pz8", "mime": "image/jpeg", "filename": "menu.jpg", "size_bytes": 284113}Errors: 413 File too large
Download a file
Section titled “Download a file”GET
/v1/media/{media_id}AvailableStreams the file bytes — including media your contacts sent you.
Path parameters
| Field | Type | Description |
|---|---|---|
media_id required |
string |
curl "https://api.waasl.io/v1/media/med_k2Pz8" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/media/med_k2Pz8", { headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` },});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.get( "https://api.waasl.io/v1/media/med_k2Pz8", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Returns 200 — File bytes.
Errors: 404 Not found in this workspace