Код спишется именно на этот аккаунт, и вернуть его нельзя. Убедитесь, что данные верны.
Дополнительные инструменты
Проверка
Узнать статус кодов без активации. До 100 кодов сразу — по одному на строку. Обычно пара секунд.
Узнать, была ли активация на аккаунт и какой код был активирован. Введите GUID / Email / телефон. Обычно пара секунд.
Подписка не пришла? Восстановить
Если после активации подписка Claude Pro не отобразилась — вставьте Claude Session Key покупателя, и мы привяжем её.
Ключ сессии из аккаунта Claude покупателя (начинается с sk-ant-).
Проверка аккаунта ChatGPT
Узнать текущий тариф аккаунта ChatGPT (Free / Plus / Pro) — без активации.
Где взять: войдите в ChatGPT и откройте chatgpt.com/api/auth/session → выделите и скопируйте весь текст страницы → вставьте сюда. Тариф читается из подписанного токена, ключи/пароли мы не храним.
Активация подписки Claude Pro · сервис не связан с Anthropic PBC
API терминала
Программная активация Claude Pro и ChatGPT Plus на аккаунт покупателя — обычно 1–3 секунды. Ниже всё, что нужно для интеграции: контракт, порядок работы, защита от двойного списания и справочник методов.
Все запросы — POST, тело JSON. Заголовки: Content-Type: application/json и X-API-Key: ВАШ_КЛЮЧ. Ключ выдаётся персонально: по нему видно, чьи активации в журнале, поэтому под каждого исполнителя — свой.
// успех
{"ok": true, ...данные...}
// отказ
{"ok": false, "error": "текст для человека", "code": "машинный_код"}
Проверяйте ok, а не только HTTP-код. Бизнес-отказ (например «код уже использован») приходит с HTTP 200 и ok:false. HTTP важен только для транспорта: 401 — ключ, 429 — частота, 502 — временная недоступность.
code
Значение
Что делать
not_found
Кода нет или недействителен
Окончательно
already_claimed
Код уже использован
Окончательно; придут used_at, used_by, product
revoked
Код отозван продавцом
Окончательно
in_progress
По коду уже идёт активация
Вторую не создавать — см. п. 5
queued_exists
По коду уже стоит очередь
Дождаться или снять очередь
wrong_channel
Код другого канала
Убрать channel или указать верный
reload_needed
Код требует другого потока активации (не для этого метода)
Канал определяется по формату кода автоматически — channel передавать не обязательно. Если передали и он противоречит формату, придёт wrong_channel: это защита от активации кода не в том канале.
account — аккаунт покупателя, всегда UUID 36 символов в нижнем регистре: у Claude это Organization ID (claude.ai → настройки аккаунта), у ChatGPT — Account ID (поле id из блока account), у Grok — User ID. vendor — claude, chatgpt или grok, по умолчанию claude.
4. Порядок работы
1.(необязательно)/pub/v1/health — если нужный канал down, активацию лучше отложить. 2./pub/v1/activate — код + аккаунт. В ответе task_id и status. 3.Сразу сохраните task_id рядом с заказом. 4. Если status:"done" — подписка уже выдана, опрашивать не нужно. 5. Иначе опрашивайте /pub/v1/task раз в 3–10 с до done или failed. 6.queued (только Play Market) — ждёт поступления и выполнится сама; если ждать не нужно, снимите очередь, иначе код спишется позже. 7. При failed по Claude, когда подписка так и не появилась, доступно дожатие через /pub/v1/refresh по Session Key покупателя.
Статусы задачи:queued — ждёт в очереди · running — выполняется либо результат пока неизвестен · done — выдано · failed — не выдано. Конечные только done и failed. running — это не отказ, продолжайте опрос.
5. Повторы и обрывы связи
Не повторяйте activate вслепую. Если ответ не дошёл (таймаут, обрыв), активация могла уже создаться — повтор рискует списать второй код на тот же заказ.
Что делать при обрыве на activate: 1. Вызовите /pub/v1/card с этим кодом. 2. Пришло activating:true и task_id → активация уже создана: опрашивайте этот task_id, новую не создавайте. 3. Пришло activating:false и status:"valid" → код цел, активации не было, можно повторить.
Ответ in_progress означает, что по коду уже идёт активация. Если это ваш же повтор на тот же аккаунт — вернётся та же задача как успех. Если задача создана на другой аккаунт, придёт именно отказ: чужую активацию сервис не отдаст.
Про failed. На Play Market код при провале возвращается в пул и остаётся рабочим — можно активировать заново. На App Store код при провале, как правило, уже израсходован: проверьте /pub/v1/card, и если код числится использованным, а подписка не пришла — используйте /pub/v1/refresh.
6. Справочник методов
POST/pub/v1/activate
Активация кода на аккаунт покупателя.
// запрос ("vendor" и "channel" необязательны — определяются автоматически)
{"card_key":"79A6A94D-…","account":"a63cfbd2-…","vendor":"claude"}
// ответ
{"ok":true,"task_id":"0f8a6d64-…","status":"queued","product":"Pro"}
Отказы: not_found, already_claimed, revoked, in_progress, wrong_channel, reload_needed, transient. При already_claimed дополнительно приходят used_at, used_by (маскированный) и product.
Ответа по коду не было — кода это не порочит, перепроверьте позже
revoked
Код отозван продавцом
⚠️ Различайте invalid и unknown: первое — приговор коду, второе — лишь отсутствие ответа. Ориентируйтесь на статус каждого элемента, а не на общий ok. Дубликаты и коды неверного формата отбрасываются, поэтому сверяйте элементы по полю card_key, а не по порядку.
POST/pub/v1/cancel-queue
Снять активацию с очереди и освободить код. Только Play Market.
Очередь выполнится сама при поступлении товара и спишет код. Если заказ отменён или покупатель ждать не готов — очередь обязательно снимать, иначе код сгорит впустую. Отказы: not_queued, cancel_failed, already_claimed, not_found.
POST/pub/v1/refresh
Дожать подписку Claude по Session Key покупателя, если активация прошла, а подписка не появилась.
task_id передавать не нужно — активация находится по коду автоматически (в том числе созданная через API или из другого браузера). Если активации по коду не было → not_found.
POST/pub/v1/stock
Наличие.
// App Store
{"vendor":"claude"} → {"ok":true,"products":[{"name":"Pro","level":"high","count":1169}]}
// Play Market
{"vendor":"chatgpt","channel":"play"} → {"ok":true,"availability":"plenty","queued":0}
availability: plenty / normal / low / none. queued — длина очереди канала.
POST/pub/v1/health
Проходят ли активации прямо сейчас — по каждому продукту и каналу отдельно.
ok — активации проходят · degraded — часть не проходит · down — не проходят, активацию лучше отложить · unknown — мало данных. Это статистика недавних реальных активаций, а не самопроверка: волну сбоев нельзя предсказать заранее, но видно в первые минуты.
POST/pub/v1/account
Проверка подписки ChatGPT по Account ID, без активации.
У записей есть is_active и expires_date — по ним видно, есть ли подписка сейчас.
POST/pub/v1/account-query
Какие коды активировались на аккаунт.
{"account":"a63cfbd2-…"} // UUID, email или телефон
→ {"ok":true,"items":[{"card_key":"…","status":"used","product":"Pro","used_at":"…"}]}
Пустой items означает именно отсутствие активаций: при недоступности сервиса придёт ошибка, а не пустой список.
7. Ограничения
Одновременные активации
2 в работе; остальные встают в очередь и выполняются по мере освобождения — ничего не теряется
Частота опроса
/pub/v1/task — раз в 3–10 с; чаще не нужно и не ускорит
Пакет проверки
до 100 кодов за один /pub/v1/check
Превышение частоты
HTTP 429 и code:"rate_limited" — пауза и повтор
8. Пример интеграции
Полный цикл одного заказа с защитой от повторного списания:
BASE = "https://activate.pay2win.store"
H = {"Content-Type": "application/json", "X-API-Key": КЛЮЧ}
# 1. активация; при обрыве связи НЕ повторяем вслепую
try:
r = post(BASE + "/pub/v1/activate",
{"card_key": code, "account": buyer_account}, headers=H).json()
except Timeout:
c = post(BASE + "/pub/v1/card", {"card_key": code}, headers=H).json()
if c.get("activating"):
r = {"ok": True, "task_id": c["task_id"], "status": "queued"} # продолжаем ту же
else:
return retry_later() # код цел
if not r["ok"]:
if r["code"] in ("not_found", "already_claimed"):
return fail_order(r["error"]) # окончательно
return retry_later() # transient / captcha / out_of_stock
save_task_id(order, r["task_id"]) # сохранить СРАЗУ
# 2. опрос до конечного статуса
while True:
sleep(5)
t = post(BASE + "/pub/v1/task", {"task_id": r["task_id"]}, headers=H).json()
if t["status"] == "done":
return deliver(order)
if t["status"] == "failed":
return handle_failure(order) # см. п.5
# queued / running — продолжаем; при queued можно показать t.get("queue_position")
Коды вида PLUS-PH-… / GO-EG-… — это ChatGPT Plus/Go картой на аккаунт покупателя. Через /pub/v1/activate они не проходят (вернётся reload_needed): у них свой двухфазный флоу с полной сессией ChatGPT покупателя.
Отличия от /pub/v1: вход — полная сессия (JSON со страницы chatgpt.com/api/auth/session либо значение куки __Secure-next-auth.session-token), а не Account ID; активация двухфазная (вход → подтверждение покупателем → оплата); эти методы без X-API-Key — лимит по IP, в партнёрском журнале не отражаются.
1.(опц.)/api/phai/cdk — проверить код (не гасит). 2./api/phai/activate — код + сессия → order_id + secret, вход в аккаунт без оплаты. 3. Опрашивайте /api/phai/order до wait_confirm — придут email_masked и тариф, покупатель сверяет свой аккаунт. 4./api/phai/confirm — покупатель подтвердил → стартует оплата. 5. Опрашивайте /api/phai/order до done:true.
Отказы: bad_session, session_expired, cdk_invalid, cdk_used, overloaded (занят — повторить), cdk_in_progress (по коду уже идёт — вернёт тот же order_id+secret). Аккаунт уже подписан → {"ok":true,"state":"already_active"}.
Статусы (state): Промежуточные (done:false): login — вход · queued — очередь · wait_confirm — ждёт подтверждения (окно ~150 с) · paying — идёт оплата. Конечные (done:true): success — выдано · declined — оплата отклонена (повторить) · session_expired/not_logged_in — сессия протухла (нужна свежая) · already_active — уже подписан · confirm_timeout — не успел подтвердить · cf_challenge — заслон при живой сессии (сессию не менять, ждать/разбор) · needs_review/manual — на проверке · sub_limit — временный лимит (повторить).
Terminal API
Programmatic activation of Claude Pro and ChatGPT Plus on the buyer's account — usually 1–3 seconds. Below is everything you need to integrate: the contract, the workflow, double-charge protection, and a methods reference.
All requests are POST with a JSON body. Headers: Content-Type: application/json and X-API-Key: YOUR_KEY. The key is issued individually: it identifies whose activations appear in the log, so each integrator gets their own.
Check ok, not just the HTTP code. A business failure (for example "code already used") comes back with HTTP 200 and ok:false. HTTP matters only for transport: 401 — key, 429 — rate, 502 — temporary unavailability.
code
Meaning
What to do
not_found
Code does not exist or is invalid
Final
already_claimed
Code already used
Final; you also get used_at, used_by, product
revoked
Code revoked by the seller
Final
in_progress
An activation is already running for this code
Do not create a second one — see section 5
queued_exists
The code is already queued
Wait or cancel the queue
wrong_channel
Code belongs to another channel
Remove channel or set the correct one
reload_needed
Code needs a different activation flow (not for this method)
The channel is detected automatically from the code format — passing channel is optional. If you pass it and it contradicts the format, you get wrong_channel: this protects against activating a code on the wrong channel.
account — the buyer's account, always a 36-character lowercase UUID: for Claude this is the Organization ID (claude.ai → account settings), for ChatGPT the Account ID (the id field from the account block), for Grok the User ID. vendor — claude, chatgpt or grok, claude by default.
4. Workflow
1.(optional)/pub/v1/health — if the channel you need is down, it is better to postpone the activation. 2./pub/v1/activate — code + account. The response has task_id and status. 3.Save the task_id immediately alongside the order. 4. If status:"done" — the subscription has already been granted, no polling needed. 5. Otherwise poll /pub/v1/task every 3–10 s until done or failed. 6.queued (Play Market only) — it is waiting for stock and will run on its own; if you do not need to wait, cancel the queue, otherwise the code will be spent later. 7. On failed for Claude, when the subscription still did not appear, you can push it through via /pub/v1/refresh using the buyer's Session Key.
Task statuses:queued — waiting in the queue · running — running or the result is not yet known · done — granted · failed — not granted. Only done and failed are terminal. running is not a failure, keep polling.
5. Retries and connection drops
Do not retry activate blindly. If the response did not arrive (timeout, drop), the activation may already have been created — a retry risks spending a second code on the same order.
What to do when activate drops: 1. Call /pub/v1/card with this code. 2. Got activating:true and task_id → the activation is already created: poll that task_id, do not create a new one. 3. Got activating:false and status:"valid" → the code is intact, there was no activation, you can retry.
An in_progress response means an activation is already running for the code. If it is your own retry for the same account — the same task is returned as a success. If the task was created for a different account, you get exactly a rejection: the service will not hand over someone else's activation.
About failed. On Play Market a code is returned to the pool on failure and stays usable — you can activate it again. On App Store a code is usually already spent on failure: check /pub/v1/card, and if the code is marked used but the subscription did not arrive — use /pub/v1/refresh.
6. Methods reference
POST/pub/v1/activate
Activate a code on the buyer's account.
// request ("vendor" and "channel" are optional — detected automatically)
{"card_key":"79A6A94D-…","account":"a63cfbd2-…","vendor":"claude"}
// response
{"ok":true,"task_id":"0f8a6d64-…","status":"queued","product":"Pro"}
Failures: not_found, already_claimed, revoked, in_progress, wrong_channel, reload_needed, transient. On already_claimed you also get used_at, used_by (masked) and product.
No response for the code — this does not discredit the code, re-check later
revoked
Code revoked by the seller
⚠️ Distinguish invalid from unknown: the first is a verdict on the code, the second is merely a missing response. Rely on the status of each item, not on the overall ok. Duplicates and wrong-format codes are dropped, so match items by the card_key field, not by order.
POST/pub/v1/cancel-queue
Remove an activation from the queue and release the code. Play Market only.
The queue runs on its own when stock arrives and spends the code. If the order is cancelled or the buyer is not willing to wait — you must cancel the queue, otherwise the code burns for nothing. Failures: not_queued, cancel_failed, already_claimed, not_found.
POST/pub/v1/refresh
Push through a Claude subscription using the buyer's Session Key, if the activation went through but the subscription did not appear.
You do not need to pass task_id — the activation is found by the code automatically (including one created via the API or from another browser). If there was no activation for the code → not_found.
POST/pub/v1/stock
Stock.
// App Store
{"vendor":"claude"} → {"ok":true,"products":[{"name":"Pro","level":"high","count":1169}]}
// Play Market
{"vendor":"chatgpt","channel":"play"} → {"ok":true,"availability":"plenty","queued":0}
availability: plenty / normal / low / none. queued — the channel's queue length.
POST/pub/v1/health
Whether activations are going through right now — per product and channel separately.
ok — activations go through · degraded — some do not · down — none go through, better postpone the activation · unknown — not enough data. This is statistics of recent real activations, not a self-check: a wave of failures cannot be predicted in advance, but it shows up in the first minutes.
POST/pub/v1/account
Check a ChatGPT subscription by Account ID, without activation.
Records have is_active and expires_date — these show whether there is a subscription right now.
POST/pub/v1/account-query
Which codes were activated on an account.
{"account":"a63cfbd2-…"} // UUID, email or phone
→ {"ok":true,"items":[{"card_key":"…","status":"used","product":"Pro","used_at":"…"}]}
An empty items means exactly that there are no activations: if the service is unavailable you get an error, not an empty list.
7. Limits
Concurrent activations
2 in progress; the rest queue up and run as slots free up — nothing is lost
Polling rate
/pub/v1/task — every 3–10 s; more often is unnecessary and will not speed things up
Check batch
up to 100 codes per /pub/v1/check
Rate exceeded
HTTP 429 and code:"rate_limited" — pause and retry
8. Integration example
A full cycle for one order with double-charge protection:
BASE = "https://activate.pay2win.store"
H = {"Content-Type": "application/json", "X-API-Key": KEY}
# 1. activation; on a connection drop do NOT retry blindly
try:
r = post(BASE + "/pub/v1/activate",
{"card_key": code, "account": buyer_account}, headers=H).json()
except Timeout:
c = post(BASE + "/pub/v1/card", {"card_key": code}, headers=H).json()
if c.get("activating"):
r = {"ok": True, "task_id": c["task_id"], "status": "queued"} # continue the same one
else:
return retry_later() # code is intact
if not r["ok"]:
if r["code"] in ("not_found", "already_claimed"):
return fail_order(r["error"]) # final
return retry_later() # transient / captcha / out_of_stock
save_task_id(order, r["task_id"]) # save IMMEDIATELY
# 2. poll until a terminal status
while True:
sleep(5)
t = post(BASE + "/pub/v1/task", {"task_id": r["task_id"]}, headers=H).json()
if t["status"] == "done":
return deliver(order)
if t["status"] == "failed":
return handle_failure(order) # see section 5
# queued / running — keep going; on queued you can show t.get("queue_position")
9. GPT activation by card (PHAI) — GO-EG-…, PLUS-PH-…
Codes like PLUS-PH-… / GO-EG-… are ChatGPT Plus/Go by card on the buyer's account. They do not go through /pub/v1/activate (returns reload_needed): they have their own two-phase flow using the buyer's full ChatGPT session.
Differences from /pub/v1: the input is a full session (the JSON from the chatgpt.com/api/auth/session page, or the value of the __Secure-next-auth.session-token cookie), not an Account ID; activation is two-phase (login → buyer confirmation → payment); these methods are without X-API-Key — limited by IP, and not recorded in the partner log.
1.(opt.)/api/phai/cdk — check the code (does not redeem it). 2./api/phai/activate — code + session → order_id + secret, logging into the account without payment. 3. Poll /api/phai/order until wait_confirm — email_masked and the plan arrive, the buyer verifies their account. 4./api/phai/confirm — buyer confirmed → payment starts. 5. Poll /api/phai/order until done:true.
Statuses (state): Intermediate (done:false): login — logging in · queued — in queue · wait_confirm — waiting for confirmation (window ~150 s) · paying — payment in progress. Final (done:true): success — delivered · declined — payment declined (retry) · session_expired/not_logged_in — session went stale (a fresh one is needed) · already_active — already subscribed · confirm_timeout — did not confirm in time · cf_challenge — a block hit while the session is alive (do not change the session, wait/investigate) · needs_review/manual — under review · sub_limit — temporary limit (retry).
终端 API
以编程方式将 Claude Pro 和 ChatGPT Plus 激活到买家账户 — 通常为 1–3 秒。下面提供集成所需的一切:响应契约、操作流程、防重复扣费保护以及方法参考手册。
فعالسازی برنامهنویسیشدهٔ Claude Pro و ChatGPT Plus روی حساب خریدار — معمولاً 1–3 ثانیه. در ادامه هر آنچه برای یکپارچهسازی لازم است: قرارداد، روال کار، محافظت در برابر کسر دوباره و مرجع متدها.
همهٔ درخواستها — POST، بدنه JSON. هدرها: Content-Type: application/json و X-API-Key: کلید_شما. کلید بهصورت شخصی صادر میشود: از روی آن مشخص است فعالسازیهای چه کسی در گزارش ثبت شده، بنابراین برای هر مجری کلید جداگانه.
// موفقیت
{"ok": true, ...دادهها...}
// رد
{"ok": false, "error": "متن برای انسان", "code": "کد_ماشینی"}
ok را بررسی کنید، نه فقط کد HTTP را. خطای تجاری (مثلاً «کد قبلاً استفاده شده») با HTTP 200 و ok:false میآید. HTTP فقط برای لایهٔ انتقال مهم است: 401 — کلید، 429 — نرخ درخواست، 502 — در دسترس نبودن موقت.
code
معنی
چه باید کرد
not_found
کد وجود ندارد یا نامعتبر است
قطعی
already_claimed
کد قبلاً استفاده شده
قطعی؛ used_at، used_by، product برمیگردند
revoked
کد توسط فروشنده لغو شده است
قطعی
in_progress
فعالسازی این کد در حال انجام است
دومی را ایجاد نکنید — رجوع به بند 5
queued_exists
برای این کد صف وجود دارد
منتظر بمانید یا صف را لغو کنید
wrong_channel
کد مربوط به کانال دیگری است
channel را حذف کنید یا مقدار درست را بدهید
reload_needed
کد به روش فعالسازی دیگری نیاز دارد (برای این متد نیست)
کانال بهصورت خودکار از روی قالب کد تشخیص داده میشود — ارسال channel اجباری نیست. اگر آن را بفرستید و با قالب در تضاد باشد، wrong_channel برمیگردد: این محافظتی در برابر فعالسازی کد در کانال اشتباه است.
account — حساب خریدار، همیشه یک UUID با 36 نویسه و حروف کوچک: در Claude این همان Organization ID است (claude.ai → تنظیمات حساب)، در ChatGPT همان Account ID (فیلد id از بلوک account)، در Grok همان User ID. vendor — claude، chatgpt یا grok، بهصورت پیشفرض claude.
4. روال کار
1.(اختیاری)/pub/v1/health — اگر کانال موردنظر down باشد، بهتر است فعالسازی را به تعویق بیندازید. 2./pub/v1/activate — کد + حساب. در پاسخ task_id و status. 3.بیدرنگ task_id را ذخیره کنید کنار سفارش. 4. اگر status:"done" — اشتراک همانجا صادر شده، نیازی به پرسوجو نیست. 5. در غیر این صورت /pub/v1/task را هر 3–10 ثانیه پرسوجو کنید تا done یا failed. 6.queued (فقط Play Market) — منتظر رسیدن موجودی میماند و خودش اجرا میشود؛ اگر نیازی به انتظار نیست، صف را لغو کنید، وگرنه کد بعداً کسر میشود. 7. در صورت failed برای Claude، وقتی اشتراک همچنان ظاهر نشد، امکان نهاییسازی از طریق /pub/v1/refresh با Session Key خریدار وجود دارد.
وضعیتهای تسک:queued — در صف منتظر است · running — در حال اجراست یا نتیجه هنوز مشخص نیست · done — صادر شد · failed — صادر نشد. فقط done و failed نهایی هستند. running یک رد نیست، به پرسوجو ادامه دهید.
5. تکرارها و قطع ارتباط
activate را کورکورانه تکرار نکنید. اگر پاسخ نرسید (تایماوت، قطعی)، ممکن است فعالسازی از قبل ایجاد شده باشد — تکرار این خطر را دارد که کد دومی روی همان سفارش کسر شود.
در صورت قطع ارتباط هنگام activate چه باید کرد: 1./pub/v1/card را با همین کد فراخوانی کنید. 2. اگر activating:true و task_id آمد → فعالسازی از قبل ایجاد شده: همین task_id را پرسوجو کنید، فعالسازی جدیدی نسازید. 3. اگر activating:false و status:"valid" آمد → کد سالم است، فعالسازیای رخ نداده، میتوان تکرار کرد.
پاسخ in_progress یعنی فعالسازی این کد در حال انجام است. اگر این تکرار خودتان روی همان حساب باشد — همان تسک بهعنوان موفقیت برمیگردد. اگر تسک روی حساب دیگری ایجاد شده باشد، دقیقاً یک رد برمیگردد: سرویس فعالسازی متعلق به دیگری را تحویل نمیدهد.
دربارهٔ failed. در Play Market کد هنگام شکست به استخر بازمیگردد و کارآمد میماند — میتوان دوباره فعالسازی کرد. در App Store کد هنگام شکست معمولاً از قبل مصرف شده است: /pub/v1/card را بررسی کنید، و اگر کد بهعنوان استفادهشده ثبت شده اما اشتراک نرسیده — از /pub/v1/refresh استفاده کنید.
خطاها: not_found، already_claimed، revoked، in_progress، wrong_channel، reload_needed، transient. در حالت already_claimed علاوه بر آن used_at، used_by (ماسکشده) و product نیز میآیند.
پاسخی برای کد دریافت نشد — این به اعتبار کد خدشه نمیزند، بعداً دوباره بررسی کنید
revoked
کد توسط فروشنده لغو شده است
⚠️ بین invalid و unknown تمایز قائل شوید: اولی حکم نهایی دربارهٔ کد است، دومی فقط نبودِ پاسخ. به وضعیت هر عنصر توجه کنید، نه به ok کلی. موارد تکراری و کدهای با قالب نادرست کنار گذاشته میشوند، بنابراین عناصر را بر اساس فیلد card_key تطبیق دهید، نه بر اساس ترتیب.
POST/pub/v1/cancel-queue
فعالسازی را از صف بردارید و کد را آزاد کنید. فقط Play Market.
صف هنگام رسیدن محصول خودش اجرا میشود و کد را کسر میکند. اگر سفارش لغو شده یا خریدار آمادهٔ انتظار نیست — حتماً باید صف را لغو کنید، وگرنه کد بیهوده میسوزد. خطاها: not_queued، cancel_failed، already_claimed، not_found.
POST/pub/v1/refresh
نهاییسازی اشتراک Claude با Session Key خریدار، در صورتی که فعالسازی انجام شده اما اشتراک ظاهر نشده باشد.
نیازی به ارسال task_id نیست — فعالسازی بهصورت خودکار از روی کد پیدا میشود (از جمله فعالسازی ایجادشده از طریق API یا از مرورگر دیگر). اگر هیچ فعالسازیای برای کد نبوده باشد → not_found.
POST/pub/v1/stock
موجودی.
// App Store
{"vendor":"claude"} → {"ok":true,"products":[{"name":"Pro","level":"high","count":1169}]}
// Play Market
{"vendor":"chatgpt","channel":"play"} → {"ok":true,"availability":"plenty","queued":0}
availability: plenty / normal / low / none. queued — طول صف کانال.
POST/pub/v1/health
آیا فعالسازیها همین الان انجام میشوند — برای هر محصول و کانال جداگانه.
ok — فعالسازیها انجام میشوند · degraded — بخشی انجام نمیشود · down — انجام نمیشوند، بهتر است فعالسازی را به تعویق بیندازید · unknown — دادهٔ کافی نیست. این آمارِ فعالسازیهای واقعیِ اخیر است، نه یک خودآزمایی: موج خطاها را نمیتوان از پیش پیشبینی کرد، اما در دقایق اول دیده میشود.
POST/pub/v1/account
بررسی اشتراک ChatGPT بر اساس Account ID، بدون فعالسازی.
هر رکورد is_active و expires_date دارد — از روی آنها مشخص میشود که آیا اشتراک هماکنون فعال است.
POST/pub/v1/account-query
چه کدهایی روی حساب فعال شدهاند.
{"account":"a63cfbd2-…"} // UUID، ایمیل یا تلفن
→ {"ok":true,"items":[{"card_key":"…","status":"used","product":"Pro","used_at":"…"}]}
items خالی دقیقاً به معنای نبودِ فعالسازی است: در صورت در دسترس نبودن سرویس یک خطا برمیگردد، نه فهرست خالی.
7. محدودیتها
فعالسازیهای همزمان
2 مورد در حال انجام؛ بقیه در صف قرار میگیرند و با آزاد شدن ظرفیت اجرا میشوند — چیزی از دست نمیرود
نرخ پرسوجو
/pub/v1/task — هر 3–10 ثانیه؛ بیشتر از این لازم نیست و سرعت را بالا نمیبرد
دستهٔ بررسی
تا 100 کد در هر /pub/v1/check
عبور از حد نرخ
HTTP 429 و code:"rate_limited" — مکث و تکرار
8. نمونهٔ یکپارچهسازی
چرخهٔ کامل یک سفارش با محافظت در برابر کسر دوباره:
BASE = "https://activate.pay2win.store"
H = {"Content-Type": "application/json", "X-API-Key": کلید}
# 1. فعالسازی؛ در صورت قطع ارتباط کورکورانه تکرار نمیکنیم
try:
r = post(BASE + "/pub/v1/activate",
{"card_key": code, "account": buyer_account}, headers=H).json()
except Timeout:
c = post(BASE + "/pub/v1/card", {"card_key": code}, headers=H).json()
if c.get("activating"):
r = {"ok": True, "task_id": c["task_id"], "status": "queued"} # همان را ادامه میدهیم
else:
return retry_later() # کد سالم است
if not r["ok"]:
if r["code"] in ("not_found", "already_claimed"):
return fail_order(r["error"]) # قطعی
return retry_later() # transient / captcha / out_of_stock
save_task_id(order, r["task_id"]) # بیدرنگ ذخیره کنید
# 2. پرسوجو تا وضعیت نهایی
while True:
sleep(5)
t = post(BASE + "/pub/v1/task", {"task_id": r["task_id"]}, headers=H).json()
if t["status"] == "done":
return deliver(order)
if t["status"] == "failed":
return handle_failure(order) # رجوع به بند 5
# queued / running — ادامه میدهیم؛ در حالت queued میتوان t.get("queue_position") را نشان داد
9. فعالسازی GPT با کارت (PHAI) — GO-EG-…, PLUS-PH-…
کدهایی مانند PLUS-PH-… / GO-EG-… یعنی ChatGPT Plus/Go با کارت روی حساب خریدار. از طریق /pub/v1/activate کار نمیکنند (پاسخ reload_needed برمیگردد): اینها جریان دومرحلهای مخصوص خود را دارند که به سشن کامل ChatGPT خریدار نیاز دارد.
تفاوتها با /pub/v1: ورودی — سشن کامل (JSON از صفحه chatgpt.com/api/auth/session یا مقدار کوکی __Secure-next-auth.session-token) است، نه Account ID؛ فعالسازی دومرحلهای است (ورود → تأیید خریدار → پرداخت)؛ این روشها بدون X-API-Key هستند — محدودیت بر اساس IP، و در ژورنال شریک ثبت نمیشوند.
1.(اختیاری)/api/phai/cdk — بررسی کد (آن را مصرف نمیکند). 2./api/phai/activate — کد + سشن → order_id + secret، ورود به حساب بدون پرداخت. 3./api/phai/order را تا رسیدن به wait_confirm پایش کنید — email_masked و تعرفه ارسال میشوند، خریدار حساب خود را بررسی میکند. 4./api/phai/confirm — خریدار تأیید کرد → پرداخت آغاز میشود. 5./api/phai/order را تا done:true پایش کنید.
{"code":"PLUS-PH-…","session":"‹JSON کامل سشن ChatGPT›"}
→ {"ok":true,"order_id":"ext-…","secret":"…","state":"login","plan":"plus"}
ردها: bad_session، session_expired، cdk_invalid، cdk_used، overloaded (مشغول — دوباره تلاش کنید)، cdk_in_progress (برای این کد از قبل در جریان است — همان order_id+secret را برمیگرداند). حساب از قبل اشتراک دارد → {"ok":true,"state":"already_active"}.
وضعیتها (state): میانی (done:false): login — ورود · queued — صف · wait_confirm — در انتظار تأیید (پنجره ~۱۵۰ ثانیه) · paying — پرداخت در جریان است. نهایی (done:true): success — تحویل داده شد · declined — پرداخت رد شد (دوباره تلاش کنید) · session_expired/not_logged_in — سشن منقضی شده (سشن تازه لازم است) · already_active — از قبل اشتراک دارد · confirm_timeout — تأیید بهموقع انجام نشد · cf_challenge — مانع با وجود سشن فعال (سشن را تغییر ندهید، صبر کنید/بررسی دستی) · needs_review/manual — در حال بررسی · sub_limit — محدودیت موقت (دوباره تلاش کنید).