WhatsAble
API v1AI bots

Add a file a bot may send

posthttps://api.whatsable.app/v1/ai-bots/{id}/files
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.

Request
curl -X POST 'https://api.whatsable.app/v1/ai-bots/string/files' \
  -F 'file=string' \
  -F 'description=string'

Adds a file that an AI bot may send to customers. Send a multipart/form-data body with one file part and a description field. The change takes effect on the bot's next reply, also while the bot answers customers. An archived bot takes no new files, and a bot holds at most ten.

Authorization

bearerAuth
headerAuthorizationBearer <nfy_live_<32 characters>>

An API key from Settings > API keys, sent as Authorization: Bearer <key>.

Path Parameters

id*string

The bot id.

Length1 <= length <= 64

Header Parameters

Idempotency-Key?string

Any string up to 255 characters. A repeat with the same key and body answers the stored response; with another body, 409 idempotency_key_reused.

Lengthlength <= 255

Request Body

multipart/form-data
  1. body

A file the bot may send, in a file part, with the description it chooses it by.

file*file

An image, a video, an audio file or a document WhatsApp can send, at most 25 MiB.

Formatbinary
description*string

When the bot should send this file. The bot chooses files by this sentence and nothing else.

Length1 <= length <= 1000
display_name?string

The name the bot knows the file by. Defaults to the filename. Blank is the filename too.

Lengthlength <= 120

Response Body

The file.

application/json
  1. response

A file the bot may send to a customer, at most 10 per bot. The bot never reads it.

object*string
id*string
Length1 <= length <= 64
bot_id*string
Length1 <= length <= 64
filename*string
display_name*string

The name the bot knows the file by. Defaults to the filename.

kind*string
Value in"image""video""audio""document"
mime_type*string
size_bytes*integer
Range0 <= value <= 9007199254740991
description*string

When the bot should send this file. The bot chooses files by this sentence and nothing else.

active*boolean

Whether the bot may send it. An inactive file stays stored.

created_at*string
Formatdate-time
Example Request
curl -X POST 'https://api.whatsable.app/v1/ai-bots/string/files' \  -F 'file=string' \  -F 'description=string'
Example Response
{  "object": "ai_bot_file",  "id": "cm2v8g1a00001qz8h1r2s3t4u",  "bot_id": "cm2v8b1a00001qz8h3j4k5l6m",  "filename": "catalog-2026.pdf",  "display_name": "Catalog 2026",  "kind": "document",  "mime_type": "application/pdf",  "size_bytes": 2483120,  "description": "Our full catalog with prices. Send it when the customer asks what we sell.",  "active": true,  "created_at": "2026-10-20T19:51:21Z"}