Справочник по API для тех, кто автоматизирует процессы, подключает ИИ-агентов и хочет понимать, как сервисы договариваются между собой.
Большинство «магии» в ИИ-проектах — это не магия. Когда сайт подтягивает погоду, бот создаёт запись в Notion, агент читает базу данных, платёжный сервис списывает деньги — за всем этим стоит один и тот же механизм. Программа отправляет запрос другой программе по формальным правилам и получает ответ. Эти правила и есть API.
Если вы автоматизируете процессы, подключаете агента к Notion, настраиваете связки в n8n или просто хотите понимать, о чём говорит разработчик — этот материал для вас. Здесь нет ни одной строчки кода, которую нужно запускать. Но после прочтения вы будете читать документацию любого API как опытный пользователь.
Что это
API (Application Programming Interface) — это набор правил, по которым одна программа обращается к другой. Не «что-то про серверы» и не «язык программирования». Это формат разговора между двумя сервисами.
Удобная аналогия — ресторан. Вы не заходите на кухню и не говорите повару: «Положи в тарелку две картошки и не забудь про соль». Вы смотрите меню — это список доступных блюд. Выбираете позицию — официант передаёт заказ. Через какое-то время вам приносят тарелку. Меню — это и есть API: описание того, что можно попросить, в каком виде придёт ответ и какие шаги нужно сделать, чтобы получить результат.
В мире программ всё то же самое:
- Клиент (сайт, бот, ИИ-агент, мобильное приложение) формирует запрос.
- API принимает запрос, проверяет права, передаёт дальше.
- Сервер или база данных выполняют работу и возвращают результат.
- API отдаёт ответ в стандартном формате (чаще всего JSON).
sequenceDiagram
participant A as Клиент (сайт, бот, агент)
participant B as API
participant C as Сервер / База данных
A->>B: Запрос (дай данные / создай запись)
B->>C: Передача запроса
C->>B: Ответ (JSON с данными)
B->>A: Резвый результат
Ключевая идея: сервисы общаются через API, не зная друг о друге ничего, кроме формата общения. Notion не знает, какой у вас сайт. Сайт не знает, как устроена база Notion внутри. Они просто договорились о правилах обмена — и этого достаточно.
Ключевое правило: API — это контракт между двумя системами. Одна сторона обещает принимать запросы в таком-то формате. Другая сторона обещает отправлять запросы именно так. Всё остальное — детали реализации.
Зачем нужно
API нужны каждый раз, когда двум сервисам нужно обменяться данными без участия человека. Самые частые сценарии в практике VOROBEOFFAI:
- Сайт + Notion. Сайт запрашивает контент из базы данных Notion через Notion API и рендерит страницы. Это превращает Notion в headless CMS — редактор для человека, база данных для машины.
- Telegram-бот + CRM. Бот создаёт лид в CRM через её API. Заявка прилетает туда автоматически, без ручного копирования.
- ИИ-агент + база знаний. Агент читает документы и обновляет данные через API — например, добавляет резюме звонка в Notion после встречи.
- Оплата на сайте. Сайт отправляет запрос на оплату через API платёжного сервиса (ЮKassa, Stripe, Tinkoff), получает подтверждение и открывает доступ.
- Автоматизация в n8n / Make. Конструктор собирает цепочку из нескольких сервисов, соединяя их через их API. Без понимания API собрать рабочую связку вслепую — невозможно.
Если вы понимаете, как работает API, вы:
- понимаете, что вообще можно автоматизировать, а что нет;
- оцениваете сложность интеграции до того, как начали;
- разговариваете с разработчиком на одном языке;
- самостоятельно настраиваете простые связки в n8n или Make.
Как устроено
Любой API — это три слоя:
| Слой | Что делает | Пример |
|---|---|---|
| Транспорт | По какому каналу идёт запрос | HTTP/HTTPS — тот же протокол, по которому открываются сайты |
| Формат запроса | Как сформулировать, что нужно | Метод (GET/POST/PUT/DELETE) + URL + параметры + тело |
| Формат ответа | В каком виде придёт результат | JSON (чаще всего), реже XML, CSV или HTML |
Когда вы открываете страницу в браузере, браузер отправляет HTTP-запрос GET https://example.com/ и получает HTML. Когда агент работает с Notion API, он отправляет HTTP-запрос GET https://api.notion.com/v1/pages/<id> с заголовком авторизации и получает JSON. Разница — только в формате ответа и в данных авторизации.
Самая частая единица обмена — JSON (JavaScript Object Notation). Это текстовый формат вида «ключ: значение», который читается и человеком, и машиной:
{ “id”: “123”, “title”: “Webhook простыми словами”, “status”: “Черновик”, “created_at”: “2026-05-11” }
Ключи — слева, значения — справа. Строки в кавычках, числа без, вложенные объекты в фигурных скобках, списки — в квадратных. Этого достаточно, чтобы представить практически любые данные.
Когда использовать
Все API решают одну задачу — обмен данными между сервисами. Но разные стили подходят под разные ситуации. Выбор стиля — это первый шаг проектирования интеграции.
| Стиль | Как работает | Когда использовать | Ограничения |
|---|---|---|---|
| REST | Запросы по URL с HTTP-методами (GET, POST, PUT, DELETE) | Большинство сервисов и интеграций; читать/писать конкретные записи | Лишние данные в ответе; много запросов для сложных структур |
| GraphQL | Один endpoint, клиент запрашивает нужные поля | Сложные запросы со многими связями; мобильные приложения с медленным каналом | Сложнее в реализации; нагрузка на сервер при тяжёлых запросах |
| Webhook | Сервис сам отправляет данные при событии | Реакция на события в реальном времени (новая заявка, оплата, подписка) | Нужен публичный URL для приёма; сложнее отлаживать |
| MCP | Стандарт подключения ИИ-агентов к инструментам | Когда ИИ-агент должен вызвать функцию сервиса по своему решению | Молодой стандарт, не у всех сервисов есть MCP-сервер |
REST — самый распространённый стиль. Если в документации сервиса не сказано иначе — скорее всего, это REST. Использует стандартные HTTP-методы:
GET /pages— получить список страниц.POST /pages— создать новую страницу.PATCH /pages/123— обновить страницу с id 123.DELETE /pages/123— удалить страницу с id 123.
REST хорош тем, что его поведение предсказуемо: метод говорит, что нужно сделать, URL говорит, с каким ресурсом, а тело запроса (если есть) — какие данные передать. Документация REST API обычно читается линейно: список endpoint’ов → параметры → пример ответа.
Пример
Минимальный пример ответа REST API на запрос списка страниц:
{ “results”: [ { “id”: “123”, “title”: “Webhook простыми словами”, “status”: “Черновик”, “created_at”: “2026-05-11” }, { “id”: “124”, “title”: “API простыми словами”, “status”: “Опубликовано”, “created_at”: “2026-05-12” } ], “next_cursor”: null }
Обратите внимание на две вещи:
results— массив найденных записей. Почти все REST API возвращают данные в массиве с предсказуемым именем (results,data,items).next\_cursor— указатель на следующую страницу. Если записей много, сервис отдаёт их порциями (обычно по 10–100), и чтобы получить следующую порцию, нужно передать этот курсор в следующий запрос.
Так работает пагинация — почти все API, где данных больше одного экрана, отдают их порциями. Это не баг, а способ не перегружать ни сервер, ни клиента.
Аутентификация: как API узнаёт, что вы — это вы
Большинство API требуют доказательства, что вы имеете право обращаться к сервису. Без этого любой человек в интернете мог бы читать чужие данные или удалять чужие записи. Три основных способа:
| Способ | Что это | Когда встречается |
|---|---|---|
| API-ключ | Секретная строка, которую вы передаёте в заголовке каждого запроса | Notion, OpenAI, DeepSeek, большинство простых сервисов |
| OAuth | Протокол, по которому пользователь разрешает сервису доступ к своим данным от своего имени | Google, Яндекс, Notion MCP, любой «войти через Google» |
| JWT (токен) | Временный ключ, который сервис выдаёт после авторизации и принимает в течение ограниченного времени | Мобильные приложения, сложные корпоративные системы |
Самый частый сценарий — API-ключ. Вы регистрируетесь в сервисе, заходите в личный кабинет, находите раздел «API» или «Интеграции», нажимаете «Создать ключ» — и получаете длинную строку вида ntn\_Y6...RfmC. Эту строку агент или скрипт подставляет в каждый запрос в специальном заголовке.
Внимание: API-ключ — это пароль. Не храните его в коде, не отправляйте в чаты, не коммитьте в репозиторий. Используйте переменные окружения (
.env), хранилища секретов (Vault, Doppler) или встроенные средства платформы (например, Codex Secrets).
OAuth сложнее, но безопаснее: пользователь сам нажимает «Разрешить» в браузере, и сервис выдаёт токен без раскрытия пароля приложению. Именно так работает Notion MCP — пользователь один раз логинится через браузер, и дальше агент действует от его имени без передачи пароля.
Rate limits: когда «подождите» — это нормально
У каждого API есть ограничение на количество запросов за период. Это rate limit — лимит, который защищает сервис от перегрузки. Если вы делаете слишком много запросов подряд, сервис вернёт ошибку 429 Too Many Requests.
Примеры реальных лимитов:
| Сервис | Лимит |
|---|---|
| Notion API | 3 запроса в секунду на интеграцию |
| OpenAI API | Зависит от тарифа, обычно 500–10 000 RPM |
| Telegram Bot API | 30 сообщений в секунду на бота |
| GitHub API | 5000 запросов в час для авторизованных |
Что делать, если упёрлись в лимит:
- Добавить паузу между запросами. Самый простой способ — sleep на 200–500 мс между вызовами.
- Использовать кеширование. Если данные не меняются каждую секунду, сохраните ответ локально и не дёргайте API заново.
- Обрабатывать 429 и повторять с задержкой (retry with backoff). Получили 429 — подождали 1 секунду, повторили. Снова 429 — подождали 2 секунды, повторили. И так до победного (обычно до 3–5 попыток).
- Батчить запросы. Многие API умеют принимать несколько операций за один вызов — это в десятки раз эффективнее, чем слать по одной.
Коды ответов: что значит число в ответе
Любой HTTP-запрос возвращает числовой код, по которому сразу понятно, что произошло. Это самый быстрый способ диагностики — даже без чтения тела ответа.
| Код | Значение | Что делать |
|---|---|---|
| 200 | Успех | Всё работает, можно забирать данные из ответа |
| 201 | Создано | POST-запрос завершился созданием ресурса |
| 400 | Неверный запрос | Проверить формат данных: опечатка в поле, неправильный тип |
| 401 | Не авторизован | Проверить API-ключ или токен — возможно, истёк или передан неправильно |
| 403 | Запрещено | Ключ есть, но прав на это действие нет |
| 404 | Не найдено | Проверить URL и id ресурса — возможно, он удалён |
| 429 | Слишком много запросов | Подождать и повторить, добавить backoff |
| 500 | Ошибка сервера | Повторить позже; если не проходит — связаться с поддержкой |
| 503 | Сервис недоступен | Сервер на обслуживании или перегружен; повторить через минуту |
Правило простое: коды 2xx — всё хорошо, 4xx — ошибка на вашей стороне (запрос неправильный), 5xx — ошибка на стороне сервиса (у них что-то сломалось). Если видите 4xx — чините запрос. Если видите 5xx — повторяйте.
Что такое MCP и зачем он нужен
MCP (Model Context Protocol) — относительно новый стандарт, но он заслуживает отдельного упоминания, потому что меняет правила игры для ИИ-агентов. До MCP агенту нужно было заранее знать, какие команды можно слать в каждый сервис. С MCP агент подключается к MCP-серверу и сам обнаруживает доступные инструменты, их параметры и формат вызова.
Если REST — это меню ресторана, то MCP — это открытая кухня с подписанными контейнерами: агент видит, что лежит в каждом контейнере, читает этикетку и решает сам, что взять.
В 2026 году MCP уже поддерживают Notion, Anthropic, Cloudflare, JetBrains, Replit и десятки других платформ. Если вы строите ИИ-агента — MCP-сервер почти всегда лучше, чем прямое обращение к REST API. Подробный разбор — в материале Notion MCP: подключаем Notion к ИИ-агенту за минуту.
Ограничения
Ограничения
Что учитывать
API-ключ — это пароль — утечка одного ключа означает компрометацию всех данных, к которым у него есть доступ.
Храните в .env, Vault, Doppler или встроенных секретах платформы. Никогда в коде и в чатах.
Rate limits — не рекомендация, а закон — при превышении сервис вернёт 429, а при систематическом превышении может временно заблокировать интеграцию.
Закладывайте backoff и паузы с первого дня.
Документация — единственный источник истины — если поведение API расходится с вашим представлением о нём, верьте документации, а не своей памяти.
Сервисы обновляют API без обратной совместимости.
Версионирование ломает интеграции — сервис может выпустить новую мажорную версию API, и старые вызовы перестанут работать.
Подписывайтесь на changelog.
JSON — не единственный формат — встречаются XML, CSV, form-data, protobuf.
Проверяйте, что отдаёт конкретный endpoint, прежде чем парсить ответ.
Пагинация обязательна — почти все реальные списки больше одного экрана.
Если ваш код не обрабатывает next\_cursor, вы увидите только первую порцию и будете думать, что данных больше нет.
Антипаттерны
Антипаттерны
Чего не делать
Хранить API-ключи в коде или в репозитории — даже в приватном.
GitGuardian в 2026 году нашёл 29 миллионов утечек секретов на GitHub. Один git push без проверки — и ваш ключ в общем доступе.
Игнорировать коды ошибок и молча повторять запрос — если сервис вернул 400, повторять бессмысленно.
Сначала разберитесь, что не так с форматом данных, потом повторяйте.
Делать запросы в цикле без паузы — даже если rate limit формально позволяет, поставьте sleep в 100–200 мс.
Это и сервис бережёт, и вас защищает от внезапных 429.
Парсить HTML вместо вызова API — если у сервиса есть API, используйте его.
Парсинг HTML ломается при первом же обновлении вёрстки, и это нарушает условия использования большинства сервисов.
Полагаться только на «у меня работало» — API меняются.
Пишите интеграцию так, чтобы при смене формата ответа вы узнали об этом первым (alerting на 4xx/5xx, а не только на 200).
Писать свою реализацию OAuth с нуля — это один из самых сложных протоколов.
Используйте готовые библиотеки (Authlib, requests-oauthlib), если только нет очень веской причины делать иначе.
Чеклист
Чеклист
Проверка перед запуском
Цель определена
понятно, какую задачу решает интеграция и какие данные нужно получить или передать.
Документация изучена
прочитан раздел «Getting started» и список endpoint’ов, понятны форматы запросов и ответов.
API-ключ получен и безопасно сохранён — в .env, Vault или встроенных секретах платформы.
В репозитории ключа нет.
Аутентификация настроена
заголовок с ключом или OAuth-токен добавляется к каждому запросу автоматически.
Rate limits учтены
между запросами есть пауза, в коде есть обработка 429 с retry-with-backoff.
Обработка ошибок написана
код понимает 4xx и 5xx, логирует неуспешные запросы, умеет повторить при временных сбоях.
Пагинация реализована
код обрабатывает next\_cursor или эквивалент и проходит по всем страницам, пока данные не закончатся.
Логирование настроено — каждый запрос и ответ логируется с указанием endpoint, статуса и времени.
Без логов диагностика «почему ничего не работает» превращается в гадание.
Интеграция протестирована — есть тесты на основные сценарии:
успех, 401, 404, 429, 500. Тесты запускаются регулярно, а не только в момент разработки.
Changelog сервиса на мониторинге
вы подписаны на обновления API, чтобы узнать о breaking changes раньше, чем сломается продакшн.
Ссылки
Ссылки
- Notion API — официальная документация — справочник по всем endpoint’ам Notion API с примерами запросов и ответов.
- HTTP — справочник по протоколу на MDN — что такое методы GET/POST/PUT/DELETE, заголовки, коды ответов.
- JSON — описание формата — спецификация JSON с примерами на русском.
- OAuth 2.0 — спецификация авторизации — официальный сайт стандарта OAuth с разбором всех flow’ов.
- GitGuardian State of Secrets Sprawl 2026 — отчёт об утечках секретов на GitHub (29 миллионов находок за год).