Подключения

Публичный API

Получайте актуальные тарифы Amazi, юридические документы, баннеры чата и страницы, а также анкету для внешнего сайта или приложения.

Доступные эндпоинты

Используйте эти эндпоинты, чтобы показывать актуальную публичную информацию Amazi на своём сайте или в приложении. Базовый адрес API — https://api.amazi.pro. Добавляйте к нему пути напрямую, без дополнительного префикса /api.

Метод и путьОтветДоступ из браузера с другого сайта
GET /public/plansОбъект с freePlan и plansС любого домена, без cookies
GET /public/privacy-policyПолитика конфиденциальностиТолько с разрешённых доменов; иначе используйте свой backend
GET /public/terms-of-useУсловия использованияТолько с разрешённых доменов; иначе используйте свой backend
GET /public/chat-bannersМассив активных баннеров чатаС любого домена, без cookies
GET /public/chat-banners/page-topМассив активных верхних баннеров страницыС любого домена, без cookies
GET /public/pollОбъект с включённой анкетой в poll или poll: nullС любого домена, без cookies

Все шесть запросов не требуют входа в аккаунт, API-ключа, тела или query-параметров. Они читают информацию и не изменяют её. Параметры пагинации и фильтрации не предусмотрены. HEAD возвращает заголовки без тела. OPTIONS обслуживает предварительную проверку браузера и не возвращает данные.

Язык и формат

Успешный GET-запрос возвращает HTTP 200 и JSON. Передавайте Accept-Language: ru или Accept-Language: en. Если заголовок отсутствует или язык не поддерживается, используется английский. Query-параметр locale не выбирает язык этих эндпоинтов.

Поля с окончаниями Ru и En содержат соответствующие переводы. Поля с окончанием CurrentLocale содержат текст на языке запроса; если он пустой, подставляется другой перевод. Ответы зависят от Accept-Language, поэтому записи кэша для разных языков нужно разделять.

Тарифы: GET /public/plans

Ответ содержит freePlan — объект бесплатного тарифа — и plans — массив активных платных тарифов в порядке каталога. Архивные сроки и варианты кредитов исключаются; сроки без оставшихся вариантов тоже исключаются. Массивы могут быть пустыми. Получайте актуальные значения из API, не зашивайте цены и лимиты в приложение.

Бесплатный и платные тарифы содержат:

ПоляЗначение
titleRu, titleEn, titleCurrentLocaleНазвание тарифа
descriptionLineOneRu/En/CurrentLocale, descriptionLineTwoRu/En/CurrentLocaleДве строки описания; каждое окончание через слеш обозначает отдельное поле
includedSectionsМассив разделов с titleRu/En/CurrentLocale и contentMarkdownRu/En/CurrentLocale
availableFunctionsМассив ключей функций, например canManageProjectCode или canShareProject
maxProjects, maxAppsPerProjectЦелочисленные лимиты тарифа; null означает, что тариф не задаёт этот лимит
mainColorЦвет оформления тарифа

В freePlan также есть целые количества кредитов: monthlyCredits, registrationCredits, paidPlanCompletionCredits и phoneVerificationCredits. Это значения каталога, а не баланс посетителя. Правила работы кредитов описаны в Тарифах и кредитах.

Каждый элемент plans дополнительно содержит id (UUID), order (целое число), isActive, isPopular, creditsDoNotExpire (логические значения) и durations (массив).

У каждого срока есть id, months, creditAccumulationMonths, creditsDoNotExpire, creditOptions и необязательное isArchived. У каждого варианта кредитов — id, credits, price, isNegotiatedPrice и необязательное isArchived. Для фиксированного варианта credits и price — неотрицательные целые числа. На api.amazi.pro price — полная стоимость выбранного срока в рублях, а не в копейках и не за месяц. Если isNegotiatedPrice равно true, credits и price равны null: показывайте договорные условия, а не нулевую цену. Используйте настройки срока действия кредитов из выбранного duration.

Для фиксированного варианта credits — количество кредитов в месяц, а months — длительность покупаемого срока. creditAccumulationMonths описывает срок накопления кредитов; creditsDoNotExpire отмечает кредиты без срока сгорания.

Эндпоинт не возвращает подписку вошедшего пользователя, его баланс, персональные скидки или результат оформления покупки.

Юридические документы

Используйте GET /public/privacy-policy для политики конфиденциальности или GET /public/terms-of-use для условий использования. Каждый эндпоинт возвращает только запрошенный документ в виде объекта со строковыми полями:

ПоляЗначение
contentMarkdownRu, contentMarkdownEnЗапрошенный документ на русском и английском
contentMarkdownCurrentLocaleЗапрошенный документ на языке запроса
acceptanceUpdateTitleЗаголовок последнего запроса принять обновлённые документы; может быть пустым

Тексты документов имеют формат Markdown. Пустой текст означает, что он не опубликован. Чтение эндпоинта не фиксирует согласие пользователя. Ответ содержит Cache-Control: no-store: не сохраняйте его как кэшированную копию актуальной политики.

Замените обращения к прежнему маршруту /public/documents на эндпоинт нужного документа. Прежний маршрут больше не доступен.

Баннеры чата: GET /public/chat-banners

Ответ — массив без внешнего объекта. Он содержит неархивные баннеры чата в сохранённом порядке. Пустой массив означает отсутствие активных баннеров чата. Верхние баннеры страниц и информация о закрытых посетителем баннерах сюда не входят.

Поля каждого баннераЗначение
idUUID баннера
contentMarkdownRu, contentMarkdownEn, contentMarkdownCurrentLocaleТекст Markdown и его значение на языке запроса
iconNameИдентификатор иконки
iconColorНеобязательный цвет иконки в формате #RRGGBB; null или отсутствие поля означает цвет иконки по умолчанию в интерфейсе
linkUrlHTTP(S)-адрес или путь от корня сайта
openInNewTabНужно ли открыть ссылку в новой вкладке
archivedНеобязательное логическое значение; архивные баннеры исключаются
bannerНеобязательные настройки оформления: backgroundColor и textColor в формате #RRGGBB, weight — целое число

Пути linkUrl от корня относятся к веб-приложению Amazi. Разрешайте их относительно https://app.amazi.pro, чтобы /settings не отправлял посетителя в настройки вашего сайта.

Верхние баннеры страницы: GET /public/chat-banners/page-top

Ответ — массив неархивных верхних баннеров в сохранённом порядке либо пустой массив. Поля совпадают с баннерами чата, но linkUrl может быть пустой строкой, если переход не нужен, а banner обязателен и содержит backgroundColor, textColor и weight. Сохранённый вес не определяет порядок показа. Выбор языка работает так же.

Эндпоинт содержит настроенные верхние объявления. Баннеры технических работ, приглашение пройти анкету, личные уведомления и информация о закрытых посетителем баннерах сюда не входят. Чтение не закрывает баннер.

Анкета: GET /public/poll

Ответ — { "poll": null }, если анкета выключена или ещё не настроена. Иначе poll содержит revision — неотрицательную целую версию, необязательный completionEpoch — неотрицательный целый номер цикла прохождения, и definition — включённую анкету. Ответ содержит Cache-Control: no-store.

Поля definitionЗначение
titleRu/En/CurrentLocale, iconNameЗаголовок приглашения и идентификатор иконки
iconColorНеобязательный цвет иконки в формате #RRGGBB; null или отсутствие поля означает цвет иконки по умолчанию в интерфейсе
previewTitleRu/En/CurrentLocale, previewDescriptionRu/En/CurrentLocaleЗаголовок и описание вступления; могут быть пустыми
enabled, bonusCreditsПризнак включённой анкеты; награда за прохождение в кредитах или null без награды
bannerНеобязательные backgroundColor и textColor в формате #RRGGBB и целое weight
startQuestionId, questionsUUID первого вопроса и массив вопросов

Каждый вопрос содержит id, titleRu/En/CurrentLocale, type — single или multiple, options и nextQuestionId — UUID или null. Каждый вариант содержит id, labelRu/En/CurrentLocale, необязательный isCustom и nextQuestionId — UUID, end или null. При одиночном выборе используется переход варианта, а если он не задан — переход вопроса; при множественном выборе используется переход вопроса. Итоговый null или end завершает анкету. Вариант isCustom позволяет ввести свой текст.

Ответ не содержит заполненных ответов, статуса прохождения или других данных пользователя, даже если запрос отправлен с пользовательской сессией. Чтение не отправляет ответы и не начисляет кредиты. Отправка ответов и получение награды требуют входа в аккаунт через существующий сценарий анкеты; публичного эндпоинта отправки нет.

Примеры запросов

Эти запросы из терминала или backend работают без учётных данных:

curl --fail --silent --show-error https://api.amazi.pro/public/plans -H 'Accept-Language: ru'
curl --fail --silent --show-error https://api.amazi.pro/public/privacy-policy -H 'Accept-Language: ru'
curl --fail --silent --show-error https://api.amazi.pro/public/terms-of-use -H 'Accept-Language: ru'
curl --fail --silent --show-error https://api.amazi.pro/public/chat-banners -H 'Accept-Language: ru'
curl --fail --silent --show-error https://api.amazi.pro/public/chat-banners/page-top -H 'Accept-Language: ru'
curl --fail --silent --show-error https://api.amazi.pro/public/poll -H 'Accept-Language: ru'

Тарифы, оба вида баннеров и анкету можно запрашивать напрямую из браузера:

const response = await fetch("https://api.amazi.pro/public/plans", {
  headers: { "Accept-Language": "ru" },
  credentials: "omit",
});
if (!response.ok) throw new Error("Не удалось загрузить тарифы: " + response.status);
const { freePlan, plans } = await response.json();
console.log(freePlan.titleCurrentLocale, plans.map((plan) => plan.titleCurrentLocale));

Доступ из браузера и ошибки

Тарифы, оба вида баннеров и анкета разрешают запросы GET, HEAD и OPTIONS с любого домена без учётных данных. Для этих запросов не отправляйте cookies или Authorization. Документы тоже доступны без авторизации, но браузерный доступ ограничен доменом отправителя. Если ваш сайт не разрешён, запрашивайте /public/privacy-policy или /public/terms-of-use через свой backend и отдавайте результат из своего приложения с соблюдением no-store. Успешный curl-запрос не означает, что браузеру разрешён доступ по CORS.

Перед обработкой успешного ответа проверяйте HTTP-статус. Различайте HTTP-ошибки и сетевые ошибки или ограничения CORS; при сбое показывайте состояние недоступности. Выводите Markdown безопасным Markdown-компонентом. Допускайте неизвестные поля JSON и переменное количество записей: необязательные поля и пустые массивы допустимы. Публичный каталог не предоставляет права на аккаунт или проект.