Когда панель подключают к боту, своему сайту или к другой панели, обзор «что такое API» уже бесполезен - нужен точный список вызовов, их параметров и форм ответа. Этот справочник собран иначе, чем обычные доки: мы сняли фактический контракт с одиннадцати работающих панелей и сверили его со своим ядром. Ниже - все десять вызовов, поля заказа по типам услуг и три места, где интеграции ломаются чаще всего.

Справочник ниже описывает, что вызывать. О том, что при этом должна проверять сама панель - границы объёма, дубли по ссылке, права клиента, лимит запросов, - есть отдельная статья про злоупотребление API: интеграция, написанная без оглядки на эти правила, упирается в них уже на проде.

Почему API у панелей почти одинаковый

Практически вся отрасль говорит одним протоколом - его принято называть API v2. Он сложился исторически: один движок задал формат, остальные повторили его, чтобы к ним могли подключаться уже написанные клиенты реселлеров. Для интегратора это редкая удача - клиент, написанный под одну панель, работает с другой почти без правок.

Общие для всех правила ровно четыре:

Практический вывод для владельца панели: свой формат придумывать не надо. Собственный протокол отрежет вас от реселлеров, у которых интеграция уже написана, - а именно они приносят объём. Зачем вообще выдавать ключи наружу и кому, разобрано в статье про API панели и работу с реселлерами.

Семь действий, десять вызовов

Действий в стандарте семь, но у четырёх есть пакетная форма - отсюда десять разных вызовов, которые придётся поддержать:

Всё остальное - надмножества конкретной панели. У нас, например, есть одиночная отмена по order и action=create как синоним add, но писать клиента под такие удобства нельзя: на другой панели их не окажется.

Поля заказа зависят от типа услуги

Главное заблуждение при первой интеграции - что заказ это ссылка и количество. Так выглядит только базовый тип. Поле type в services приходит строковым именем, и от него зависит весь набор параметров add:

Две технические детали, на которых спотыкаются почти все. Списки - комментарии, ключевые слова, имена, хештеги - передаются одной строкой с переводами строк как разделителем, а не JSON-массивом. И числовые справочники device и type_of_traffic в ответе services не приходят: их значения надо знать заранее из документации панели.

И ещё одно, что стоит признать честно: в нумерации типов есть дырки. Минимум шесть номеров движки знают, но ни в одной панели из нашей выборки они не встречаются. Поэтому обещать «поддерживаем все типы» нельзя - правильная стратегия для панели-приёмника - внятный отказ на незнакомый тип вместо попытки угадать поля. Подробнее о том, чем типы различаются по смыслу, - в статье про типы услуг поставщика.

Три места, где ломаются интеграции

Эти три вещи не написаны почти ни в одной документации, и именно они дают баги, которые всплывают через неделю после запуска.

К этому же списку относится отмена: одиночного cancel в стандарте нет, только пакетный. Клиент, который отменяет заказы по одному, должен всё равно отправлять список из одного элемента и разбирать массив в ответе.

Статусы и ошибки: строки, а не константы

Статус заказа приходит человекочитаемой строкой: Pending, In progress, Processing, Partial, Completed, Canceled, Fail, Error. У доливки свой набор - Completed, Rejected и промежуточный In progress, а на несуществующий номер приходит Refill not found.

Отсюда четыре правила для клиента:

Что значат сами статусы с точки зрения покупателя и что панель обязана делать с каждым - в статье про статусы заказов; почему объём «сдувается» после доставки и как работает доливка - в разборе отвала и Refill.

Как проверить интеграцию до продакшена

Шесть проверок, которые ловят почти все ошибки до первого живого заказа:

Со стороны панели-поставщика к этому добавляется своя работа: лимиты на ключ, журнал вызовов и защита от повторной отправки одного и того же заказа. Что стоит проверить перед выдачей ключа реселлеру, разобрано в статье о том, как продавать SMM-услуги как поставщик. Проверить, поддерживается ли ваш поставщик у нас, можно на странице проверки поставщиков.

Итог

API v2 выглядит простым - один эндпоинт, семь действий - и именно поэтому его недооценивают. Реальная сложность в трёх местах: набор полей заказа задаёт тип услуги, форма пакетного ответа зависит от действия, а доливка живёт под своим номером. Клиент, который учитывает эти три вещи, переносится с панели на панель почти без правок; клиент, который их пропустил, теряет заказы молча.

Если API нужен вам не для чужой панели, а для своей, проверить всё это можно без вложений: заказы, которые уходят через наш каталог, не тарифицируются вообще, а по сторонним поставщикам первые 100 заказов в месяц бесплатны. Ключ и полная документация выдаются сразу - можно написать клиента и прогнать все десять вызовов ещё до того, как у панели появится первый покупатель. Как считается лимит, разобрано в статье про расчёт тарифа аренды.