Ошибки, ограничения и восстановление
Контракт ответа берите из справочника: у разных опубликованных доменов сохранены прежние envelopes. Не извлекайте данные из текста message; используйте HTTP status, code и публичные details, если они есть.
| Ответ | Следующий шаг |
|---|---|
| 400 | Исправьте обязательные поля, UUID, multipart или неподдерживаемый тип адреса |
| 401 | Проверьте credential, срок действия и завершённую rotation grace; запросите у владельца действующий ключ |
| 403 | Владелец проверяет scopes, режим, approved actor и его актуальные права; повтор без изменения прав бессмысленен |
| 404 | Проверьте tenant/channel/resource ID; чужой объект не раскрывается |
| 409 | При CAS перечитайте объект и предложите человеку новое решение; прежний ключ нельзя использовать с новым payload |
| 410 | Курсор устарел: получите новую точку событий и выполните полный resync |
| 429 | Уважайте Retry-After, снижайте параллельность; лимиты доменов различаются |
| 5xx / timeout | Только для операции с подтверждённой runtime поддержкой Idempotency-Key повторите прежний ключ и payload. AI/Channels: сначала сверка чтением, автоматический повтор создания может дать дубликат. Исходящее с unknown/partial автоматически не пересылайте |
Messaging: чтение 300/мин, запись 60/мин на приложение; страницы до 100, текст до 20000 символов, до 10 вложений по 10 МиБ. Upload хранится 24 часа; лента событий — 90 дней. Это фактические ограничения, а не обещание времени доставки. Лимиты остальных API и конкретных полей указаны в OpenAPI и domain guides.
HTTP accepted не подтверждает отправку провайдером, попадание во входящие или прочтение. Неподдерживаемый delivery receipt может никогда не появиться.
Messaging возвращает ошибки как { "error": { "code": "...", "message": "...", "details": {}, "requestId": "..." } }; details и requestId могут отсутствовать. Сохраняйте requestId или ответный X-Request-Id для диагностики. У AI/Channels и обычных webhooks другие сохранённые envelopes — не применяйте к ним парсер Messaging.