wbiztool-com Media API

Host files in the workspace Media directory and reuse their URLs.

Operations 5

POST /media/upload/ Upload a media file #
GET /media/list/ List media files #
POST /media/list/ List media files (JSON body) #
GET /media/{media_id}/ Get a media file #
POST /media/{media_id}/ Get a media file (JSON body) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/wbiztool-com:wbiztool-com-media-api"
All apis
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.

Get an API 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 Specification

wbiztool-com-media-api-openapi.yml Raw ↑
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/