Справочник по 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 API3 запроса в секунду на интеграцию
OpenAI APIЗависит от тарифа, обычно 500–10 000 RPM
Telegram Bot API30 сообщений в секунду на бота
GitHub API5000 запросов в час для авторизованных

Что делать, если упёрлись в лимит:

  • Добавить паузу между запросами. Самый простой способ — 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 раньше, чем сломается продакшн.

Ссылки

Ссылки