Base URL
https://app.dmu.email/api/v1
Authentication
Bearer dmk_… API key
Rate limit
120 requests a minute per key

Reschedule a message

PATCH/messages/{id}

Moves a scheduled send to another time, or sends it now.

Needs the permissionmessages:reschedule

Only while the message is still waiting. Once it has started to go there’s nothing to move, and the answer is 409 already_sent rather than a pretend success.

Path parameters

idstringrequired
The scheduled message.

Body

sendAtstringoptional
A new time in the future, as ISO 8601.
sendNowbooleanoptional
true to stop waiting and send it. Send one of the two.

Returns

messageIdstring
The message.
statusstring
scheduled, or queued after sendNow.
scheduledAtstring or null
The new time. Null after sendNow.

Errors

400bad_send_at
sendAt isn’t an ISO 8601 time.
400send_at_in_past
sendAt has already passed.
400nothing_to_change
Neither sendAt nor sendNow: true was sent.
401invalid_key
The key is wrong, expired or revoked. With no Authorization header at all, the code is missing_credentials.
403missing_scope
The key doesn’t have messages:reschedule. The X-Required-Scope header names what’s missing.
404not_found
There’s no such message, or it isn’t waiting to go.
409already_sent
It has started to go and can’t be changed.
429rate_limited
More than 120 requests a minute from this key. Wait for Retry-After seconds.
curl https://app.dmu.email/api/v1/messages/8c1e2f4a \
  -X PATCH \
  -H "Authorization: Bearer dmk_7f3a9c2e1b4d_Xq8v…" \
  -H "Content-Type: application/json" \
  -d '{ "sendAt": "2026-09-29T09:00:00+03:00" }'

Response

200 OK

{
  "data": {
    "messageId": "8c1e2f4a",
    "status": "scheduled",
    "scheduledAt": "2026-09-29T06:00:00.000Z"
  }
}

Every response wraps its result in data. A page of threads adds nextCursor, which is null on the last page.