Slack API · error code

Slack error message_not_found: No message at that timestamp

Permanent - do not retryHTTP 200Message content & Block Kit

Last verified against Slack API reference - chat.postMessage errors

What Slack returns
No message exists with the requested timestamp.

What error message_not_found means

You asked chat.update or chat.delete to operate on a message identified by (channel, ts), and Slack has no such message. Both methods document the description as "No message exists with the requested timestamp." The ts value is the message's identity — a string like "1503435956.000247" returned by the original chat.postMessage — and it only means something in combination with the exact channel it was posted to.

Three failure shapes dominate. First, precision loss: ts looks like a float, and languages that parse it as one quietly mangle the trailing digits; 1503435956.000247 stored as a double and re-serialized may not round-trip, and the mutated value matches nothing. Keep it a string, always. Second, channel mismatch: updating with the right ts but a different channel (the message was posted to a DM but the update targets the channel, or vice versa) — the pair must match the original send. Third, the message is gone: deleted by a user or admin, or removed by retention policy, in which case no identifier will ever find it again.

The error is deterministic per (channel, ts) pair; retries are useless. When it appears in an edit/undo feature, degrade gracefully — the underlying message no longer exists, so the feature should reflect that instead of erroring.

What it looks like

POST /api/chat.update
{"channel": "C0123ABCDEF", "ts": "1503435956.0002", "text": "edit"}

HTTP 200
{"ok": false, "error": "message_not_found"}

Why it happens

  • ts was parsed as a float somewhere and lost precision; the re-serialized value matches no message.
  • The channel in the update/delete call differs from the channel the message was actually posted to.
  • The message was deleted by a user, admin, or retention policy.
  • ts values crossed wires between messages (stored against the wrong record).

How to fix Slack error message_not_found

  1. 1Store and transmit ts strictly as a string; audit JSON parsers and databases for float coercion.
  2. 2Log the exact (channel, ts) pair sent and compare against the original chat.postMessage response you stored.
  3. 3Fetch the message's current existence with conversations.history (latest/oldest around the ts) to confirm deletion.
  4. 4If deleted, mark your record accordingly and stop retrying; if wires crossed, fix the storage mapping.

How to stop it recurring

Persist the full chat.postMessage response — at minimum channel and ts together, as strings — the moment a send succeeds, and treat that pair as the message's immutable address. Schema-check that no numeric type ever touches ts.

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

Related codes

Error message_not_found - quick answers

What does Slack error message_not_found mean?

You asked chat.update or chat.delete to operate on a message identified by (channel, ts) , and Slack has no such message. Both methods document the description as "No message exists with the requested timestamp." The ts value is the message's identity — a string like "1503435956.000247" returned by the original chat.postMessage — and it only means something in combination with the exact channel it was posted to.

How do I fix Slack error message_not_found?

1. Store and transmit ts strictly as a string; audit JSON parsers and databases for float coercion. 2. Log the exact (channel, ts) pair sent and compare against the original chat.postMessage response you stored. 3. Fetch the message's current existence with conversations.history (latest/oldest around the ts) to confirm deletion. 4. If deleted, mark your record accordingly and stop retrying; if wires crossed, fix the storage mapping.

Should I retry after error 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.