Ищет письма в одной папке. Все заданные условия действуют одновременно. Ответ — как у getMessages: конверты от свежих к старым, страницами по nextBeforeUid.
| Запрос | POST /waInstance{idInstance}/searchMessages/{apiTokenInstance} |
| Тело | JSON |
| Каналы | почта |
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
folder |
string | нет | где искать: роль, имя на сервере или название. По умолчанию — «Входящие» |
from |
string | нет | отправитель: адрес или его часть — maria@client.ru, @client.ru |
to |
string | нет | получатель в «Кому»: адрес или его часть |
cc |
string | нет | получатель в «Копии»: адрес или его часть |
subject |
string | нет | тема содержит |
text |
string | нет | заголовки или тело содержат |
body |
string | нет | тело содержит |
header |
object | нет | любые заголовки: {"X-Order": "1532"} — заголовок содержит значение |
since |
string, integer | нет | с этой даты: ГГГГ-ММ-ДД или время Unix |
before |
string, integer | нет | до этой даты, не включая её |
seen |
boolean | нет | true — прочитанные, false — непрочитанные |
unseen |
boolean | нет | true — только непрочитанные, как seen: false |
flagged |
boolean | нет | отмечены флажком или нет |
answered |
boolean | нет | отвечены или нет |
larger |
integer | нет | больше этого размера, байт |
smaller |
integer | нет | меньше этого размера, байт |
limit |
integer | нет | писем на странице, 1–500. По умолчанию 50 |
beforeUid |
integer | нет | следующая страница: nextBeforeUid из прошлого ответа |
- Ищет сервер почты: подстрока, без учёта регистра. Даты сравниваются с днём, когда письмо легло в ящик.
- Поиск — в одной папке. Во всём ящике Gmail ищите в
folder: "all", у остальной почты — по папкам по очереди. - Имя заголовка в
header— латиница, цифры и дефис. - Без условий ответ такой же, как у getMessages.
Пример запроса
Письма Марии с «пробное» в теме с 1 октября:
curl
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/searchMessages/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"folder": "inbox",
"from": "maria@client.ru",
"subject": "пробное",
"since": "2026-10-01"
}'
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]
url = f"{BASE}/searchMessages/{TOKEN}"
payload = {
"folder": "inbox",
"from": "maria@client.ru",
"subject": "пробное",
"since": "2026-10-01",
}
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}/searchMessages/${GRATIO_TOKEN}`;
const payload = {
folder: "inbox",
from: "maria@client.ru",
subject: "пробное",
since: "2026-10-01",
};
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 . '/searchMessages/' . getenv('GRATIO_TOKEN');
$payload = [
'folder' => 'inbox',
'from' => 'maria@client.ru',
'subject' => 'пробное',
'since' => '2026-10-01',
];
$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": 1,
"messages": [
{
"idMessage": "c62b698304229a98aad3",
"folder": "INBOX",
"uid": 1532,
"uidValidity": 1700000000,
"chatId": "maria@client.ru",
"messageId": "CAF1xQm7v2k@mail.gmail.com",
"threadId": "c62b698304229a98aad3",
"inReplyTo": null,
"references": [],
"timestamp": 1791823658,
"internalDate": 1791823661,
"from": {"address": "maria@client.ru", "name": "Мария"},
"to": [{"address": "info@school.ru", "name": ""}],
"cc": [],
"replyTo": [],
"subject": "Запись на пробное",
"flags": ["\\Seen"],
"seen": true,
"flagged": false,
"answered": false,
"draft": false,
"size": 4821,
"hasAttachments": false
}
],
"nextBeforeUid": null
}
Поля — как у getMessages, конверт письма — в статье Почта через API.
Ещё примеры
По своему заголовку
Письма, которые ваша система отправила с заголовком X-Order:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/searchMessages/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"folder": "sent", "header": {"X-Order": "1532"}}'
Непрочитанные без ответа
Письма с домена клиента, на которые ещё не ответили:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/searchMessages/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"from": "@client.ru", "unseen": true, "answered": false}'
Большие письма
Письма больше 10 МБ в «Архиве»:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/searchMessages/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"folder": "archive", "larger": 10485760}'
Ошибки
| Код | code |
Когда | Что делать |
|---|---|---|---|
400 |
validation |
header — не объект; число или дата в неверном виде |
исправить запрос |
400 |
bad_query |
имя заголовка в header не из латиницы, цифр и дефиса |
исправить имя |
400 |
folder_not_found |
нет такой папки | проверить getFolders |
400 |
mail_error |
сервер почты не выполнил поиск | см. message — там ответ сервера |
400 |
not_authorized |
ящик не подключён | подключить ящик: connectMailbox |
501 |
not_supported |
канал — не почта | вызвать у канала «Почта» |
Общие правила — в статье Ответы и ошибки.
Что дальше
- getEmail — письмо целиком.
- getThread — вся цепочка найденного письма.
- moveMessages — разложить найденные письма по папкам.
