Slack API · error code

Slack error duplicate_message_not_found: No duplicate message for this client_msg_id

Permanent - do not retryHTTP 200Message content & Block Kit

Last verified against Slack API reference - chat.postMessage errors

What Slack returns
No duplicate message exists associated with client_msg_id.

What error duplicate_message_not_found means

The mirror image of duplicate_channel_not_found: your request presented a client_msg_id in a context that expects it to match an existing prior send, and Slack found no message associated with it. The documented description: "No duplicate message exists associated with client_msg_id."

You meet this when deduplication bookkeeping and reality disagree — your system believes a message with this ID was (or may have been) sent and is asking Slack to reconcile, but Slack has no record. Typical roots: the original send never actually reached Slack (network failure before the request, not after), the ID was rotated or regenerated between the original attempt and the retry so the retry no longer matches, or state was lost/restored from backup so IDs reference sends from a different era.

The resolution is to trust Slack's answer: no prior message exists, so send the message normally (with the same client_msg_id going forward) rather than treating the state as corrupted. What deserves fixing is any pipeline where the ID attached to a retry can differ from the ID attached to the original.

What it looks like

{"ok": false, "error": "duplicate_message_not_found"}

Why it happens

  • The original request never reached Slack, so no message exists to match the ID.
  • The client_msg_id was regenerated between attempts, breaking the match.
  • Message-state storage was lost or restored, leaving IDs that reference sends Slack never saw.

How to fix Slack error duplicate_message_not_found

  1. 1Treat the response as authoritative: no duplicate exists, so perform the send as a fresh delivery with the same client_msg_id.
  2. 2Ensure the ID is created once per logical message and reused unchanged on every retry.
  3. 3Audit the failure path: if request construction can fail after the ID is recorded as 'sent', reorder so 'sent' is only recorded on a 2xx-with-ok:true response.

How to stop it recurring

Record delivery state transitions from Slack's responses, not from your intentions: enqueued → attempted → confirmed, with the client_msg_id constant throughout. That makes both duplicate_* errors self-explanatory when they appear.

Official reference: Slack API reference - chat.postMessage errors. See all Slack error codes or the Slack limits and quotas.

Related codes

Error duplicate_message_not_found - quick answers

What does Slack error duplicate_message_not_found mean?

The mirror image of duplicate_channel_not_found : your request presented a client_msg_id in a context that expects it to match an existing prior send, and Slack found no message associated with it.

How do I fix Slack error duplicate_message_not_found?

1. Treat the response as authoritative: no duplicate exists, so perform the send as a fresh delivery with the same client_msg_id. 2. Ensure the ID is created once per logical message and reused unchanged on every retry. 3. Audit the failure path: if request construction can fail after the ID is recorded as 'sent', reorder so 'sent' is only recorded on a 2xx-with-ok:true response.

Should I retry after error duplicate_message_not_found?

No. Retrying the same request produces the same error; the condition has to be fixed first. Treat it as a permanent failure for that message and surface it, rather than looping.

Stop debugging Slack by hand

Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.