Возвращает письмо целиком: конверт, новый текст без цитаты и подписи, полный текст и html как есть, все заголовки, вложения и само письмо ссылками. Ещё — вид письма: человек, автоответ, рассылка, отчёт сервера или заявка с формы сайта. Чтение не помечает письмо прочитанным.
| Запрос | POST /waInstance{idInstance}/getEmail/{apiTokenInstance} |
| Тело | JSON |
| Каналы | почта |
Параметры
Письмо — одним из способов, подробно — в статье Почта через API:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
folder + uid |
string, integer | одно из трёх | папка и номер письма в ней |
idMessage |
string | одно из трёх | id письма. С chatId письмо найдётся и по журналу канала |
messageId |
string | одно из трёх | заголовок Message-ID |
chatId |
string | нет | адрес собеседника — вместе с idMessage |
Пример запроса
Письмо из уведомления — по idMessage и chatId:
curl
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/getEmail/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"idMessage": "7877cd439c05bc16617b",
"chatId": "maria@client.ru"
}'
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]
url = f"{BASE}/getEmail/{TOKEN}"
payload = {"idMessage": "7877cd439c05bc16617b", "chatId": "maria@client.ru"}
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}/getEmail/${GRATIO_TOKEN}`;
const payload = { idMessage: "7877cd439c05bc16617b", chatId: "maria@client.ru" };
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 . '/getEmail/' . getenv('GRATIO_TOKEN');
$payload = ['idMessage' => '7877cd439c05bc16617b', 'chatId' => 'maria@client.ru'];
$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 — ответ Марии с цитатой, подписью и анкетой во вложении:
{
"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,
"text": "Да, в субботу удобно. Анкету приложила.",
"quote": "пн, 12 окт. 2026 г. в 20:07, Школа робототехники <info@school.ru>:\n> Мария, есть место в субботу на 11:00. Подойдёт?",
"signature": "Мария Иванова\n+7 999 123-45-67",
"forwarded": false,
"fullText": "Да, в субботу удобно. Анкету приложила.\n\n-- \nМария Иванова\n+7 999 123-45-67\n\nпн, 12 окт. 2026 г. в 20:07, Школа робототехники <info@school.ru>:\n> Мария, есть место в субботу на 11:00. Подойдёт?",
"html": "<div dir=\"ltr\">Да, в субботу удобно. Анкету приложила.<br>-- <br>Мария Иванова<br>+7 999 123-45-67</div><div class=\"gmail_quote\">пн, 12 окт. 2026 г. в 20:07, Школа робототехники <info@school.ru>:<blockquote>Мария, есть место в субботу на 11:00. Подойдёт?</blockquote></div>",
"headers": [
{"name": "MIME-Version", "value": "1.0"},
{"name": "From", "value": "Мария <maria@client.ru>"},
{"name": "Date", "value": "Mon, 12 Oct 2026 21:07:38 +0300"},
{"name": "Message-ID", "value": "<CAF1xQm9p4r@mail.gmail.com>"},
{"name": "In-Reply-To", "value": "<gr.ztme4rgc2femufilbicvmeimbh@school.ru>"},
{"name": "References", "value": "<CAF1xQm7v2k@mail.gmail.com> <gr.ztme4rgc2femufilbicvmeimbh@school.ru>"},
{"name": "Subject", "value": "Re: Запись на пробное"},
{"name": "To", "value": "info@school.ru"},
{"name": "Content-Type", "value": "multipart/mixed; boundary=\"000000000000a1b2c3\""}
],
"attachments": [
{"index": 0, "fileName": "Анкета.pdf", "mimeType": "application/pdf", "size": 48000, "contentId": null, "inline": false,
"downloadUrl": "https://api.gratio.net/media/7100000001/maria@client.ru/7877cd439c05bc16617b/0/5c1e…"}
],
"rawUrl": "https://api.gratio.net/media/7100000001/maria@client.ru/7877cd439c05bc16617b/999/a7d0…",
"kind": "personal",
"form": null,
"report": null,
"truncated": false
}
Поля ответа
Сначала — поля конверта, см. Почта через API. Затем:
| Поле | Тип | Описание |
|---|---|---|
text |
string | новый текст письма — без цитаты и подписи |
quote |
string | цитата прошлых писем; "" — цитаты нет |
signature |
string | подпись: после «-- », «С уважением, …», «Отправлено с iPhone» |
forwarded |
boolean | письмо пересланное: такое не режется, text — целиком |
fullText |
string | весь текст письма как есть; без text/plain — текст из html |
html |
string | html-версия как есть; null — её нет |
headers |
array | все заголовки по порядку: {"name", "value"} |
attachments |
array | вложения — ниже |
rawUrl |
string | письмо целиком, файл .eml |
kind |
string | вид письма — ниже |
form |
object | разобранная заявка с формы сайта; null — письмо не заявка |
report |
object | у отчёта сервера о недоставке или прочтении — ниже; иначе null |
truncated |
boolean | true — письмо получено не целиком |
Цитата отрезается по разметке почтовых программ — Gmail, Яндекс, Mail, Outlook, Apple Mail — и по строкам вида «12.10.2026, 20:07, Школа info@school.ru:». Пересланное письмо и ответ вразбивку внутри цитаты не режутся. fullText и html доступны всегда.
Вложение
| Поле | Тип | Описание |
|---|---|---|
index |
integer | номер вложения в письме |
fileName |
string | имя файла |
mimeType |
string | тип файла |
size |
integer | размер, байт |
contentId |
string | id картинки в тексте письма (cid:); null — у обычного вложения |
inline |
boolean | true — картинка внутри текста письма |
downloadUrl |
string | ссылка на файл |
Вид письма — kind
kind |
Что это |
|---|---|
personal |
письмо человека |
form |
заявка с формы сайта — письмо совпало с правилом emailForms |
auto_reply |
автоответ: «я в отпуске», «ваше письмо получено» |
bulk |
рассылка: заголовки List-Unsubscribe, Precedence: bulk |
service |
уведомление сервиса: noreply@…, Auto-Submitted |
bounce |
отчёт о недоставке |
read_receipt |
отчёт о прочтении |
Вид только помечает письмо и ничего не отсеивает. Ответ на ваше письмо — всегда personal, даже с заголовками рассылки; автоответ остаётся автоответом.
Заявка — form
Есть у писем вида form:
{"rule": "Заявка с сайта", "fields": {"name": "Мария Иванова", "phone": "8 (999) 123-45-67", "child_age": "9 лет"},
"missing": [], "complete": true, "phone": "+79991234567", "email": null, "name": "Мария Иванова"}
Поля заявки и правила — в статье Заявки с форм сайта.
Отчёт сервера — report
Есть у писем вида bounce и read_receipt, если отчёт в стандартном формате. Недоставка вашего письма:
{"kind": "delivery", "originalMessageId": "gr.mcduelocvo27nud5klrpglrn3m@school.ru", "recipients": ["papa@client.ru"],
"action": "failed", "status": "5.1.1", "diagnostic": "550 5.1.1 Mailbox not found"}
| Поле | Тип | Описание |
|---|---|---|
kind |
string | delivery — о доставке, read — о прочтении |
originalMessageId |
string | Message-ID письма, о котором отчёт |
recipients |
array | о каких адресах |
action |
string | failed, delayed, delivered; у отчёта о прочтении — displayed |
status |
string | код состояния: 5.1.1 |
diagnostic |
string | ответ сервера получателя |
Отчёт о вашем письме приходит и уведомлением outgoingMessageStatus: failed с причиной или read.
Ошибки
| Код | code |
Когда | Что делать |
|---|---|---|---|
400 |
validation |
не указано письмо: нужно idMessage, или folder и uid, или messageId |
добавить поля |
400 |
not_found |
письма нет | указать folder и uid из getMessages |
400 |
folder_not_found |
нет папки folder |
проверить getFolders |
400 |
not_authorized |
ящик не подключён | подключить ящик: connectMailbox |
501 |
not_supported |
канал — не почта | вызвать у канала «Почта» |
Общие правила — в статье Ответы и ошибки.
Что дальше
- replyEmail — ответить на письмо.
- getThread — вся цепочка.
- getEmailRaw — письмо файлом
.eml. - Заявки с форм сайта — разбор заявок.
