Привет! Я Андрей Безруков, ведущий продакт-менеджер в Авито Рекламе. Мы с командой разработали публичный API, чтобы рекламные агентства и профессиональные рекламодатели могли автоматизировать работу с Авито Рекламой. В статье расскажу, как выбирали архитектуру, тестировали систему и упрощали подключение пользователей.

Зачем Авито Рекламе понадобился публичный API 

Авито Реклама — платформа для продвижения бизнеса, где можно рекламировать как свой профиль и объявления на Авито, так и сайт, лендинг или интернет-магазин. Среди пользователей — крупные бренды, рекламные агентства, застройщики и компании из разных сфер бизнеса.

Рекламный рынок очень технологичный. За последние 15 лет появилось множество SaaS-сервисов и технологий, с помощью которых легко построить сквозную аналитику рекламы, связать ее показы с заказами в CRM, а также автоматизировать запуск и оптимизацию кампаний. В некоторых сервисах можно из одного окна управлять рекламными кампаниями на нескольких площадках. У всех крупных рекламных систем уже есть полный API, который позволяет выполнять многие операции без обращения к интерфейсу.

Практически сразу после запуска Авито Рекламы профессиональные пользователи начали запрашивать API для работы с рекламными кампаниями без обращения к интерфейсу. Особенно востребованным оказалось управление балансами: крупные агентства одновременно ведут сотни клиентов, у каждого из которых свои договоры, бюджеты, медиапланы, графики оплат и KPI. 

У каждого клиента свои условия оплаты: один оплачивает всю кампанию заранее, другой пополняет баланс частями, третий еженедельно пересматривает бюджет. Агентству приходится объединять все поступления, контролировать общий счет, распределять средства между рекламодателями и следить, чтобы ни одна кампания не остановилась из-за нехватки баланса и нигде не было перерасхода.

Для работы с рекламными кампаниями крупные клиенты используют CRM, внутренние сервисы аналитики и автобиддеры — системы автоматического управления ставками. Мы разработали публичный API, чтобы эти решения могли взаимодействовать с Авито Рекламой. 

Как общая инфраструктура OpenAPI ускорила разработку

У Авито есть общая инфраструктура OpenAPI, где команды разных внутренних продуктов могут опубликовать свои методы и документацию к ним. Вопросы аутентификации, протокола обмена данными, контроля нагрузки и логирования использования уже были решены на уровне общей инфраструктуры. Это ускорило разработку, но одновременно наложило ограничения на проектирование API. 

Для получения данных в API используются HTTP-методы GET и POST. Выбор метода зависит от особенностей инфраструктуры: если запрос содержит большое количество параметров и требует объемного тела, используется POST, даже когда операция предназначена только для получения списка. 

Как объединили микросервисы в публичном API 

Мы в Авито используем микросервисную архитектуру, поэтому наш бэкенд весьма разнообразный. Такая архитектура помогает распределять нагрузку между компонентами системы. Например, рекламный движок, логирование статистики и биллинг работают с высокой интенсивностью, тогда как отдельные сервисы управления рекламными кампаниями требуют меньше ресурсов.

Мы рассматривали возможность опубликовать методы каждого сервиса в общей инфраструктуре OpenAPI Авито. От этого подхода отказались из-за частых изменений внутренних контрактов, которые могли нарушать стабильность внешнего API. 

Как обеспечили обратную совместимость

Для внешних интеграций критически важна обратная совместимость API. Мажорная версия должна оставаться стабильной в течение длительного времени, а новые возможности — добавляться без изменения существующих полей и правил валидации. 

Авито Реклама постоянно развивается: появляются новые функции, из-за чего внутренние контракты между системами регулярно меняются. Ключевые сервисы платформы за месяц версионируют API до 30 раз. Поля со скалярными значениями заменяются структурами, устаревшие поля и методы удаляются. Некоторые операции выполняются в виде транзакций, использующих последовательные вызовы методов разных сервисов. Каждый квартал мы тратим до 20% времени разработки на рефакторинг и повышение стабильности продукта.

Чтобы изменения внутренних контрактов не затрагивали клиентские интеграции, мы разработали отдельный сервис композиции API со строгими правилами обратной совместимости. Он объединяет вызовы внутренних сервисов и предоставляет пользователям стабильный внешний интерфейс. 

Сервис композиции позволяет сохранять стабильный внешний API при изменениях внутренних контрактов
Сервис композиции позволяет сохранять стабильный внешний API при изменениях внутренних контрактов

Как ограничили нагрузку на API

У каждого метода должны быть свои ограничения по использованию — количество вызовов в секунду, для которых гарантируется стабильная работа. С помощью инфраструктуры Авито мы смогли выставить их прямо «из коробки».

Фактическая нагрузка зависит не только от метода API, но и от того, как клиент использует его в своей системе. Метод получения статистики — один из самых востребованных, поэтому система должна обрабатывать тысячи таких запросов в секунду. Каждый запрос требует вычислений в СУБД, поскольку статистика обновляется в реальном времени. Возможности оптимизации этих операций ограничены. 

Допустим, пользователь № 1 сделал так, что статистика запрашивается при любом обновлении интерфейса его приложения по всем рекламным кампаниям, включая завершенные. Пользователь № 2 настроил задания по расписанию (cron jobs): статистика по активным рекламным кампаниям обновляется раз в три часа, а по завершенным — раз в неделю. Оба клиента соблюдают ограничения по количеству запросов в секунду (RPS), но создают разную совокупную нагрузку на систему.

Для решения мы ввели баллы API и начисляем лимит раз в неделю. Его можно расходовать на вызовы всех методов. У каждого из них своя «цена». Остаток баллов и расход можно посмотреть в ответе на каждый вызов. Такой механизм позволяет определять индивидуальные лимиты для пользователей с разным количеством активных рекламных кампаний.

Мы отслеживаем нагрузку на API и расходование баллов. Если пользователю не хватает установленного лимита, анализируем характер запросов и либо увеличиваем количество доступных баллов, либо рекомендуем оптимизировать интеграцию. 

Как выбирали методы для первого релиза 

Мы понимали, что многие методы создания и редактирования различных сущностей будут самыми сложными в поддержке API. Например, в интерфейсе достаточно сложно создать несколько сотен рекламных кампаний с тысячами креативов и отправить их одновременно на модерацию. С API это будет легко.

Для первого релиза выбрали наиболее востребованные и простые в реализации методы. Первоначальный список составили с учетом моего опыта автоматизации рекламы в агентстве, а затем обсудили его с будущими пользователями API. 

В первый релиз вошли основные методы чтения данных, включая получение статистики. Также добавили создание дочерних аккаунтов и управление их балансами — эти возможности особенно востребованы агентствами. Для сервисов-автобиддеров предусмотрели изменение бюджетов и ставок. 

Как упростили интеграцию с помощью SDK

Для подключения к API пользователям необходимы базовые навыки программирования. Уровень технической подготовки клиентов различается: с API работают как опытные разработчики, так и специалисты, которые создают небольшие интеграции для собственных задач.  

Например, пользователь может создать коннектор для выгрузки статистики по всем рекламным кампаниям в дашборд или написать скрипт для автоматического обновления данных в Google Sheets. 

Чтобы упростить задачу разработчикам клиентов, мы подготовили SDK на популярных в рекламной индустрии языках программирования: Python, PHP, JS/TS и Go. Их можно установить через пакетный менеджер языка и использовать в своем коде, при этом не придется проходить аутентификацию и описывать свойства объектов.

Сейчас мы отслеживаем востребованность SDK по статистике GitHub и пакетных менеджеров. Эти данные помогут оценить целесообразность дальнейшей поддержки библиотек. 

Результаты запуска и дальнейшее развитие API

На конец августа 2026 года API использует около четверти наших клиентов. Одни создают аккаунты для рекламодателей, другие запрашивают статистику, третьи подключаются через SaaS-сервисы, интегрированные с нашим API. Мы получаем запросы на добавление новых методов и расширение лимитов, а также положительную обратную связь об SDK. 

Наша цель — сделать через API доступными все ключевые сценарии рекламного кабинета. Сейчас мы готовим следующий релиз и проводим нагрузочное тестирование. В отдельной статье расскажем о решениях для конкурентного редактирования сущностей, обработки пиковых нагрузок, массового запуска и модерации рекламных кампаний. 

Какие у вас есть вопросы или идеи по реализации API?

Комментарии (0)