Интеграция с Avito API: от регистрации до первых запросов
Для работы с Avito API необходимо зарегистрироваться в кабинете разработчика, создать приложение и пройти модерацию. Доступ к функционалу получения данных (чтение) часто открыт после базовой регистрации, но методы публикации и управления объявлениями требуют статуса партнера или бизнес-аккаунта с подтвержденной деятельностью. Авторизация осуществляется по протоколу OAuth 2.0 с использованием access_token.
Ниже приведена актуальная инструкция по подключению, настройке безопасности и примерам кода для интеграции.
Важно: Avito регулярно обновляет политику доступа. Публичный бесплатный API для массового парсинга отсутствует. Работа ведется через официальную платформу для разработчиков (developers.avito.ru).
Требования и получение доступа
Перед началом разработки убедитесь, что у вас есть активный аккаунт на Авито. Процесс получения ключей состоит из нескольких этапов:
- Регистрация в кабинете разработчика. Перейдите на портал разработчиков Авито и авторизуйтесь под своим основным аккаунтом.
- Создание приложения. В разделе «Мои приложения» нажмите «Создать». Вам потребуется указать:
- Название проекта.
- Тип приложения (веб-сервис, мобильное приложение или сервер-сервер).
- Redirect URI (адрес, куда будет перенаправлен пользователь после авторизации).
- Получение учетных данных. После создания вы получите
Client IDиClient Secret. Эти данные нельзя передавать третьим лицам или хранить в открытом виде на клиентской стороне (во фронтенде). - Выбор тарифа и прав доступа.
- Базовый доступ: Позволяет читать данные о своих объявлениях и получать статистику.
- Расширенный доступ (Партнерский): Необходим для массовой загрузки объявлений, автоподнятия и управления чатами. Требует заполнения анкеты партнера и прохождения модерации бизнеса.
Не используйте Client Secret в JavaScript-коде браузера или мобильных приложениях. Для таких сценариев используйте PKCE (Proof Key for Code Exchange) или серверную прослойку.
Механизм авторизации OAuth 2.0
Avito использует стандартный поток Authorization Code Grant. Процесс получения токена выглядит так:
Шаг 1. Формирование ссылки для авторизации
Пользователь должен перейти по ссылке, чтобы разрешить приложению доступ к его данным.
https://api.avito.ru/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=ads_user ads_read
Где scope определяет права доступа:
ads_user— управление объявлениями.ads_read— чтение данных.messages_user— работа с чатами.
Шаг 2. Получение кода авторизации
После подтверждения пользователем Авито перенаправит его на ваш redirect_uri с параметром code:
YOUR_REDIRECT_URI?code=AUTH_CODE
Шаг 3. Обмен кода на токен
Отправьте POST-запрос на сервер Авито, чтобы обменять временный код на access_token и refresh_token.
Пример запроса (cURL):
curl -X POST https://api.avito.ru/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "code=AUTH_CODE" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "redirect_uri=YOUR_REDIRECT_URI"
Ответ сервера:
{
"access_token": "eyJhbGciOi...",
"token_type": "Bearer",
"expires_in": 86400,
"refresh_token": "def50200..."
}
Токен access_token живет 24 часа. Используйте refresh_token для получения нового токена без участия пользователя, когда текущий истечет.
Примеры использования API
Все запросы к методам API должны содержать заголовок авторизации:
Authorization: Bearer YOUR_ACCESS_TOKEN
Базовый URL для большинства методов: https://api.avito.ru/core/v1/
1. Получение списка своих объявлений
Этот метод позволяет выгрузить информацию о всех активных и архивных объявлениях пользователя.
Запрос:
GET /accounts/{account_id}/items
Параметры:
account_id— идентификатор магазина или личного кабинета.limit— количество элементов на странице (макс. 100).page— номер страницы.
Пример ответа:
{
"items": [
{
"id": 123456789,
"title": "iPhone 13, 128 ГБ",
"price": 45000,
"status": "active",
"category": "telefony",
"address": {
"city": "Москва",
"street": "ул. Ленина, 1"
}
}
],
"total_items": 1,
"page": 1,
"pages_count": 1
}
2. Создание нового объявления
Для публикации требуется расширенный доступ. Данные передаются в формате JSON.
Запрос:
POST /accounts/{account_id}/items
Content-Type: application/json
Тело запроса:
{
"title": "Велосипед горный",
"description": "Новый велосипед, гарантия 1 год.",
"category": "velosipedy",
"price": 15000,
"address": {
"city": "Санкт-Петербург",
"street": "Невский проспект, 10"
},
"images": ["https://example.com/img1.jpg"],
"attributes": [
{
"key": "brand",
"value": "Merida"
}
]
}
Изображения должны быть предварительно загружены на сервер Авито или доступны по прямым ссылкам, которые поддерживает платформа. Нарушение правил модерации контента приведет к отклонению объявления.
3. Обновление цены и статуса
Частая задача для синхронизации остатков и цен с интернет-магазином.
Запрос:
PATCH /accounts/{account_id}/items/{item_id}
Content-Type: application/json
Тело запроса:
{
"price": 14000,
"status": "active"
}
Частые ошибки при интеграции
| Код ошибки | Причина | Решение |
|---|---|---|
401 Unauthorized | Неверный или истекший токен | Проверьте заголовок Authorization. Обновите токен через refresh_token. |
403 Forbidden | Нет прав на действие | Убедитесь, что в scope при авторизации были запрошены нужные права (например, ads_user). |
429 Too Many Requests | Превышен лимит запросов | Реализуйте экспоненциальную задержку (exponential backoff) между повторными запросами. |
400 Bad Request | Ошибка в параметрах | Проверьте валидность JSON, наличие обязательных полей и соответствие категорий справочнику Авито. |
FAQ
Можно ли использовать Avito API для парсинга чужих объявлений? Нет. Официальный API предоставляет доступ только к данным вашего аккаунта или аккаунтов, которыми вы управляете (в рамках партнерской программы). Сбор данных с сайта без разрешения нарушает пользовательское соглашение.
Каковы лимиты на количество запросов? Лимиты зависят от тарифа и типа метода. Для стандартных партнеров обычно действует ограничение около 100–300 запросов в минуту. Точные значения указаны в личном кабинете разработчика в разделе «Лимиты».
Как работать с изображениями?
Авито требует загрузки изображений через отдельный эндпоинт /images/upload или передачу ссылок на внешние хостинги, которые поддерживают прямую отдачу контента. После загрузки вы получаете image_id, который указываете при создании объявления.
Что делать, если токен постоянно истекает?
Настройте автоматическое обновление токенов на бэкенде. Сохраняйте refresh_token в защищенном хранилище и используйте его для получения новой пары токенов до истечения срока действия текущего access_token.