REST API
Messages
Send, edit, delete and search messages; mentions, reactions, polls, to-do lists, scheduled messages, reminders, silent send.
Messages are read through GET /conversations/{id} (cursor pagination) and arrive in realtime as MessageSent. Message object fields: id, content, type (text, media, file, sticker, poll, todo, system), attachments[], reply_to, user, reactions[], forwarded_from, card (poll/to-do state), mentions[], silent, reply_markup (bot keyboards), read_receipt, views_count (channels), permalink, expires_at, client_id.
Endpoints#
Send a message
JSON or multipart (for attachments[]). Needs text, an attachment, a sticker (emoji_id), a forward, a poll or a to-do list — otherwise 422 message.empty. Type is derived: text, media (image/video/audio), file, sticker, poll, todo. client_id makes retries idempotent. mentions are user ids picked from /mention-targets; silent delivers push notifications without sound. In channels only staff can post (403). Realtime: MessageSent, later LinkPreviewsReady for links.
Parameters
| Name | Type | Description |
|---|---|---|
conversation
required path
|
integer |
Conversation id. |
content
optional body
|
string |
Text (≤ 4000). Light markup rendered by clients: **bold**, *italic*, __underline__, ~strike~, ||spoiler||, inline code in backticks, code blocks in triple backticks; URLs are auto-linked.max 4000 chars
|
emoji_id
optional body
|
integer |
Send a custom emoji as a sticker. must exist (emojis)
|
forward_from_message_id
optional body
|
integer |
Forward this message; content becomes a comment.must exist (messages)
|
hide_sender
optional body
|
string |
With a forward: hide the original author. |
attachments
optional body
|
array |
Files (multipart attachments[]).max 10 items
|
attachments.*
optional body
|
file |
Video ≤ 500 MB, other files ≤ 50 MB. max 500 MB
|
reply_to_message_id
optional body
|
integer |
Reply to a message of this chat. must exist (messages — same conversation)
|
client_id
optional body
|
string |
Idempotency key (UUID). max 64 chars
|
group_id
optional body
|
string |
Album id: messages with the same id are shown as one album. max 64 chars
|
poll
optional body
|
array |
Create a poll. |
poll.question
optional body
|
string |
Poll question. required with
pollmax 255 chars |
poll.options
optional body
|
array |
Answer options (2–10). required with
pollmin 2 itemsmax 10 items |
poll.options.*
optional body
|
string |
Option text. max 100 chars
|
poll.multiple
optional body
|
boolean |
Allow several answers. |
poll.quiz
optional body
|
boolean |
Quiz mode (one correct answer set). |
poll.anonymous
optional body
|
boolean |
Hide voters. |
poll.correct
optional body
|
array |
Quiz: indexes of correct options. max 10 items
|
poll.correct.*
optional body
|
integer |
Index of a correct option. ≥ 0≤ 9
|
todo
optional body
|
array |
Create a to-do list. |
todo.title
optional body
|
string |
List title. required with
todomax 255 chars |
todo.items
optional body
|
array |
Items {id, text}.required with
todomin 1 itemsmax 30 items |
todo.items.*.id
required body
|
integer |
Client-chosen item id (unique in the list). ≥ 1
|
todo.items.*.text
required body
|
string |
Item text. max 200 chars
|
todo.others_can_append
optional body
|
boolean |
Other members may add items. |
todo.others_can_complete
optional body
|
boolean |
Other members may tick items. |
mentions
optional body
|
array |
Mentioned user ids. max 50 items
|
mentions.*
optional body
|
integer |
Mentioned user id. |
silent
optional body
|
boolean |
Send without sound. |
is_voice
optional body
|
boolean |
Mark an audio attachment as a voice message ( is_voice or is_voice.{index}). |
waveform_data
optional body
|
array |
Voice waveform, 0..1 samples (array or JSON string). |
Request
curl -X POST 'https://minchatapp.com/api/conversations/12/messages' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"content": "Hello @Boris Petrov!", "mentions": [2], "client_id": "5b1f0c1e-7c1a-4f7e-9a51-3c2f8d0e1a11"}'
Response
{
"id": 45,
"conversation_id": 1,
"content": "Hello @Boris Petrov!",
"type": "text",
"attachments": [],
"link_previews": null,
"reply_to": null,
"edited_at": null,
"user": {
"id": 1,
"name": "Anna Smith",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "anna_s"
},
"created_at": "2026-10-22T09:06:13.000000Z",
"can_delete": true,
"is_own": true,
"read_receipt": "delivered",
"client_id": "5b1f0c1e-7c1a-4f7e-9a51-3c2f8d0e1a11",
"reactions": [],
"forwarded_from": null,
"permalink": null,
"system": null,
"card": null,
"group_id": null,
"mentions": [
2
],
"silent": false,
"reply_markup": null,
"expires_at": null,
"views_count": null
}
200 upload
{
"id": 61,
"conversation_id": 1,
"content": "Forecast map",
"type": "media",
"attachments": [
{
"id": "cb30002c-fffd-48dd-99f1-ee63272472d6",
"type": "image",
"url": "https://minchatapp.com/storage/media/99/ce/99ce0c22dd2307775a80cf118088b61034940a476b3beb851405a28e54d0e787.png",
"name": "map.png",
"size": 186,
"mime_type": "image/png",
"width": 64,
"height": 40
}
],
"link_previews": null,
"reply_to": null,
"edited_at": null,
"user": {
"id": 1,
"name": "Anna Smith",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "anna_s"
},
"created_at": "2026-10-22T09:12:50.000000Z",
"can_delete": true,
"is_own": true,
"read_receipt": "delivered",
"client_id": null,
"reactions": [],
"forwarded_from": null,
"permalink": null,
"system": null,
"card": null,
"group_id": null,
"mentions": [],
"silent": false,
"reply_markup": null,
"expires_at": null,
"views_count": null
}
200 poll
{
"id": 47,
"conversation_id": 1,
"content": "Lunch?",
"type": "poll",
"attachments": [],
"link_previews": null,
"reply_to": null,
"edited_at": null,
"user": {
"id": 1,
"name": "Anna Smith",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "anna_s"
},
"created_at": "2026-10-22T09:06:13.000000Z",
"can_delete": true,
"is_own": true,
"read_receipt": "delivered",
"client_id": null,
"reactions": [],
"forwarded_from": null,
"permalink": null,
"system": null,
"card": {
"poll": {
"question": "Lunch?",
"options": [
"Pizza",
"Sushi"
],
"multiple": false,
"quiz": false,
"anonymous": true,
"closed": false,
"correct": [],
"votes": [],
"me_token": -100004975
}
},
"group_id": null,
"mentions": [],
"silent": false,
"reply_markup": null,
"expires_at": null,
"views_count": null
}
200 todo
{
"id": 48,
"conversation_id": 1,
"content": "Release",
"type": "todo",
"attachments": [],
"link_previews": null,
"reply_to": null,
"edited_at": null,
"user": {
"id": 1,
"name": "Anna Smith",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "anna_s"
},
"created_at": "2026-10-22T09:06:13.000000Z",
"can_delete": true,
"is_own": true,
"read_receipt": "delivered",
"client_id": null,
"reactions": [],
"forwarded_from": null,
"permalink": null,
"system": null,
"card": {
"todo": {
"title": "Release",
"items": [
{
"id": 1,
"text": "Build"
},
{
"id": 2,
"text": "Publish"
}
],
"others_can_append": false,
"others_can_complete": true,
"completed": []
}
},
"group_id": null,
"mentions": [],
"silent": false,
"reply_markup": null,
"expires_at": null,
"views_count": null
}
200 forward
{
"id": 63,
"conversation_id": 4,
"content": "Thanks everyone!",
"type": "text",
"attachments": [],
"link_previews": null,
"reply_to": null,
"edited_at": null,
"user": {
"id": 1,
"name": "Anna Smith",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "anna_s"
},
"created_at": "2026-10-22T09:12:50.000000Z",
"can_delete": true,
"is_own": true,
"read_receipt": "delivered",
"client_id": null,
"reactions": [],
"forwarded_from": {
"conversation_id": 1,
"conversation_name": "Design team",
"message_id": 43,
"user": null,
"created_at": "2026-10-21T06:46:11+00:00",
"hidden_sender": true,
"is_channel": false
},
"permalink": null,
"system": null,
"card": null,
"group_id": null,
"mentions": [],
"silent": false,
"reply_markup": null,
"expires_at": "2026-10-29T09:12:50+00:00",
"views_count": null
}
422 empty
{
"success": false,
"code": "message.empty",
"error": "Message cannot be empty",
"message": "Message cannot be empty"
}
403 channel403
{
"success": false,
"code": "message.channel_write_forbidden",
"error": "Only the owner and admins can post in the channel",
"message": "Only the owner and admins can post in the channel"
}
Edit a message
Author only, while editing is allowed. Realtime: MessageUpdated.
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
content
required body
|
string |
Message text. max 4000 chars
|
Request
curl -X PATCH 'https://minchatapp.com/api/messages/4521' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"content": "Hello again (edited)"}'
Response
{
"id": 45,
"content": "Hello @Boris Petrov! (edited)",
"edited_at": "2026-10-22T09:06:13.000000Z",
"link_previews": []
}
Delete a message
delete_for_all=1 (author / staff) deletes for everyone, otherwise only for you. Realtime: MessageDeleted.
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
delete_for_all
optional query
|
boolean |
Delete for everyone. |
Request
curl -X DELETE 'https://minchatapp.com/api/messages/4521' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true
}
Search in a conversation
q 2–100 chars; an empty q is allowed only with a filter. Matches text, poll options and to-do items. 20 results per page, newest first; paginate with before_id.
Parameters
| Name | Type | Description |
|---|---|---|
conversation
required path
|
integer |
Conversation id. |
q
optional query
|
string |
Query. |
from_user_id
optional query
|
integer |
Only messages of this author. |
type
optional query
|
string |
media, file or sticker. |
from
optional query
|
date |
From date (inclusive). |
to
optional query
|
date |
To date (inclusive). |
before_id
optional query
|
integer |
Cursor. |
Request
curl 'https://minchatapp.com/api/conversations/12/messages/search' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"messages": [
{
"id": 20,
"content": "Release checklist: https://example.com/release-checklist",
"type": "text",
"attachments": [],
"link_previews": [
{
"url": "https://example.com/release-checklist",
"provider": "generic",
"title": "example.com",
"description": null,
"image": null,
"site_name": "example.com",
"embed_url": null,
"embed_html": null,
"video_url": null,
"video_type": null,
"video_width": null,
"video_height": null,
"accessible": true,
"meta": []
}
],
"reply_to": null,
"user": {
"id": 3,
"name": "Vera Kotova",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": null
},
"created_at": "2026-10-20T11:12:47.000000Z",
"edited_at": null,
"can_delete": false,
"is_own": false,
"read_receipt": null,
"client_id": null,
"forwarded_from": null,
"permalink": null,
"system": null,
"card": null,
"group_id": null,
"mentions": [],
"silent": false,
"expires_at": null,
"reply_markup": null,
"reactions": []
}
]
}
200 filters
{
"messages": [
{
"id": 61,
"content": "Forecast map",
"type": "media",
"attachments": [
{
"id": "cb30002c-fffd-48dd-99f1-ee63272472d6",
"type": "image",
"url": "https://minchatapp.com/storage/media/99/ce/99ce0c22dd2307775a80cf118088b61034940a476b3beb851405a28e54d0e787.png",
"name": "map.png",
"size": 186,
"mime_type": "image/png",
"width": 64,
"height": 40
}
],
"link_previews": null,
"reply_to": null,
"user": {
"id": 1,
"name": "Anna Smith",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "anna_s"
},
"created_at": "2026-10-22T09:12:50.000000Z",
"edited_at": null,
"can_delete": true,
"is_own": true,
"read_receipt": "delivered",
"client_id": null,
"forwarded_from": null,
"permalink": null,
"system": null,
"card": null,
"group_id": null,
"mentions": [],
"silent": false,
"expires_at": null,
"reply_markup": null,
"reactions": []
},
{
"id": 9,
"content": null,
"type": "media",
"attachments": [
{
"id": "b59c984b-d06b-4911-a7cf-bb96f5b7edc8",
"type": "audio",
"url": "https://minchatapp.com/storage/media/73/8c/738cb72f4ff6851f70547985e21b87b9293dfe3ea0cb6b34beb7093b109b6ee7.mp3",
"name": "voice.ogg",
"size": 65244,
"mime_type": "audio/mpeg",
"is_voice": true,
"duration": 4,
"waveform": [
0.995,
0.999
]
}
],
"link_previews": null,
"reply_to": null,
"user": {
"id": 2,
"name": "Boris Petrov",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "boris_p"
},
"created_at": "2026-10-20T11:12:47.000000Z",
"edited_at": null,
"can_delete": false,
"is_own": false,
"read_receipt": null,
"client_id": null,
"forwarded_from": null,
"permalink": null,
"system": null,
"card": null,
"group_id": null,
"mentions": [],
"silent": false,
"expires_at": null,
"reply_markup": null,
"reactions": []
}
]
}
Search across all chats
Same rules as the chat search plus conversation_id; type: photo/image, video, media, file, audio, voice, link. 30 per page; continue with next_before_id.
Parameters
| Name | Type | Description |
|---|---|---|
q
optional query
|
string |
Query. |
conversation_id
optional query
|
integer |
Limit to one chat. |
from_user_id
optional query
|
integer |
Author (alias sender_id). |
type
optional query
|
string |
Attachment type filter. |
from
optional query
|
date |
From date. |
to
optional query
|
date |
To date. |
before_id
optional query
|
integer |
Cursor. |
Request
curl 'https://minchatapp.com/api/messages/search' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"messages": [
{
"id": 21,
"conversation_id": 4,
"content": "Release checklist: https://example.com/release-checklist",
"type": "text",
"created_at": "2026-10-20T11:12:47+00:00",
"user": {
"id": 1,
"name": "Anna Smith"
},
"attachment": null,
"conversation": {
"id": 4,
"type": "saved",
"name": "Saved Messages"
}
},
{
"id": 20,
"conversation_id": 1,
"content": "Release checklist: https://example.com/release-checklist",
"type": "text",
"created_at": "2026-10-20T11:12:47+00:00",
"user": {
"id": 3,
"name": "Vera Kotova"
},
"attachment": null,
"conversation": {
"id": 1,
"type": "group",
"name": "Design team"
}
}
],
"next_before_id": null
}
Set a reaction
One reaction per user per message; replaces the previous one. Realtime: MessageReactionUpdated.
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
emoji_id
required body
|
integer |
Emoji id (see emoji sets). must exist (emojis)
|
Request
curl -X PUT 'https://minchatapp.com/api/messages/4521/reaction' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"emoji_id": 1}'
Response
{
"reactions": [
{
"emoji_id": 1,
"set_id": 1,
"set_title": "Min",
"set_active": true,
"shortcode": "thumbsup",
"kind": "unicode",
"unicode": "👍",
"image_url": null,
"count": 1,
"me": true,
"user_ids": [
1
]
}
]
}
Remove my reaction
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
Request
curl -X DELETE 'https://minchatapp.com/api/messages/4521/reaction' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"reactions": []
}
Who reacted
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
Request
curl 'https://minchatapp.com/api/messages/4521/reactions' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"groups": [
{
"emoji_id": 1,
"set_id": 1,
"set_title": "Min",
"set_active": true,
"shortcode": "thumbsup",
"kind": "unicode",
"unicode": "👍",
"image_url": null,
"count": 1,
"me": true,
"users": [
{
"id": 1,
"name": "Anna Smith",
"avatar": null
}
]
}
]
}
Vote in a poll
options — indexes (0–9). Empty array retracts. The author can close the poll with closed:true.
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
options
optional body
|
array |
Chosen option indexes; empty to retract. max 10 items
|
options.*
optional body
|
integer |
Option index. ≥ 0≤ 9
|
closed
optional body
|
boolean |
Author: close the poll. |
Request
curl -X POST 'https://minchatapp.com/api/messages/4521/poll' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"options": [0]}'
Response
{
"id": 47,
"conversation_id": 1,
"content": "Lunch?",
"type": "poll",
"attachments": [],
"link_previews": null,
"reply_to": null,
"edited_at": null,
"user": {
"id": 1,
"name": "Anna Smith",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "anna_s"
},
"created_at": "2026-10-22T09:06:13.000000Z",
"can_delete": true,
"is_own": true,
"read_receipt": "delivered",
"client_id": null,
"reactions": [],
"forwarded_from": null,
"permalink": null,
"system": null,
"card": {
"poll": {
"question": "Lunch?",
"options": [
"Pizza",
"Sushi"
],
"multiple": false,
"quiz": false,
"anonymous": true,
"closed": false,
"correct": [],
"votes": [
[
1
]
],
"me_token": -100004975
}
},
"group_id": null,
"mentions": [],
"silent": false,
"reply_markup": null,
"expires_at": null,
"views_count": null
}
Update a to-do list
Mark item ids completed/incomplete; append adds items (if allowed).
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
completed
required body
|
array |
Item ids to mark done. present (may be null)max 30 items
|
completed.*
optional body
|
integer |
Item id. ≥ 1
|
incompleted
required body
|
array |
Item ids to mark not done. present (may be null)max 30 items
|
incompleted.*
optional body
|
integer |
Item id. ≥ 1
|
append
optional body
|
array |
New item texts. max 10 items
|
append.*
optional body
|
string |
Item text. max 200 chars
|
Request
curl -X POST 'https://minchatapp.com/api/messages/4521/todo' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"completed": [1], "incompleted": []}'
Response
{
"id": 48,
"conversation_id": 1,
"content": "Release",
"type": "todo",
"attachments": [],
"link_previews": null,
"reply_to": null,
"edited_at": null,
"user": {
"id": 1,
"name": "Anna Smith",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "anna_s"
},
"created_at": "2026-10-22T09:06:13.000000Z",
"can_delete": true,
"is_own": true,
"read_receipt": "delivered",
"client_id": null,
"reactions": [],
"forwarded_from": null,
"permalink": null,
"system": null,
"card": {
"todo": {
"title": "Release",
"items": [
{
"id": 1,
"text": "Build"
},
{
"id": 2,
"text": "Publish"
}
],
"others_can_append": false,
"others_can_complete": true,
"completed": {
"1": [
1
]
}
}
},
"group_id": null,
"mentions": [],
"silent": false,
"reply_markup": null,
"expires_at": null,
"views_count": null
}
Who read a message
Own messages in groups only (400 for private chats and channels).
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
Request
curl 'https://minchatapp.com/api/messages/4521/readers' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"readers": [],
"pending": [
{
"id": 2,
"name": "Boris Petrov",
"avatar": null,
"read_at": null
},
{
"id": 3,
"name": "Vera Kotova",
"avatar": null,
"read_at": null
},
{
"id": 4,
"name": "Gleb Orlov",
"avatar": null,
"read_at": null
}
],
"readers_count": 0,
"pending_count": 3
}
Save to Saved Messages
Copies the message into Saved Messages as a forward.
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
Request
curl -X POST 'https://minchatapp.com/api/messages/4521/save' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true,
"conversation_id": 4,
"message": {
"id": 49,
"conversation_id": 4,
"content": "Thanks everyone!",
"type": "text",
"attachments": [],
"link_previews": null,
"reply_to": null,
"edited_at": null,
"user": {
"id": 1,
"name": "Anna Smith",
"avatar": null,
"is_channel": false,
"is_bot": false,
"username": "anna_s"
},
"created_at": "2026-10-22T09:06:13.000000Z",
"can_delete": true,
"is_own": true,
"read_receipt": "delivered",
"client_id": "save-43-UNLWeWWFiM",
"reactions": [],
"forwarded_from": {
"conversation_id": 1,
"conversation_name": "Design team",
"message_id": 43,
"user": {
"id": 4,
"name": "Gleb Orlov"
},
"created_at": "2026-10-21T06:46:11+00:00",
"hidden_sender": false,
"is_channel": false
},
"permalink": null,
"system": null,
"card": null,
"group_id": null,
"mentions": [],
"silent": false,
"reply_markup": null,
"expires_at": null,
"views_count": null
}
}
Press an inline button
For bot messages with reply_markup: sends a callback_query update to the bot. answer is filled only if the bot already answered.
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
data
required body
|
string |
callback_data of the pressed button.max 64 chars
|
Request
curl -X POST 'https://minchatapp.com/api/messages/4521/callback' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"data": "city:moscow"}'
Response
{
"success": true,
"callback_query_id": "1",
"answer": null
}
422 bad
{
"success": false,
"code": "validation.failed",
"error": "The given data was invalid.",
"message": "The given data was invalid.",
"errors": {
"data": [
"Unknown callback_data for this message."
]
}
}
Remind me about a message
remind_at from +1 minute to +1 year. When due: push (type=reminder) and realtime MessageReminderDue.
Parameters
| Name | Type | Description |
|---|---|---|
message
required path
|
integer |
Message id. |
remind_at
required body
|
date-time |
When to remind (ISO 8601). |
Request
curl -X POST 'https://minchatapp.com/api/messages/4521/reminder' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"remind_at": "2026-11-02T10:00:00+03:00"}'
Response
{
"reminder": {
"id": 3,
"message_id": 45,
"conversation_id": 1,
"conversation_name": "Design team",
"sender_name": "Anna Smith",
"preview": "Hello @Boris Petrov! (edited)",
"remind_at": "2026-11-02T10:00:00+00:00",
"status": "pending"
}
}
My reminders
Parameters
No parameters.
Request
curl 'https://minchatapp.com/api/reminders' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"reminders": [
{
"id": 3,
"message_id": 45,
"conversation_id": 1,
"conversation_name": "Design team",
"sender_name": "Anna Smith",
"preview": "Hello @Boris Petrov! (edited)",
"remind_at": "2026-11-02T10:00:00+00:00",
"status": "pending"
}
]
}
Cancel a reminder
Parameters
| Name | Type | Description |
|---|---|---|
reminder
required path
|
integer |
Reminder id. |
Request
curl -X DELETE 'https://minchatapp.com/api/reminders/3' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true
}
Scheduled messages
Your pending scheduled messages in this chat (max 100 per chat).
Parameters
| Name | Type | Description |
|---|---|---|
conversation
required path
|
integer |
Conversation id. |
Request
curl 'https://minchatapp.com/api/conversations/12/scheduled' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"scheduled": [
{
"id": 1,
"conversation_id": 1,
"content": "Reminder: call at 18:00",
"reply_to_message_id": null,
"send_at": "2026-10-20T13:12:47+00:00",
"status": "pending",
"error": null,
"message_id": null
},
{
"id": 2,
"conversation_id": 1,
"content": "Good morning! Please update your task status",
"reply_to_message_id": null,
"send_at": "2026-10-21T12:12:47+00:00",
"status": "pending",
"error": null,
"message_id": null
}
]
}
Schedule a message
Text only. Realtime: ScheduledMessagesUpdated with the pending count.
Parameters
| Name | Type | Description |
|---|---|---|
conversation
required path
|
integer |
Conversation id. |
content
required body
|
string |
Message text. max 4000 chars
|
send_at
required body
|
date-time |
When to send (ISO 8601). |
reply_to_message_id
optional body
|
integer |
Message being replied to. must exist (messages — same conversation)
|
Request
curl -X POST 'https://minchatapp.com/api/conversations/12/scheduled' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"content": "Standup in 10 minutes", "send_at": "2026-11-02T09:00:00+03:00"}'
Response
{
"scheduled": {
"id": 4,
"conversation_id": 1,
"content": "Standup in 10 minutes",
"reply_to_message_id": null,
"send_at": "2026-11-02T06:00:00+00:00",
"status": "pending",
"error": null,
"message_id": null
}
}
Edit a scheduled message
Parameters
| Name | Type | Description |
|---|---|---|
scheduledMessage
required path
|
integer |
Scheduled message id. |
content
optional body
|
string |
Message text. max 4000 chars
|
send_at
optional body
|
date-time |
When to send (ISO 8601). |
Request
curl -X PATCH 'https://minchatapp.com/api/scheduled-messages/5' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"content": "Standup in 5 minutes"}'
Response
{
"scheduled": {
"id": 5,
"conversation_id": 1,
"content": "Standup in 5 minutes",
"reply_to_message_id": null,
"send_at": "2026-11-03T06:00:00+00:00",
"status": "pending",
"error": null,
"message_id": null
}
}
Delete a scheduled message
Parameters
| Name | Type | Description |
|---|---|---|
scheduledMessage
required path
|
integer |
Scheduled message id. |
Request
curl -X DELETE 'https://minchatapp.com/api/scheduled-messages/5' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true
}
Send a scheduled message now
Parameters
| Name | Type | Description |
|---|---|---|
scheduledMessage
required path
|
integer |
Scheduled message id. |
Request
curl -X POST 'https://minchatapp.com/api/scheduled-messages/5/send-now' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true,
"scheduled": {
"id": 5,
"conversation_id": 1,
"content": "Standup in 5 minutes",
"reply_to_message_id": null,
"send_at": "2026-11-03T06:00:00+00:00",
"status": "sent",
"error": null,
"message_id": 62
}
}