Upload a file to send by its id
Build a request to copy
This page never sends a request. Fill in the fields, then copy the request and run it from your server.
The body is multipart/form-data. Send the file as the file part.
curl -X POST 'https://api.whatsable.app/v1/media' \ -F 'file=string'
Uploads one file. For 30 days, you can send it by its id from any number this key may use. Send a multipart/form-data body with one file part.
bearerAuthAuthorizationBearer <nfy_live_<32 characters>>An API key from Settings > API keys, sent as Authorization: Bearer <key>.
Idempotency-Key?stringAny string up to 255 characters. A repeat with the same key and body answers the stored response; with another body, 409 idempotency_key_reused.
length <= 255multipart/form-data- body
One file to upload, in a file part.
file*fileThe file, at most 100 MiB, of a type WhatsApp can send. The bytes decide the type, or the part's content type and file name when the bytes name none.
binaryThe file was stored.
application/json- response
An uploaded file, sendable by its id for 30 days. Each send checks the file against its own type's limits: a 10 MiB JPEG can be sent as a document, and as an image it answers 400 media_too_large.
object*stringid*stringSend it as media_id in POST /v1/messages, POST /v1/scheduled-messages or a template's media header, from any number this key may use.
1 <= length <= 64mime_type*stringThe file's content type, read from its bytes whenever they name one.
size_bytes*integerThe file size in bytes.
0 <= value <= 9007199254740991filename*|The name the upload gave the file, or null when its part carried none.
expires_at*stringWhen the media_id stops working, 30 days after the upload. Upload the file again after it.
date-timecurl -X POST 'https://api.whatsable.app/v1/media' \ -F 'file=string'{ "object": "media", "id": "cm2v8u1a00001qz8h2b3c4d5e", "mime_type": "image/jpeg", "size_bytes": 48213, "filename": "box.jpg", "expires_at": "2026-11-20T19:51:21Z"}Download a message's media file GET
Downloads the file of a message, from the link in its `media.url`. The link needs no API key, because its signature is the credential. It expires after 15 minutes. An expired, changed or broken link gets the same 404 as a deleted file.
List conversations GET
Lists the conversations on the numbers this key may use, the latest `last_message_at` first. The order changes as messages arrive, so paging can skip or repeat a conversation. To follow changes, poll with `updated_after`.