wbiztool-com Media API
Host files in the workspace Media directory and reuse their URLs.
Host files in the workspace Media directory and reuse their URLs.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/wbiztool-com:wbiztool-com-media-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: WbizTool Media API
version: 1.0.0
summary: Send WhatsApp messages from your own number over a REST API.
description: 'The WbizTool REST API sends WhatsApp messages (text, images and files, to numbers and groups, now or scheduled) from your own WhatsApp number, linked to WbizTool the way WhatsApp Web is linked to a phone. It is not the official WhatsApp Business API. Most endpoints authenticate with `client_id` and `api_key` sent in the request body (JSON or form fields), never in a header; the number verification endpoints use an `Authorization: Bearer` header instead. Always read the JSON body and check its `status` field, because some errors come back with HTTP 200. Guides, examples in cURL, Python, Node.js and PHP, and every error message: https://wbiztool.com/docs/'
termsOfService: https://wbiztool.com/terms/
contact:
name: WbizTool support
email: info@wbiztool.com
url: https://wbiztool.com/contact-us/
servers:
- url: https://wbiztool.com/api/v1
description: Production
tags:
- name: Media
description: Host files in the workspace Media directory and reuse their URLs.
paths:
/media/upload/:
post:
operationId: uploadMedia
tags:
- Media
summary: Upload a media file
description: 'Upload an image, document, audio, video or archive (up to 64 MB, within the workspace''s media storage) to the Media directory and get a public `file_url` to send with. Only `multipart/form-data` is read. Always HTTP 200: check `status`.'
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/media-upload-api/
requestBody:
required: true
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/UploadMediaRequest'
responses:
'200':
description: 'Uploaded (`status: 1`) or refused (`status: 0`). Errors also come back with HTTP 200 and `status: 0`: `client_id is required`, `api_key is required`, `client_id must be a valid integer`, `Invalid API key`, `Invalid client_id for this API key`, `Only POST method is supported`, `media_file is required`, `File is too large. Maximum size is 64MB. Your file: …MB`, `File type not supported. Type detected: …`, `Storage full: …`, `Error uploading file: …`.'
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/MediaUploaded'
- $ref: '#/components/schemas/MediaError'
examples:
uploaded:
value:
status: 1
message: File uploaded successfully
data:
id: 5122
file_name: media_12345_17895804001234_3f9a1c7e.pdf
original_file_name: invoice-4821.pdf
file_url: https://wbiztool-static.s3.ap-southeast-1.amazonaws.com/media/org_12345/media_12345_17895804001234_3f9a1c7e.pdf
file_type: file
file_size: 248312
file_size_display: 242.5 KB
mime_type: application/pdf
is_image: false
file_extension: pdf
created_at: '2026-09-16T10:20:31.512934+00:00'
summary: Uploaded
tooLarge:
value:
status: 0
message: 'File is too large. Maximum size is 64MB. Your file: 71.3MB'
summary: 'File is too large. Maximum size is 64MB. Your file: 71.3MB'
security: []
/media/list/:
get:
operationId: listMedia
tags:
- Media
summary: List media files
description: 'Files in the workspace''s Media directory (deleted files excluded), newest first, with filters and pages. Parameters in the query string. Always HTTP 200: check `status`.'
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/media-list-api/
parameters:
- $ref: '#/components/parameters/ClientIdQuery'
- $ref: '#/components/parameters/ApiKeyQuery'
- name: page
in: query
schema:
type: integer
minimum: 1
default: 1
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 100
default: 20
- name: file_type
in: query
schema:
type: string
enum:
- image
- file
- name: search
in: query
schema:
type: string
description: Case-insensitive match on the original or stored name.
responses:
'200':
description: 'The files (`status: 1`), newest first, or an error (`status: 0`). Errors also come back with HTTP 200 and `status: 0`: `client_id is required`, `api_key is required`, `client_id must be a valid integer`, `Invalid API key`, `Invalid client_id for this API key`, `Error retrieving media files: …`.'
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/MediaList'
- $ref: '#/components/schemas/MediaError'
examples:
list:
value:
status: 1
message: Media files retrieved successfully
data:
total_count: 1
page: 1
limit: 20
total_pages: 1
has_next: false
has_previous: false
media_files:
- id: 5123
file_name: media_12345_17895806123456_b81e04d9.jpg
original_file_name: diwali-sale.jpg
file_url: https://wbiztool-static.s3.ap-southeast-1.amazonaws.com/media/org_12345/media_12345_17895806123456_b81e04d9.jpg
file_type: image
file_size: 524288
file_size_display: 512.0 KB
mime_type: image/jpeg
is_image: true
file_extension: jpg
created_at: '2026-09-16T10:23:52.106447+00:00'
uploaded_by: aman@example.com
summary: One page
badKey:
value:
status: 0
message: Invalid API key
summary: Invalid API key
security: []
post:
operationId: listMediaPost
tags:
- Media
summary: List media files (JSON body)
description: Same as the GET form with the parameters in a JSON body, which keeps the API key out of URLs. If `client_id` is also in the query string, the body is ignored. In form fields `page` and `limit` are ignored.
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/media-list-api/#request-parameters
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ListMediaRequest'
examples:
search:
value:
client_id: 12345
api_key: YOUR_API_KEY
search: invoice
page: 1
limit: 50
responses:
'200':
description: 'The files (`status: 1`), newest first, or an error (`status: 0`). Errors also come back with HTTP 200 and `status: 0`: `client_id is required`, `api_key is required`, `client_id must be a valid integer`, `Invalid API key`, `Invalid client_id for this API key`, `Error retrieving media files: …`.'
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/MediaList'
- $ref: '#/components/schemas/MediaError'
examples:
list:
value:
status: 1
message: Media files retrieved successfully
data:
total_count: 1
page: 1
limit: 20
total_pages: 1
has_next: false
has_previous: false
media_files:
- id: 5123
file_name: media_12345_17895806123456_b81e04d9.jpg
original_file_name: diwali-sale.jpg
file_url: https://wbiztool-static.s3.ap-southeast-1.amazonaws.com/media/org_12345/media_12345_17895806123456_b81e04d9.jpg
file_type: image
file_size: 524288
file_size_display: 512.0 KB
mime_type: image/jpeg
is_image: true
file_extension: jpg
created_at: '2026-09-16T10:23:52.106447+00:00'
uploaded_by: aman@example.com
summary: One page
badKey:
value:
status: 0
message: Invalid API key
summary: Invalid API key
security: []
/media/{media_id}/:
parameters:
- $ref: '#/components/parameters/MediaId'
get:
operationId: getMedia
tags:
- Media
summary: Get a media file
description: Details and download URL of one Media directory file by ID; credentials in the query string. Always HTTP 200 (check `status`), except an HTML 404 for a non-numeric ID.
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/media-get-api/
parameters:
- $ref: '#/components/parameters/ClientIdQuery'
- $ref: '#/components/parameters/ApiKeyQuery'
responses:
'200':
description: 'The file (`status: 1`) or an error (`status: 0`). Errors also come back with HTTP 200 and `status: 0`: `client_id is required`, `api_key is required`, `client_id must be a valid integer`, `Invalid API key`, `Invalid client_id for this API key`, `Media file not found`, `Error retrieving media file: …`.'
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/MediaUploaded'
- $ref: '#/components/schemas/MediaError'
examples:
file:
value:
status: 1
message: Media file retrieved successfully
data:
id: 5122
file_name: media_12345_17895804001234_3f9a1c7e.pdf
original_file_name: invoice-4821.pdf
file_url: https://wbiztool-static.s3.ap-southeast-1.amazonaws.com/media/org_12345/media_12345_17895804001234_3f9a1c7e.pdf
file_type: file
file_size: 248312
file_size_display: 242.5 KB
mime_type: application/pdf
is_image: false
file_extension: pdf
created_at: '2026-09-16T10:20:31.512934+00:00'
modified_at: '2026-09-16T10:20:31.512961+00:00'
uploaded_by: aman@example.com
summary: Found
notFound:
value:
status: 0
message: Media file not found
summary: Media file not found
security: []
post:
operationId: getMediaPost
tags:
- Media
summary: Get a media file (JSON body)
description: Same as the GET form with `client_id` and `api_key` in a JSON body. If `client_id` is in the query string, the body is ignored.
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/media-get-api/#request-parameters
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Credentials'
examples:
credentials:
value:
client_id: 12345
api_key: YOUR_API_KEY
responses:
'200':
description: 'The file (`status: 1`) or an error (`status: 0`). Errors also come back with HTTP 200 and `status: 0`: `client_id is required`, `api_key is required`, `client_id must be a valid integer`, `Invalid API key`, `Invalid client_id for this API key`, `Media file not found`, `Error retrieving media file: …`.'
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/MediaUploaded'
- $ref: '#/components/schemas/MediaError'
examples:
file:
value:
status: 1
message: Media file retrieved successfully
data:
id: 5122
file_name: media_12345_17895804001234_3f9a1c7e.pdf
original_file_name: invoice-4821.pdf
file_url: https://wbiztool-static.s3.ap-southeast-1.amazonaws.com/media/org_12345/media_12345_17895804001234_3f9a1c7e.pdf
file_type: file
file_size: 248312
file_size_display: 242.5 KB
mime_type: application/pdf
is_image: false
file_extension: pdf
created_at: '2026-09-16T10:20:31.512934+00:00'
modified_at: '2026-09-16T10:20:31.512961+00:00'
uploaded_by: aman@example.com
summary: Found
notFound:
value:
status: 0
message: Media file not found
summary: Media file not found
security: []
components:
schemas:
MediaError:
type: object
required:
- status
- message
properties:
status:
type: integer
enum:
- 0
message:
type: string
ListMediaRequest:
allOf:
- $ref: '#/components/schemas/Credentials'
- type: object
properties:
page:
type: integer
minimum: 1
default: 1
limit:
type: integer
minimum: 1
maximum: 100
default: 20
file_type:
type: string
enum:
- image
- file
search:
type: string
description: Case-insensitive match on the original or stored name.
MediaList:
type: object
required:
- status
- message
- data
properties:
status:
type: integer
enum:
- 1
message:
type: string
data:
type: object
properties:
total_count:
type: integer
page:
type: integer
limit:
type: integer
total_pages:
type: integer
has_next:
type: boolean
has_previous:
type: boolean
media_files:
type: array
items:
$ref: '#/components/schemas/MediaFile'
Credentials:
type: object
description: Your API credentials, sent in the request body (JSON or form fields) of every request that uses them. Both come from Settings → API keys in the dashboard. The API key decides which workspace the request acts on.
required:
- client_id
- api_key
properties:
client_id:
type: integer
description: Your API Client ID from Settings → API keys.
examples:
- 12345
api_key:
type: string
description: One of your API keys from the same page. Keep it secret.
examples:
- YOUR_API_KEY
MediaFile:
type: object
properties:
id:
type: integer
description: ID of the media file.
file_name:
type: string
description: Name the file is stored under (generated by WbizTool).
original_file_name:
type: string
description: The name of the uploaded file.
file_url:
type: string
format: uri
description: Public download URL; use it as `img_url` or `file_url` when sending. Store it as it is (CDN or S3 host).
file_type:
type: string
enum:
- image
- file
file_size:
type: integer
description: Size in bytes.
file_size_display:
type: string
examples:
- 242.5 KB
mime_type:
type: string
examples:
- application/pdf
is_image:
type: boolean
file_extension:
type: string
description: Lower-case extension without the dot.
created_at:
type: string
format: date-time
uploaded_by:
type:
- string
- 'null'
description: Login username of the team member who uploaded the file. Not returned by the upload endpoint.
modified_at:
type: string
format: date-time
description: Only returned by the get-media endpoint.
UploadMediaRequest:
allOf:
- $ref: '#/components/schemas/Credentials'
- type: object
required:
- media_file
properties:
media_file:
type: string
format: binary
description: 'The file, up to 64 MB. Supported extensions: jpg jpeg png gif webp bmp, pdf doc docx xls xlsx ppt pptx txt csv, mp3 m4a wav ogg aac, mp4 mov avi, zip rar.'
MediaUploaded:
type: object
required:
- status
- message
- data
properties:
status:
type: integer
enum:
- 1
message:
type: string
data:
$ref: '#/components/schemas/MediaFile'
parameters:
ApiKeyQuery:
name: api_key
in: query
required: true
schema:
type: string
description: Your API key (query strings are often logged; POST with JSON avoids that).
example: YOUR_API_KEY
MediaId:
name: media_id
in: path
required: true
schema:
type: integer
description: ID from Upload media or List media.
example: 5122
ClientIdQuery:
name: client_id
in: query
required: true
schema:
type: integer
description: Your API Client ID.
example: 12345
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Number verification endpoints only: `Authorization: Bearer YOUR_API_KEY` (a key from Settings → API keys). Other endpoints take `client_id` and `api_key` in the body (see the `Credentials` schema).'
apiKeyQuery:
type: apiKey
in: query
name: api_key
description: Alternative for the GET number verification endpoints; the header keeps the key out of logs.
externalDocs:
description: WbizTool API documentation
url: https://wbiztool.com/docs/