API активации кода
Программная активация кодов: отправляешь code + org_id, получаешь order_id и опрашиваешь статус. Авторизация не нужна — сам код является ключом (как на форме активации).
Базовый URL: https://bypriceactivate.pro · Content-Type: application/json
Активировать код. org_id — UUID из claude.ai/settings/account.
{
"code": "GPTI-ABCD-EFGH-IJKL",
"account_id": "12345678-1234-4234-9234-123456789abc"
}
Вместо account_id iOS-маршрут также принимает полный объект session.
{
"code": "MAX5-GU75-V37P-1SN4",
"org_id": "a1b2c3d4-1234-1234-1234-123456789abc"
}
curl -X POST https://bypriceactivate.pro/api/activate \
-H "Content-Type: application/json" \
-d '{"code":"MAX5-GU75-V37P-1SN4","org_id":"a1b2c3d4-1234-1234-1234-123456789abc"}'
{
"order_id": 6231,
"status": "queued",
"product": "claude_max_5x",
"org_id": "a1b2c3d4-1234-1234-1234-123456789abc"
}
400 {"detail": "org_id must be a valid UUID (8-4-4-4-12 lowercase hex)"}
400 {"detail": "code is required"}
400 {"detail": "JSON body required: ..."}
404 {"detail": "code not found"}
409 {"detail": "code already claimed"} // уже использован
409 {"detail": "out of stock for claude_max_5x — try later, your code stays valid"}
Статус активации. Следует за цепочкой ретраев — пока идут повторы, статус running; failed только когда попытки исчерпаны.
curl https://bypriceactivate.pro/api/activate/6231
{
"order_id": 6231,
"status": "done", // queued | running | done | failed
"product": "claude_max_5x",
"org_id": "a1b2c3d4-1234-1234-1234-123456789abc",
"error": null // текст ошибки, если status=failed
}
| queued | В очереди — ждёт обработки. |
| running | Покупка идёт (вкл. авто-ретраи). |
| done | Подписка активирована на org_id. ✅ |
| failed | Не удалось — см. error. Код часто остаётся действителен (out-of-stock). |
Проверка наличия по всем продуктам. available — сколько активаций можно принять прямо сейчас (та же формула, что и в гейте активации, так что сток не «соврёт»). Удобно вызывать перед POST /api/activate. Авторизация не нужна.
curl https://bypriceactivate.pro/api/stock
{
"products": {
"claude_pro": { "label": "Claude Pro", "available": 12, "in_stock": true },
"claude_max_5x": { "label": "Claude Max 5×", "available": 0, "in_stock": false },
"claude_max_5x_us": { "label": "Claude Max 5× (US)", "available": 4, "in_stock": true },
"claude_max_20x": { "label": "Claude Max 20×", "available": 3, "in_stock": true },
"claude_max_20x_us": { "label": "Claude Max 20× (US)", "available": 2, "in_stock": true }
},
"as_of": "2026-05-25T00:00:00Z"
}
available — сколько активаций можно принять прямо сейчас; in_stock = available ≥ 1.
Сток по одному продукту: claude_pro · claude_max_5x · claude_max_5x_us · claude_max_20x · claude_max_20x_us.
curl https://bypriceactivate.pro/api/stock/claude_max_5x
{
"product": "claude_max_5x",
"label": "Claude Max 5×",
"available": 0,
"in_stock": false,
"as_of": "2026-05-25T00:00:00Z"
}
404 {"detail": "unknown product 'xxx' (known: ['claude_pro', 'claude_max_5x', 'claude_max_5x_us', 'claude_max_20x', 'claude_max_20x_us'])"}
Рекомендуемый поллинг
r = POST /api/activate {code, org_id} # -> order_id
while True:
s = GET /api/activate/{order_id}
if s.status in ("done", "failed"): break
sleep(5)
Продукт определяется самим кодом (Pro / Max 5× / Max 20×). org_id берётся на claude.ai/settings/account.
🔁 Reclaim — повторная отправка чека на claude.ai
Apple купил подписку, наш сервер сохранил receipt, но Claude почему-то не активировал её на аккаунте (редкая race-condition или IDV-gate на стороне Claude). Этот API берёт уже хранящийся receipt по твоему activation-коду и переотправляет его на claude.ai от имени пользователя (по его sessionKey).
Где взять session_key: на claude.ai в DevTools (F12) → Application → Cookies → значение cookie sessionKey. Начинается с sk-ant-sid02-.
Переотправить ранее сохранённый Apple-чек на claude.ai/api/apple-iap/receipt. Авторизация не нужна — код + sessionKey являются ключом.
{
"code": "TR-XXXX-XXXX-XXXX",
"session_key": "sk-ant-sid02-r6ZfW1pYQYi..."
}
curl -X POST https://bypriceactivate.pro/api/reclaim \
-H "Content-Type: application/json" \
-d '{
"code":"TR-XXXX-XXXX-XXXX",
"session_key":"sk-ant-sid02-r6ZfW1pYQYi..."
}'
{
"ok": true,
"kind": "success",
"transaction_id": "220003401686407",
"product_id": "com.anthropic.claude.pro.monthly.ios"
}
{
"ok": false,
"kind": "idv",
"idv_url": "https://withpersona.com/verify?inquiry-id=...",
"message": "Claude requires identity verification; open idv_url in browser"
}
400 {"detail": "code is required"}
400 {"detail": "session_key must start with sk-ant-sid02-"}
401 {"detail": "sessionKey is invalid or expired — grab a fresh one..."}
404 {"detail": "code not found"}
409 {"detail": "no receipt — subscription not yet purchased (...)"}
502 {"detail": "transport error talking to claude.ai: ..."}
502 {"detail": "Claude returned unexpected 200 body: ..."}
💡 Когда использовать: покупка прошла (status=done), но в Claude юзера всё ещё нет Pro. Обычно лечится за 1 запрос.
💡 sessionKey должен быть из consumer org (не workspace/team) — Claude отказывает workspace-org'ам с ошибкой "org is not a consumer org".
💡 Если копипастишь sessionKey из браузера — иногда туда попадают кириллические homoglyphs (буква «В» вместо латинской «B»). Endpoint их сам выкидывает, но если после strip получился невалидный — вернётся 400.
🤖 ChatGPT: iOS / PHP · Plus / Pro 20×
ChatGPT использует единый асинхронный API и сам выбирает маршрут по коду. Для iOS-кодов можно передать полный session либо только account_id; для PHP-кодов нужен полный session.
Данные аккаунта берутся на https://chatgpt.com/api/auth/session.
Исходный session не возвращается в ответах или логах.
{
"code": "GPT20-ABCD-EFGH-IJKL",
"session": {
"user": {"id": "user-xxxxxxxx", "email": "user@example.com"},
"expires": "2026-09-22T10:00:00.000Z",
"accessToken": "eyJ..."
}
}
curl -X POST https://bypriceactivate.pro/api/gpt/activate \
-H "Content-Type: application/json" \
-d '{"code":"GPTI-ABCD-EFGH-IJKL","account_id":"12345678-1234-4234-9234-123456789abc"}'
{
"ok": true,
"product": "gpt_pro_20x_direct",
"order_id": "gpt_0123456789abcdef",
"status": "queued",
"status_url": "/api/gpt/orders/gpt_0123456789abcdef",
"existing": false
}
400 {"ok":false,"error_code":"SESSION_INVALID","detail":"..."}
404 {"ok":false,"error_code":"CODE_NOT_FOUND","detail":"..."}
409 {"ok":false,"error_code":"CODE_ALREADY_USED","detail":"..."}
429 {"detail":"Too many requests"}
503 {"ok":false,"error_code":"SERVICE_NOT_READY","detail":"..."}
Статусы заказа: queued → running/pending/review → completed либо failed. После финального статуса поллинг прекращается.
curl https://bypriceactivate.pro/api/gpt/orders/gpt_0123456789abcdef
{
"public_id": "gpt_0123456789abcdef",
"code": "GPT20-ABCD-EFGH-IJKL",
"status": "completed",
"provider_status": "completed",
"stage": "completed",
"message": "ChatGPT Pro 20× успешно активирован.",
"account_email": "us***@example.com",
"quoted_amount_minor": 98000,
"quoted_currency": "PHP",
"created_at": 1787482000,
"updated_at": 1787482050,
"completed_at": 1787482050
}
Только для завершённых iOS-заказов. Повторно отправляет тот же receipt на исходный аккаунт и не расходует сток. Между запросами действует пауза 30 секунд.
curl -X POST https://bypriceactivate.pro/api/gpt/orders/gpti_0123456789abcdef/resend
{
"ok": true,
"order_id": "gpti_0123456789abcdef",
"status": "completed",
"resent": true,
"provider_http_status": 200
}
Возвращает готовность GPT Direct, доступное количество Plus и Pro 20×, рассчитанное по доступному балансу провайдера, и число заказов в работе. Оба значения используют один общий баланс и являются альтернативными максимумами — складывать их нельзя. Вызывай перед активацией.
curl https://bypriceactivate.pro/api/gpt/stock
{
"ready": true,
"enabled": true,
"error": null,
"stock_source": "provider_spendable_balance",
"shared_provider_balance": true,
"provider_balance_fresh": true,
"available_by_product": {
"gpt_plus_direct": 55,
"gpt_pro_20x_direct": 6
},
"products": {
"gpt_plus_direct": {
"label": "ChatGPT Plus",
"available": 55
},
"gpt_pro_20x_direct": {
"label": "ChatGPT Pro 20×",
"available": 6
}
},
"orders_in_progress": 0
}
🎮 Fortnite V-Bucks / Crew
Fortnite API создаёт асинхронную заявку по коду активации и одноразовому Epic authorizationCode. После принятия заявки опрашивай URL статуса.
Чтобы получить Epic-код, открой адрес ниже, войди в аккаунт и скопируй authorizationCode из JSON-ответа. Код одноразовый — отправляй его сразу.
https://www.epicgames.com/id/api/redirect?flow=login&responseType=code&clientId=af43dc71dd91452396fcdffbd7a8e8a9
Проверяет Epic-аккаунт и сразу ставит покупку в очередь. Для одной позиции передай code, для партии на один Epic-аккаунт — массив codes до 500 штук.
{
"code": "VB800-ABCD-EFGH-IJKL",
"authorization_code": "abcdef0123456789abcdef0123456789"
}
curl -X POST https://bypriceactivate.pro/api/fortnite/activate \
-H "Content-Type: application/json" \
-d '{"code":"VB800-ABCD-EFGH-IJKL","authorization_code":"abcdef0123456789abcdef0123456789"}'
{
"ok": true,
"order_id": "fn_0123456789abcdefghijklmnopqrstuv",
"order_token": "0123456789abcdefghijklmnopqrstuvwxyzABCDEFG",
"status": "queued_purchase",
"status_url": "/api/fortnite/orders/fn_0123456789abcdefghijklmnopqrstuv",
"product": "fortnite_vbucks_800_tr",
"vbucks_amount": 800,
"epic_display_name": "Player"
}
Сохрани order_token: он возвращается один раз и нужен для повторного входа или retry. Не записывай authorization_code в логи.
400 {"ok":false,"error_code":"AUTH_CODE_REQUIRED","detail":"..."}
404 {"ok":false,"error_code":"CODE_NOT_FOUND","detail":"..."}
409 {"ok":false,"error_code":"CODE_USED","detail":"..."}
503 {"ok":false,"error_code":"OUT_OF_STOCK","detail":"..."}
Опрашивай раз в 5 секунд, пока polling=false. Успешный финальный статус — done.
curl https://bypriceactivate.pro/api/fortnite/orders/fn_0123456789abcdefghijklmnopqrstuv
{
"ok": true,
"order_id": "fn_0123456789abcdefghijklmnopqrstuv",
"status": "done",
"completed": true,
"polling": false,
"credited_vbucks": 800,
"epic_display_name": "Player",
"items": [{
"order_id": "fn_0123456789abcdefghijklmnopqrstuv",
"status": "done",
"completed": true,
"vbucks_amount": 800
}]
}
Статусы: queued_purchase → purchasing → queued_restore → restoring → done. Статусы, требующие действия: needs_login, restore_review, restore_failed, purchase_failed.
Если статус стал needs_login, передай новый одноразовый код от того же Epic-аккаунта.
{
"order_token": "0123456789abcdefghijklmnopqrstuvwxyzABCDEFG",
"authorization_code": "fedcba9876543210fedcba9876543210"
}
Повторяет начисление, когда в статусе can_retry=true. Новую покупку этот вызов не создаёт.
{"order_token":"0123456789abcdefghijklmnopqrstuvwxyzABCDEFG"}
Возвращает доступное количество активаций для каждого Fortnite-продукта.
curl https://bypriceactivate.pro/api/fortnite/stock
{
"ready": true,
"error": null,
"products": {
"fortnite_vbucks_800_tr": {
"label": "Fortnite 800 V-Bucks",
"vbucks": 800,
"available": 10,
"in_stock": true
}
}
}
Grok SuperGrok Pro
Активация Grok идёт через тот же асинхронный поток, что и Claude: POST /api/activate возвращает order_id, статус опрашиваешь на GET /api/activate/{order_id}. Отличия: code — это GRK- код, а в поле org_id передаёшь Grok User ID; в ответе product = grok_pro_1m.
Где взять Grok User ID: открой https://grok.com/api/auth/session в браузере где залогинен в Grok — поле userId (UUID).
⚠️ org_id здесь — это Grok User ID, а не Claude Organization ID (оба — UUID).
{
"code": "GRK-SZI1-J5AN-88SV",
"org_id": "aaab84aa-7514-4ef6-809b-be62ff1e4efe"
}
curl -X POST https://bypriceactivate.pro/api/activate \
-H "Content-Type: application/json" \
-d '{"code":"GRK-SZI1-J5AN-88SV","org_id":"aaab84aa-7514-4ef6-809b-be62ff1e4efe"}'
{
"order_id": 6247,
"status": "queued",
"product": "grok_pro_1m",
"org_id": "aaab84aa-7514-4ef6-809b-be62ff1e4efe"
}
Поллинг такой же, как у Claude — см. секцию GET /api/activate/{order_id} выше (status: queued → running → done / failed).
Сколько активаций Grok SuperGrok Pro (1 мес) доступно прямо сейчас. Удобно вызывать перед POST /api/activate.
curl https://bypriceactivate.pro/api/grok/stock
{
"product": "grok_pro_1m",
"label": "Grok SuperGrok Pro · 1 мес",
"in_stock": true,
"available": 12
}
🟣 Perplexity Pro
Отдельный API для активации Perplexity Pro. В отличие от Claude (асинхронно через worker), активация Perplexity проходит синхронно в один запрос — без order_id и поллинга. Передаёшь code + Perplexity user_id (UUID), получаешь итоговый ответ за 1-2 сек.
Где взять user_id: открой https://www.perplexity.ai/api/auth/session в браузере где залогинен в Perplexity — поле "id".
Активировать Perplexity Pro на указанный UUID. Авторизация не нужна — сам код является ключом.
{
"code": "PXY-EW8D-87WK-F8N0",
"user_id": "aaab84aa-7514-4ef6-809b-be62ff1e4efe"
}
curl -X POST https://bypriceactivate.pro/api/perplexity/activate \
-H "Content-Type: application/json" \
-d '{"code":"PXY-EW8D-87WK-F8N0","user_id":"aaab84aa-7514-4ef6-809b-be62ff1e4efe"}'
{
"ok": true,
"user_id": "aaab84aa-7514-4ef6-809b-be62ff1e4efe",
"transaction_id": "140003698963470",
"stock_id": 38,
"expires_date": "2026-07-17T17:16:34Z",
"product": "perplexity_pro"
}
400 {"detail": "user_id must be a valid UUID (8-4-4-4-12 lowercase hex)"}
400 {"detail": "code is required"}
404 {"detail": "code not found"}
409 {"detail": "код уже fulfilled"} // уже активирован
409 {"detail": "нет свободных receipt в стоке — ..."} // out of stock, код валиден
После 200 OK на стороне Perplexity юзеру нужно сделать Restore Purchases в приложении или просто перезайти — Pro подтянется мгновенно. expires_date — когда Apple попытается списать renewal (обычно +30 дней).
Сколько Perplexity Pro receipt'ов готово к активации прямо сейчас. Удобно вызывать перед POST /api/perplexity/activate, чтобы избежать 409 при пустом стоке.
curl https://bypriceactivate.pro/api/perplexity/stock
{
"product": "perplexity_pro",
"label": "Perplexity Pro",
"in_stock": true,
"available": 87
}