/v1/conversations/{conversation_id}/tagsbetaUntag a conversation
- Needs
- Manage conversations: notes, assign, close, tags, reminders
(inbox: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
- Add them back with Tag a conversation.
Removes tags from a conversation, by id and/or name, given as query parameters (repeat one for several: ?tag_ids=4&tag_ids=7). Tags the conversation does not have are ignored, so a retry is harmless. The tags themselves stay in the workspace.
Try it
Query (2)
Conversation tag ids to remove.
Tag names to remove.
Protects against doing it twice if you retry: a retry with the same key gets the first answer back instead of running again.
Code and response
curl -X DELETE 'https://mcp.wa-api.cloud/v1/conversations/77410/tags?tag_ids=7&dry_run=true' \ -H "Authorization: Bearer $API_KEY" \ -H "Idempotency-Key: $(uuidgen)"
The code reads your key from $API_KEY.
Parameters
| Field | Type | What it is |
|---|---|---|
| conversation_idrequired | string · path | The conversation id.pattern ^\d{1,19}$Signed in? Pick one from your data with “My data”. |
| tag_ids | array of string · query | Conversation tag ids to remove.0–20 items |
| tag_names | array of string · query | Tag names to remove.0–20 items |
Headers
| Field | Type | What it is |
|---|---|---|
| Authorizationrequired | header | Bearer $API_KEY — your API key. |
| Api-Version | header | The 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-Key | header | Any 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 conversation with its remaining tags.
| Field | Type | What it is |
|---|---|---|
| conversationrequired | object | |
| idrequired | string | |
| staterequired | string or null | |
| assignee_staff_idrequired | string or null | |
| team_idrequired | string or null | |
| tagsrequired | array of object | |
| idrequired | string | |
| namerequired | string | |
| dry_run | boolean | true when this was a dry run: every check ran and nothing changed. |
Errors
Errors are application/problem+json. Branch on code.
| Status | Code | When |
|---|---|---|
| 400 | invalid_input | A field is missing or has the wrong format. |
| 401 | unauthenticated | The Authorization header is missing, the key is unknown, expired or revoked. |
| 403 | entitlement_required | The workspace's plan does not include API access ( |
| 403 | insufficient_scope | The key does not have the permission this operation needs. |
| 404 | not_found | No conversation with this id. |
| 409 | conflict | Also returned while a request with the same Idempotency-Key is still running. |
| 429 | rate_limited | The key or workspace went over its rate limit. Wait for |
| 503 | upstream_unavailable | A service behind the API is briefly unavailable. Safe to retry with backoff. |
| 504 | timeout | The change did not finish in time. Retry with the same Idempotency-Key: it never runs twice. |
Examples
No longer urgent
Response 200
{
"conversation": {
"id": "77410",
"state": "open",
"assignee_staff_id": null,
"team_id": null,
"tags": [
{
"id": "4",
"name": "new-lead"
}
]
}
}Operation path
The same operation is also at POST /v1/ops/inbox_untag_conversation, with every field in the JSON body.