К содержимому

REST API

Сообщения

Отправка, редактирование, удаление и поиск; упоминания, реакции, опросы, задачи, отложенные, напоминания, тихая отправка.

Сообщения читаются через GET /conversations/{id} (курсорная пагинация) и приходят в realtime как MessageSent. Поля сообщения: id, content, type (text, media, file, sticker, poll, todo, system), attachments[], reply_to, user, reactions[], forwarded_from, card (состояние опроса/задач), mentions[], silent, reply_markup (клавиатуры ботов), read_receipt, views_count (каналы), permalink, expires_at, client_id.

Методы#

POST /api/conversations/{conversation}/messages #

Отправить сообщение

Bearer-токен Лимит: 60/min multipart/form-data

JSON или multipart (для attachments[]). Нужен текст, вложение, стикер (emoji_id), пересылка, опрос или список задач — иначе 422 message.empty. Тип определяется сам: text, media (фото/видео/аудио), file, sticker, poll, todo. client_id делает повтор идемпотентным. mentions — id пользователей из /mention-targets; silent — пуш без звука. В канале пишет только администрация (403). Realtime: MessageSent, затем LinkPreviewsReady для ссылок.

Параметры

Имя Тип Описание
conversation
обязательный путь
integer
id чата.
content
необязательный тело
string
Текст (≤ 4000). Лёгкая разметка в клиентах: **жирный**, *курсив*, __подчёркнутый__, ~зачёркнутый~, ||спойлер||, код в обратных кавычках, блок кода в тройных; ссылки распознаются автоматически.
max 4000 chars
emoji_id
необязательный тело
integer
Отправить пользовательский эмодзи как стикер.
must exist (emojis)
forward_from_message_id
необязательный тело
integer
Переслать сообщение; content — комментарий.
must exist (messages)
hide_sender
необязательный тело
string
При пересылке: скрыть автора.
attachments
необязательный тело
array
Файлы (multipart attachments[]).
max 10 items
attachments.*
необязательный тело
file
Видео ≤ 500 МБ, остальное ≤ 50 МБ.
max 500 MB
reply_to_message_id
необязательный тело
integer
Ответ на сообщение этого чата.
must exist (messages — same conversation)
client_id
необязательный тело
string
Ключ идемпотентности (UUID).
max 64 chars
group_id
необязательный тело
string
id альбома: сообщения с одинаковым id показываются альбомом.
max 64 chars
poll
необязательный тело
array
Создать опрос.
poll.question
необязательный тело
string
Вопрос.
required with pollmax 255 chars
poll.options
необязательный тело
array
Варианты ответа (2–10).
required with pollmin 2 itemsmax 10 items
poll.options.*
необязательный тело
string
Текст варианта.
max 100 chars
poll.multiple
необязательный тело
boolean
Несколько ответов.
poll.quiz
необязательный тело
boolean
Режим викторины.
poll.anonymous
необязательный тело
boolean
Скрыть голосующих.
poll.correct
необязательный тело
array
Викторина: индексы верных вариантов.
max 10 items
poll.correct.*
необязательный тело
integer
Индекс верного варианта.
≥ 0≤ 9
todo
необязательный тело
array
Создать список задач.
todo.title
необязательный тело
string
Заголовок списка.
required with todomax 255 chars
todo.items
необязательный тело
array
Пункты {id, text}.
required with todomin 1 itemsmax 30 items
todo.items.*.id
обязательный тело
integer
id пункта (уникален в списке).
≥ 1
todo.items.*.text
обязательный тело
string
Текст пункта.
max 200 chars
todo.others_can_append
необязательный тело
boolean
Другие могут добавлять пункты.
todo.others_can_complete
необязательный тело
boolean
Другие могут отмечать пункты.
mentions
необязательный тело
array
id упомянутых.
max 50 items
mentions.*
необязательный тело
integer
id упомянутого.
silent
необязательный тело
boolean
Отправить без звука.
is_voice
необязательный тело
boolean
Пометить аудио как голосовое (is_voice или is_voice.{index}).
waveform_data
необязательный тело
array
Волна голосового, сэмплы 0..1 (массив или JSON-строка).

Запрос

curl
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"}'

Ответ

HTTP 200
{
  "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
HTTP 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
HTTP 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
HTTP 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
HTTP 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
HTTP 422 · empty
{
  "success": false,
  "code": "message.empty",
  "error": "Message cannot be empty",
  "message": "Message cannot be empty"
}
403 channel403
HTTP 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"
}
PATCH /api/messages/{message} #

Редактировать сообщение

Bearer-токен Лимит: 60/min

Только автор, пока разрешено редактирование. Realtime: MessageUpdated.

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.
content
обязательный тело
string
Текст сообщения.
max 4000 chars

Запрос

curl
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)"}'

Ответ

HTTP 200
{
  "id": 45,
  "content": "Hello @Boris Petrov! (edited)",
  "edited_at": "2026-10-22T09:06:13.000000Z",
  "link_previews": []
}
DELETE /api/messages/{message} #

Удалить сообщение

Bearer-токен Лимит: 60/min

delete_for_all=1 (автор / администрация) — у всех, иначе только у себя. Realtime: MessageDeleted.

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.
delete_for_all
необязательный query
boolean
Удалить у всех.

Запрос

curl
curl -X DELETE 'https://minchatapp.com/api/messages/4521' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "success": true
}
PUT /api/messages/{message}/reaction #

Поставить реакцию

Bearer-токен Лимит: 60/min

Одна реакция на пользователя; заменяет прежнюю. Realtime: MessageReactionUpdated.

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.
emoji_id
обязательный тело
integer
id эмодзи (см. наборы).
must exist (emojis)

Запрос

curl
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}'

Ответ

HTTP 200
{
  "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
      ]
    }
  ]
}
DELETE /api/messages/{message}/reaction #

Снять реакцию

Bearer-токен Лимит: 60/min

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.

Запрос

curl
curl -X DELETE 'https://minchatapp.com/api/messages/4521/reaction' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "reactions": []
}
GET /api/messages/{message}/reactions #

Кто поставил реакции

Bearer-токен

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.

Запрос

curl
curl 'https://minchatapp.com/api/messages/4521/reactions' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "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
        }
      ]
    }
  ]
}
POST /api/messages/{message}/poll #

Голосовать в опросе

Bearer-токен Лимит: 60/min

options — индексы (0–9). Пустой массив — отозвать голос. Автор закрывает опрос closed:true.

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.
options
необязательный тело
array
Индексы выбранных вариантов; пусто — отозвать.
max 10 items
options.*
необязательный тело
integer
Индекс варианта.
≥ 0≤ 9
closed
необязательный тело
boolean
Автор: закрыть опрос.

Запрос

curl
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]}'

Ответ

HTTP 200
{
  "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
}
POST /api/messages/{message}/todo #

Обновить список задач

Bearer-токен Лимит: 60/min

Отметить пункты выполненными/невыполненными; append добавляет пункты (если разрешено).

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.
completed
обязательный тело
array
id пунктов — выполнено.
present (may be null)max 30 items
completed.*
необязательный тело
integer
id пункта.
≥ 1
incompleted
обязательный тело
array
id пунктов — не выполнено.
present (may be null)max 30 items
incompleted.*
необязательный тело
integer
id пункта.
≥ 1
append
необязательный тело
array
Тексты новых пунктов.
max 10 items
append.*
необязательный тело
string
Текст пункта.
max 200 chars

Запрос

curl
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": []}'

Ответ

HTTP 200
{
  "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
}
GET /api/messages/{message}/readers #

Кто прочитал

Bearer-токен

Только свои сообщения в группах (400 для личных и каналов).

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.

Запрос

curl
curl 'https://minchatapp.com/api/messages/4521/readers' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "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
}
POST /api/messages/{message}/save #

Сохранить в «Избранное»

Bearer-токен Лимит: 60/min

Копирует сообщение в «Избранное» как пересылку.

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.

Запрос

curl
curl -X POST 'https://minchatapp.com/api/messages/4521/save' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "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
  }
}
POST /api/messages/{message}/callback #

Нажать inline-кнопку

Bearer-токен Лимит: 60/min

Для сообщений бота с reply_markup: отправляет боту апдейт callback_query. answer заполнен, только если бот уже ответил.

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.
data
обязательный тело
string
callback_data нажатой кнопки.
max 64 chars

Запрос

curl
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"}'

Ответ

HTTP 200
{
  "success": true,
  "callback_query_id": "1",
  "answer": null
}
422 bad
HTTP 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."
    ]
  }
}
POST /api/messages/{message}/reminder #

Напомнить о сообщении

Bearer-токен Лимит: 30/min

remind_at — от +1 минуты до +1 года. В срок: пуш (type=reminder) и realtime MessageReminderDue.

Параметры

Имя Тип Описание
message
обязательный путь
integer
id сообщения.
remind_at
обязательный тело
date-time
Когда напомнить (ISO 8601).

Запрос

curl
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"}'

Ответ

HTTP 201
{
  "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"
  }
}
GET /api/reminders #

Мои напоминания

Bearer-токен

Параметры

Без параметров.

Запрос

curl
curl 'https://minchatapp.com/api/reminders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "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"
    }
  ]
}
DELETE /api/reminders/{reminder} #

Отменить напоминание

Bearer-токен

Параметры

Имя Тип Описание
reminder
обязательный путь
integer
id напоминания.

Запрос

curl
curl -X DELETE 'https://minchatapp.com/api/reminders/3' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "success": true
}
GET /api/conversations/{conversation}/scheduled #

Отложенные сообщения

Bearer-токен

Ваши отложенные сообщения в чате (до 100 на чат).

Параметры

Имя Тип Описание
conversation
обязательный путь
integer
id чата.

Запрос

curl
curl 'https://minchatapp.com/api/conversations/12/scheduled' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "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
    }
  ]
}
POST /api/conversations/{conversation}/scheduled #

Запланировать сообщение

Bearer-токен Лимит: 30/min

Только текст. Realtime: ScheduledMessagesUpdated с числом отложенных.

Параметры

Имя Тип Описание
conversation
обязательный путь
integer
id чата.
content
обязательный тело
string
Текст сообщения.
max 4000 chars
send_at
обязательный тело
date-time
Когда отправить (ISO 8601).
reply_to_message_id
необязательный тело
integer
Сообщение, на которое отвечаем.
must exist (messages — same conversation)

Запрос

curl
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"}'

Ответ

HTTP 201
{
  "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
  }
}
PATCH /api/scheduled-messages/{scheduledMessage} #

Изменить отложенное

Bearer-токен Лимит: 60/min

Параметры

Имя Тип Описание
scheduledMessage
обязательный путь
integer
id отложенного сообщения.
content
необязательный тело
string
Текст сообщения.
max 4000 chars
send_at
необязательный тело
date-time
Когда отправить (ISO 8601).

Запрос

curl
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"}'

Ответ

HTTP 200
{
  "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 /api/scheduled-messages/{scheduledMessage} #

Удалить отложенное

Bearer-токен

Параметры

Имя Тип Описание
scheduledMessage
обязательный путь
integer
id отложенного сообщения.

Запрос

curl
curl -X DELETE 'https://minchatapp.com/api/scheduled-messages/5' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "success": true
}
POST /api/scheduled-messages/{scheduledMessage}/send-now #

Отправить отложенное сейчас

Bearer-токен Лимит: 30/min

Параметры

Имя Тип Описание
scheduledMessage
обязательный путь
integer
id отложенного сообщения.

Запрос

curl
curl -X POST 'https://minchatapp.com/api/scheduled-messages/5/send-now' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Ответ

HTTP 200
{
  "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
  }
}