Авторизация и соглашения
Эта страница описывает соглашения, на которые опираются все остальные разделы API: как авторизоваться, как устроен формат ответа и какие системные ошибки может вернуть любой эндпоинт.
Авторизация
Запрос можно авторизовать двумя способами; оба приводятся к одному и тому же пользователю и проходят одинаковую проверку блокировки.
API-ключ (скрипты, рекомендуется)
Ваш постоянный API-ключ находится в Профиль → API-ключ.
Формат: {user_id}-{user_api}, например 42-d3adb33f….
Передавайте его как query-параметр id — это работает на всех эндпоинтах,
включая POST (query-строка читается всегда, даже когда тело запроса — JSON):
curl "https://my.altercpa.top/api/profile/info.json?id=42-d3adb33f…"Или в заголовке Authorization как Bearer-токен (тогда передаётся только сам ключ,
без {user_id}-):
curl -H "Authorization: Bearer d3adb33f…" \
"https://my.altercpa.top/api/profile/info.json"Когда параметр id имеет вид {user_id}-{user_api}, он трактуется только как
API-ключ, и user_id обязан совпадать с владельцем ключа — иначе вернётся ошибка
key. Если id не похож на {user_id}-{user_api} (например, это идентификатор
ресурса), он для авторизации игнорируется, и применяется Bearer-токен из заголовка.
API-ключ не имеет срока действия. Его можно обновить в Профиле
или через profile/apikey; старый ключ перестаёт
работать немедленно.
Дашборд входит через Telegram и использует собственный короткоживущий сессионный токен; для программного доступа используйте API-ключ выше.
Соглашения
-
GET для чтения, POST для записи. Без исключений.
-
Каждый ответ — HTTP 200 с
Content-Type: application/json, независимо от результата. Проверяйте полеstatus, а не HTTP-код. -
Успешный ответ почти всегда плоский: поля лежат на верхнем уровне рядом с
"status": "ok".{ "status": "ok", "id": 42, "api_key": "42-d3adb33f…" } -
Часть эндпоинтов (как правило, списки) оборачивают полезную нагрузку в ключ
data:{ "status": "ok", "data": [ … ] }Какой формат у конкретного эндпоинта — указано в его примере ответа.
-
Ошибка всегда плоская:
{ "status": "error", "error": "code" } -
Метки времени в ответах — это целые числа (Unix-секунды);
0означает, что значение не задано. -
Эндпоинты оканчиваются на
.json(напримерprofile/info.json). -
Тело POST-запросов может быть JSON (
Content-Type: application/json) или form-encoded (application/x-www-form-urlencoded). При JSON-теле его значения имеют приоритет над одноимёнными query-параметрами. Размер тела ограничен 1 МиБ (кроме загрузки файлов — там действует отдельный лимит). -
Параметр
?id=для авторизации всегда передаётся в строке запроса (query string), даже для POST-эндпоинтов.
Системные ошибки
Эти ошибки может вернуть любой авторизуемый эндпоинт.
| Ошибка | Значение |
|---|---|
key | Отсутствует или недействительный API-ключ |
access | Авторизация прошла, но ресурс вам не принадлежит или не существует |
ban | Аккаунт заблокирован |
func | Неизвестный путь эндпоинта или неверный метод |
db | Ошибка базы данных — повторите попытку; если проблема сохраняется, обратитесь в поддержку |
unpaid | Подписка истекла и льготный период завершился |
limit | Превышен тарифный или квотный лимит |
Ошибки, специфичные для конкретных эндпоинтов (exists, token, webhook,
unreachable, …), описаны на соответствующих страницах.
Льготный период: когда подписка истекает, публичный API продолжает работать
ещё некоторое время — льготное окно (сейчас 7 дней, но оператор может изменить этот
срок); после его окончания авторизуемые продуктовые эндпоинты возвращают unpaid.
Эндпоинты входа, профиля и оплаты при этом работают всегда, чтобы истёкший аккаунт
мог войти, проверить статус и продлить подписку. Полные правила перехода — в разделе
Оплата и тарифы.