Перейти к содержимому

getMessages

Обновлено 17 октября 2026

Возвращает конверты писем папки — свежие первыми, страницами до 500 писем. Следующая страница — по nextBeforeUid из прошлого ответа. Чтение не помечает письма прочитанными.

Запрос POST /waInstance{idInstance}/getMessages/{apiTokenInstance}
Тело JSON
Каналы почта

Параметры

Параметр Тип Обязательный Описание
folder string нет папка: роль, имя на сервере или название. По умолчанию — «Входящие»
limit integer нет писем на странице, 1–500. По умолчанию 50
beforeUid integer нет следующая страница: письма с uid меньше этого. Передайте nextBeforeUid из прошлого ответа
unseen boolean нет true — только непрочитанные
since string, integer нет письма с этой даты: ГГГГ-ММ-ДД или время Unix
before string, integer нет письма до этой даты, не включая её

since и before сравниваются с датой, когда письмо легло в ящик, с точностью до дня. Отбор по отправителю, теме и тексту — в searchMessages.

Пример запроса

Непрочитанные письма «Входящих», по два на странице:

curl

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/getMessages/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"folder": "inbox", "limit": 2, "unseen": true}'

Python

import os
import requests

BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]

url = f"{BASE}/getMessages/{TOKEN}"
payload = {"folder": "inbox", "limit": 2, "unseen": True}
response = requests.post(url, json=payload, timeout=60)
print(response.status_code, response.json())

Node.js

const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/waInstance${GRATIO_ID}`;

const url = `${base}/getMessages/${GRATIO_TOKEN}`;
const payload = { folder: "inbox", limit: 2, unseen: true };
const response = await fetch(url, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(payload),
});
console.log(response.status, await response.json());

PHP

<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/getMessages/' . getenv('GRATIO_TOKEN');
$payload = ['folder' => 'inbox', 'limit' => 2, 'unseen' => true];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);

Пример ответа

Ответ 200 OK:

{
  "folder": "INBOX",
  "uidValidity": 1700000000,
  "total": 14,
  "messages": [
    {
      "idMessage": "7877cd439c05bc16617b",
      "folder": "INBOX",
      "uid": 1540,
      "uidValidity": 1700000000,
      "chatId": "maria@client.ru",
      "messageId": "CAF1xQm9p4r@mail.gmail.com",
      "threadId": "c62b698304229a98aad3",
      "inReplyTo": "gr.ztme4rgc2femufilbicvmeimbh@school.ru",
      "references": ["CAF1xQm7v2k@mail.gmail.com", "gr.ztme4rgc2femufilbicvmeimbh@school.ru"],
      "timestamp": 1791828458,
      "internalDate": 1791828460,
      "from": {"address": "maria@client.ru", "name": "Мария"},
      "to": [{"address": "info@school.ru", "name": ""}],
      "cc": [],
      "replyTo": [],
      "subject": "Re: Запись на пробное",
      "flags": [],
      "seen": false,
      "flagged": false,
      "answered": false,
      "draft": false,
      "size": 52817,
      "hasAttachments": true
    },
    {
      "idMessage": "92395522895e09c7929a",
      "folder": "INBOX",
      "uid": 1537,
      "uidValidity": 1700000000,
      "chatId": "oleg@client.ru",
      "messageId": "5f2a91c3@client.ru",
      "threadId": "92395522895e09c7929a",
      "inReplyTo": null,
      "references": [],
      "timestamp": 1791826200,
      "internalDate": 1791826203,
      "from": {"address": "oleg@client.ru", "name": "Олег"},
      "to": [{"address": "info@school.ru", "name": ""}],
      "cc": [],
      "replyTo": [],
      "subject": "Вопрос по оплате",
      "flags": [],
      "seen": false,
      "flagged": false,
      "answered": false,
      "draft": false,
      "size": 3120,
      "hasAttachments": false
    }
  ],
  "nextBeforeUid": 1537
}

Поля ответа

Поле Тип Описание
folder string имя папки на сервере
uidValidity integer версия нумерации папки. Сменилась между страницами — начните сначала
total integer сколько писем подходит под условия; с beforeUid — среди писем старше него
messages array конверты писем, от свежих к старым — поля в статье Почта через API
nextBeforeUid integer beforeUid для следующей страницы; null — страница последняя

Все письма папки

Пройти папку от свежих писем к старым страницами по 200:

import os
import requests

BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]


def letters(folder: str = "inbox", since: str | None = None):
    """Конверты писем папки — от свежих к старым."""
    body = {"folder": folder, "limit": 200}
    if since:
        body["since"] = since
    validity = None
    while True:
        r = requests.post(f"{BASE}/getMessages/{TOKEN}", json=body, timeout=90)
        r.raise_for_status()
        page = r.json()
        if validity is not None and page["uidValidity"] != validity:
            raise RuntimeError("нумерацию папки сменили на сервере — пройдите папку заново")
        validity = page["uidValidity"]
        yield from page["messages"]
        if page["nextBeforeUid"] is None:
            return
        body["beforeUid"] = page["nextBeforeUid"]


for env in letters("inbox", since="2026-10-01"):
    print(env["uid"], env["from"]["address"], env["subject"])

Вы увидите строки вида 1540 maria@client.ru Re: Запись на пробное. Новые письма между страницами в обход не попадут — они придут уведомлением Письмо.

Ошибки

Код code Когда Что делать
400 validation limit или beforeUid — не число; дата не ГГГГ-ММ-ДД и не время Unix исправить запрос
400 folder_not_found нет такой папки проверить getFolders
400 not_authorized ящик не подключён подключить ящик: connectMailbox
501 not_supported канал — не почта вызвать у канала «Почта»

Общие правила — в статье Ответы и ошибки.

Что дальше

  • searchMessages — поиск по отправителю, теме, тексту и флагам.
  • getEmail — письмо целиком.
  • markMessages — отметить прочитанными.

Была ли статья полезна?