HMMML Shop
API активации для разработчиков
Если вы купили HMMML-коды и хотите активировать их из своего бота, сайта или CRM, используйте публичный API. Те же коды можно активировать вручную на странице hmmml.ru/activate.
Обзор
Публичный endpoint:
https://hmmml.ru/api/redeemУ API два действия: check проверяет код без списания, activate активирует код на нужный аккаунт. Провайдеры, остатки CDK и внутренние детали наружу не отдаются.
Рекомендуемый порядок
- Получите HMMML-код от покупателя.
- Вызовите check и определите тариф по plan.
- Запросите у покупателя нужные данные аккаунта для этого тарифа.
- Вызовите activate один раз и дождитесь ответа.
- Если ответ pending или соединение оборвалось после отправки, не запускайте activate повторно. Опрашивайте status endpoint с тем же HMMML-кодом.
Проверить код
Для action=check корректный запрос возвращает HTTP 200 даже для недействительного кода: проверяйте поле valid, а машинную причину берите из errorCode.
curl -X POST https://hmmml.ru/api/redeem \
-H "Content-Type: application/json" \
-d '{"action":"check","code":"HMMML-XXXX-XXXX-XXXX-XXXX"}'{
"success": true,
"valid": true,
"plan": "GROK_PRO_1M",
"planName": "SuperGrok CDK 1 месяц"
}{
"success": true,
"valid": false,
"errorCode": "INVALID_CODE",
"reason": "not_found",
"message": "Code not found"
}Активировать код
Для ChatGPT нужен полный JSON со страницы https://chatgpt.com/api/auth/session.
ChatGPT активируется только на личный профиль Personal без активной подписки. Team / Workspace Session JSON блокируется до резервирования CDK.
curl -X POST https://hmmml.ru/api/redeem \
-H "Content-Type: application/json" \
-d '{
"action": "activate",
"code": "HMMML-XXXX-XXXX-XXXX-XXXX",
"sessionData": { "...": "full ChatGPT session JSON object" }
}'Для Claude нужен Organization ID.
{
"action": "activate",
"code": "HMMML-XXXX-XXXX-XXXX-XXXX",
"claudeOrgId": "00000000-0000-0000-0000-000000000000"
}Для Grok нужен полный Session JSON и обязательное поле grokNoActiveSubscriptionConfirmed=true. Это подтверждение интегратора: при активной подписке CDK может быть потрачен без продления. Необязательный grokSubscriptionData включает дополнительную строгую проверку.
{
"action": "activate",
"code": "HMMML-XXXX-XXXX-XXXX-XXXX",
"grokUserId": "{"status":"authenticated","session":{"userId":"00000000-0000-0000-0000-000000000000"}}",
"grokNoActiveSubscriptionConfirmed": true
}Для Perplexity нужен полный JSON со страницы https://www.perplexity.ai/api/user.
{
"action": "activate",
"code": "HMMML-XXXX-XXXX-XXXX-XXXX",
"perplexityUserJson": { "...": "full Perplexity user JSON object" }
}Успешный ответ:
{
"success": true,
"operationId": "550e8400-e29b-41d4-a716-446655440000",
"message": "Subscription activated",
"email": "target@example.com"
}Асинхронный ответ:
HTTP/1.1 202 Accepted
{
"success": false,
"error": "PENDING_VERIFICATION",
"uniquecode": "code_HMMML-XXXX-XXXX-XXXX-XXXX",
"operationId": "550e8400-e29b-41d4-a716-446655440000",
"retrySafe": false,
"message": "Activation is still being confirmed"
}Проверить статус
Используйте status endpoint после HTTP 202 или потери ответа. Передавайте исходный HMMML-код в JSON-теле не чаще одного раза в 10 секунд; endpoint только читает сохранённое состояние и не обращается к провайдерам.
curl -X POST https://hmmml.ru/api/activation-status -H "Content-Type: application/json" -d '{"code":"HMMML-XXXX-XXXX-XXXX-XXXX"}'{
"status": "pending | completed | retryable | failed | not_found",
"error": "optional_machine_code",
"message": "Human-readable status"
}Поддерживаемые тарифы
| План | Товар | Поле для активации |
|---|---|---|
| PLUS_1M | ChatGPT Plus 1 месяц | sessionData |
| PLUS_12M | ChatGPT Plus 12 месяцев | sessionData |
| PRO_X5_1M | ChatGPT Pro x5 1 месяц | sessionData |
| PRO_1M | ChatGPT Pro x20 1 месяц | sessionData |
| GO_1M | ChatGPT Go 1 месяц | sessionData |
| CLAUDE_PRO_1M | Claude Pro 1 месяц | claudeOrgId |
| GROK_PRO_1M | SuperGrok 1 месяц | grokUserId |
| GROK_PRO_2M | SuperGrok 2 месяца | grokUserId |
| GROK_PRO_3M | SuperGrok 3 месяца | grokUserId |
| PERPLEXITY_PRO_1M | Perplexity Pro 1 месяц | perplexityUserJson |
Частые ошибки
| HTTP | Код | Значение |
|---|---|---|
| 400 | INVALID_JSON | Тело запроса не является корректным JSON-объектом. |
| 413 | REQUEST_BODY_TOO_LARGE | Размер JSON превышает 512 KiB. |
| 400 | INVALID_CODE | Код не найден, не активирован для продажи или просрочен. |
| 409 | ALREADY_DELIVERED | Код уже использован. |
| 400 | INVALID_FORMAT | В данных аккаунта отсутствуют обязательные поля. |
| 400 | SESSION_INCOMPLETE | ChatGPT Session JSON скопирован не полностью. |
| 400 | INVALID_TOKEN | ChatGPT access token отсутствует, повреждён или устарел. |
| 400 | TOKEN_EXPIRED | Срок действия ChatGPT Session JSON истёк. |
| 400 | CHATGPT_WORKSPACE_PROFILE_NOT_SUPPORTED | ChatGPT Session JSON относится к Team / Workspace профилю. Нужно переключиться на Personal. |
| 400 | INVALID_ORG_ID | Claude Organization ID не является UUID. |
| 400 | INVALID_USER_ID | Grok User ID или session JSON имеет неверный формат. |
| 400 | INVALID_USER_JSON | Perplexity /api/user JSON не содержит корректные id и email. |
| 409 | ALREADY_SUBSCRIBED | На целевом аккаунте уже есть активная подписка. |
| 422 | ACCOUNT_CHECK_FAILED | Временная ошибка проверки аккаунта. Повтор разрешён только при retrySafe=true. |
| 422 | ACCOUNT_NOT_ELIGIBLE | Аккаунт не подходит для выбранного способа активации; повтор с тем же аккаунтом запрещён. |
| 409 | ALREADY_PROCESSING | Этот код уже обрабатывается. |
| 202 | PENDING_VERIFICATION | Результат подтверждается в фоне. Повторная активация запрещена; опрашивайте status endpoint. |
| 503 | ACTIVATION_RETRYABLE | Провайдер доказанно не использовал CDK. Повтор разрешён с тем же кодом и аккаунтом. |
| 202 | ACTIVATION_OUTCOME_UNKNOWN | Результат запроса неизвестен. Не повторяйте активацию и обратитесь в поддержку с operationId. |
| 503 | NO_CDK | Для тарифа временно нет доступного ключа поставщика. |
| 429 | RATE_LIMIT | Лимит запросов исчерпан. Учитывайте заголовок Retry-After. |
Безопасность
- Вызывайте API только со своего backend. CORS для браузерных вызовов намеренно не включён.
- HMMML-код является платёжным bearer-секретом. Не храните его в клиентском JavaScript, не передавайте в query string и не публикуйте в URL или логах.
- ChatGPT Session JSON содержит access token. Не записывайте его в логи, аналитику, чаты, exception-трекеры или постоянную базу.
- Максимальный размер JSON-запроса — 512 KiB. Клиентский timeout для activate должен быть не меньше 5 минут.
- Повторяйте activate только когда retrySafe=true. При pending или неизвестном исходе используйте status endpoint либо поддержку.
Правила интеграции
- Один код можно активировать только один раз.
- Не отправляйте один и тот же код параллельно из нескольких воркеров.
- Не повторяйте uncertain/pending активацию на другом аккаунте.
- Не показывайте покупателю провайдеров, CDK и внутренние ошибки.
- У API есть rate limit. Коротко кешируйте результат check на своей стороне.
- Для поддержки передавайте HMMML-код, план, время запроса и error code.