Skip to content
API PlatformDevelopers
PATCH/v1/quick-messages/{quick_message_id}beta

Update a quick message

Needs
Send WhatsApp messages; manage templates, quick messages and WhatsApp short links (messaging:write)
Plan
Any plan with API access
Limits
60 a minute per key
Dry run
Yes — every check runs with ?dry_run=true, nothing changes
Undo
Send the old values back.

Changes only the fields you pass. The type cannot change: delete it and create a new one instead. Only TEXT, IMAGE, VIDEO and DOCUMENT quick messages can be edited here.

Try it

Path

The quick message id.

Body

New shortcut code (unique, no spaces).

New title.

A note for your team.

The message (`TEXT`), or the caption of a media message.

Public https URL of a new file (media types).

`DOCUMENT`: the file name the customer sees.

`private`, `team` or `company`.

The team, with `visibility: team`.

Protects against doing it twice if you retry: a retry with the same key gets the first answer back instead of running again.

Test mode (dry run): nothing will change
Turns test mode off for this page only. It switches back when you leave the page.

Code and response

curl -X PATCH 'https://mcp.wa-api.cloud/v1/quick-messages/12?dry_run=true' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "text": "Thank you for your order, {{contact.name}}!"
}'

The code reads your key from $API_KEY.

Parameters

Parameters
FieldTypeWhat it is
quick_message_idrequiredstring | integer · pathThe quick message id.

Body

Body fields
FieldTypeWhat it is
codestringNew shortcut code (unique, no spaces).pattern ^\S+$ · 1–60 characters
titlestringNew title.1–120 characters
descriptionstringA note for your team.0–500 characters
textstringThe message (TEXT), or the caption of a media message.0–4096 characters
media_urlstringPublic https URL of a new file (media types).uri · 0–2000 characters
file_namestringDOCUMENT: the file name the customer sees.0–200 characters
visibilitystringprivate, team or company.one of: private, team, company
team_idstringThe team, with visibility: team.0–20 characters

Headers

Headers
FieldTypeWhat it is
AuthorizationrequiredheaderBearer $API_KEY — your API key.
Api-VersionheaderThe API version to use, e.g. 2026-10-01. Default: the version your key is pinned to.one of: 2026-10-01 · pattern ^\d{4}-\d{2}-\d{2}$
Idempotency-KeyheaderAny unique string (8–128 characters). A retry with the same key returns the first answer instead of running twice. Kept 24 hours.pattern ^[A-Za-z0-9._:-]+$ · 8–128 characters

Response 200

The updated quick message.

Response fields
FieldTypeWhat it is
idrequiredstring
coderequiredstring or nullShortcut agents type after "/" in the inbox.
titlerequiredstring or null
typerequiredstring or nullTEXT, IMAGE, VIDEO, DOCUMENT, TEMPLATE, INTERACTIVE …
textrequiredstring or nullText body, or the media caption.
media_urlrequiredstring or null
template_namerequiredstring or null
visibilityrequiredstring or null
team_idrequiredstring or null
favoriterequiredboolean
can_editrequiredboolean
updated_atrequiredstring or null
dry_runbooleantrue when this was a dry run: every check ran and nothing changed.

Errors

Errors are application/problem+json. Branch on code.

StatusCodeWhen
400invalid_input

A field is missing or has the wrong format. errors[] points at each field.

401unauthenticated

The Authorization header is missing, the key is unknown, expired or revoked.

403entitlement_required

The workspace's plan does not include API access (api_access).

403forbidden

The key's user is not allowed to edit this quick message.

403insufficient_scope

The key does not have the permission this operation needs.

404not_found

No quick message with this id that the key's user can see.

409conflict

Also returned while a request with the same Idempotency-Key is still running.

429rate_limited

The key or workspace went over its rate limit. Wait for Retry-After seconds.

503upstream_unavailable

A service behind the API is briefly unavailable. Safe to retry with backoff.

504timeout

The change did not finish in time. Retry with the same Idempotency-Key: it never runs twice.

Examples

Change the wording

Request body

{
  "text": "Thank you for your order, {{contact.name}}!"
}

Response 200

{
  "id": "12",
  "code": "thanks",
  "title": "Thank you",
  "type": "TEXT",
  "text": "Thank you for your order, {{contact.name}}!",
  "media_url": null,
  "template_name": null,
  "visibility": "company",
  "team_id": null,
  "favorite": false,
  "can_edit": true,
  "updated_at": "2026-09-03T10:00:00Z"
}

Operation path

The same operation is also at POST /v1/ops/messaging_update_quick_message, with every field in the JSON body.