Auth. HMAC v1 or bearer token — see Authentication.
Status. Live · Idempotent: No (each call posts a fresh edit; pass
new_text you want the bubble to read).Which id goes in the URL
This is a message-scoped route:{id} is a message_id, not a chat_id. Prefer the Chert-issued message_id returned by POST /api/v1/send, or the message.id returned by POST /api/v1/chats and POST /api/v1/chats/{id}/messages. Chert resolves that id to the underlying iMessage identifier internally before applying the edit.
For outbound messages surfaced by
GET /api/v1/chats/{id}/messages, the listed message id is also accepted.Request
POST /api/v1/messages/{id}/edit
Response
Path parameters
The Chert
message_id returned by a send endpoint, or the outbound message id surfaced on chat-message listings.Body
The replacement bubble text. Empty strings are rejected.
For multi-part messages, the zero-based index of the text part to edit. Default
0 (the first text part). Most sends have only one text part.Response fields
Always
"edited" on success.Echoed-back
message_id of the edited bubble.The text that now appears in the bubble.
ISO-8601 timestamp the edit was applied.
Reserved for future use. May surface previous versions of the bubble when the underlying transport reports them.
Errors
| Code | HTTP | When |
|---|---|---|
1002 | 400 | new_text missing or empty. |
1004 | 400 | Invalid JSON body. |
2003 | 404 | Message not found, or not owned by this tenant. |
4001 | 502 | Delivery failed — edit window may have expired, or the bubble is no longer editable. |
4099 | 501 | Edit is not available on this phone line. |
Notes
| Behavior | What it means |
|---|---|
| 15-minute window | Apple-enforced. Edits attempted past 15 minutes from the original send fail with 4001. |
| Outbound only | You can only edit messages you sent. Inbound messages cannot be edited. |
| Recipient experience | The bubble updates in place with an “Edited” marker. No new bubble is created. |

