---
title: "[BETA] post a text or media status/story"
method: POST
path: "/instances/{id}/client/action/post-status"
tags: ["story"]
---

# \[BETA\] post a text or media status/story

`POST /instances/{id}/client/action/post-status`

## Request

- Base URL: `https://waapi.app/api/v1`
- URL: `https://waapi.app/api/v1/instances/{id}/client/action/post-status`
- Auth: HTTP bearer

Publishes a status update visible to contacts per the user's privacy settings. Provide `content` for a text status (with optional `backgroundColor` ARGB integer and `fontStyle` 0-7) or `mediaUrl` (plus optional `mediaCaption`) for an image/video/audio status. Note: This endpoint is currently in beta and may change without notice.

## Path parameters

- `id` integer, required

## Request body

- object
  - `content` string: Text content for a text status, or caption fallback for media
  - `mediaUrl` string, uri: Publicly reachable URL of image/video/audio for a media status
  - `mediaCaption` string: Caption for a media status (overrides content)
  - `mediaName` string: Optional filename for the downloaded media
  - `backgroundColor` integer: ARGB color for text status background (e.g. 4286070949 = 0xff7acca5)
  - `fontStyle` integer: Font style index for text status, 0 through 7
  - `sendVideoAsGif` boolean: Send the video media as a GIF
  - `sendAudioAsVoice` boolean: Send the audio media as a voice note
  - `audience` object: Optional audience restriction. ⚠️ Setting this changes the persistent account-level Status privacy and is synchronized to all linked devices. To restore the default visibility, call /set-status-privacy with type "all".
    - `type` 'all' | 'allow' | 'deny', required: "all" shows the Status to all contacts; "allow" restricts visibility to the listed contacts; "deny" excludes the listed contacts.
    - `contacts` string[]: E.164 phone numbers (e.g. +491234567890) or chat IDs (e.g. 491234567890@c.us). Required when type is "allow" or "deny".

## Response `200`

Request reached the instance. `data.status` reports whether the action was carried out; on error `data` carries `message` and `explanation`. Payload: Status posted successfully.

- object
  - `status` 'success' | 'error': Whether the request reached the instance. `success` here does **not** mean the action was carried out — that is reported by `data.status`, which is the authoritative one. A malformed input arrives as `status: success` with `data.status: error`.
  - `data` union: The action's outcome. `status: success` carries the payload; `status: error` is an `actionError`.
    - object
      - `status` 'success', required: Whether the instance carried the action out — the authoritative field. In this branch it is always `success`; when the instance refused the action the whole `data` object is an `actionError` with `status: error`, `message` and `explanation`.
      - `instanceId` union
        - integer
        - string
      - `data` object
        - `posted` boolean
        - `message` object: The posted status message
    - ActionError: Shape of `data` when the instance refused the action. HTTP status is still 200 and the outer `status` is still `success`.
      - `status` 'error', required
      - `message` string
      - `explanation` string
      - `instanceId` union
        - integer
        - string
  - `links` object
    - `self` string

## Other responses

- `401`: Unauthorized — invalid or missing bearer token
- `403`: Forbidden — insufficient permissions or account blocked
- `404`: Not found — instance does not exist or does not belong to you
- `409`: Conflict — instance is not ready
- `422`: Validation error — content or mediaUrl required, fontStyle out of range, etc.
- `429`: Too many requests — rate limit exceeded

---

[API](https://skmtc.dev/waapi/apis/waapi-api-2.md) · [All operations](https://skmtc.dev/waapi/apis/waapi-api-2/llms.txt) · [OpenAPI document](https://skmtc.dev/waapi/apis/waapi-api-2/revisions/490302f75576?raw)
