Документация

Партнёрский API

Для одобренных партнёров: создавайте коды активации Chart Premium для своих клиентов из собственных систем (CRM, личный кабинет, онбординг) и смотрите, какие из них использованы. О партнёрской программе.

Аутентификация

Создайте ключ на странице партнёра и передавайте его в заголовке Authorization. Ключи выглядят как mdp_pk_3f9a1c07de_…; мы храним только отпечаток, поэтому потерянный ключ нельзя показать снова — создайте новый.

curl https://app.marketapi.app/partner/v1/account \
  -H "Authorization: Bearer mdp_pk_YOUR_KEY"

Ротация без простоя: Заменить создаёт новый ключ и оставляет старый рабочим на 24 часа. Пропишите новый ключ в своих системах, после чего старый истечёт сам (или отзовите его сразу). Никогда не размещайте ключ на веб-странице или в мобильном приложении: вызывайте API со своего сервера.

Лимиты: 120 запросов в минуту на партнёра; при слишком большом числе неверных ключей с одного адреса он блокируется на 10 минут. Ошибки в JSON: {"error": "…", "code": "invalid"} с HTTP 400, 401, 405 или 429.

Ваши места

GET /partner/v1/account

{"partner_id": "MP-7KQ3TA", "name": "Example Broker", "status": "active",
 "seats": [{"plan": "pro", "name": "Pro", "days": 30, "left": 48, "trial": false, "expires_at": null}]}

Каждое место — это код активации для тарифа и срока (30, 91, 182 или 365 дней). Покупайте пакеты мест на странице партнёра (на 30% ниже обычной цены, пакеты по 10, 50, 250).

Создать коды

POST /partner/v1/codes с телом JSON:

ПолеЗначение
planpro или proplus
months1, 3, 6 или 12 (срок места) либо days
countсколько кодов (1–5000); можно не указывать, если вы передаёте ссылки
customer_refsнеобязательно: ваша собственная ссылка для каждого кода (например, номер счёта клиента), до 120 символов каждая. Мы храним её в замаскированном виде (45•••68) с отпечатком на ключе, поэтому код можно найти по полной ссылке, но саму ссылку мы не храним.
expires_daysсколько действует неиспользованный код (по умолчанию 365; пробные места заканчиваются раньше). Истёкший неиспользованный код возвращает своё место.
batchнеобязательное название для распознавания пакета

Передавайте заголовок Idempotency-Key (любой уникальный текст): при повторе запроса вы получите те же коды, а не новые (в течение 24 часов).

curl -X POST https://app.marketapi.app/partner/v1/codes \
  -H "Authorization: Bearer mdp_pk_YOUR_KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: onboarding-45123468" \
  -d '{"plan": "pro", "months": 1, "customer_refs": ["45123468"]}'
201 {"count": 1, "codes": [{"code": "K7QM-3XTP-9RWA-FD2H", "hint": "FD2H", "customer_ref": "45•••68",
      "plan": "pro", "days": 30, "expires_at": "2027-10-17T08:00:00+00:00"}]}

Коды приходят в ответе только один раз. Передайте каждому клиенту его код; он вводит его на https://app.marketapi.app/premium (войдя в аккаунт), и тариф начинается сразу или после уже действующего.

Большие пакеты: более 100 кодов создаются нашей очередью задач. Ответ: 202 {"job": 812, "url": "/partner/v1/jobs/812"}; опрашивайте этот URL, пока status не станет done; коды есть в этом ответе только в первый раз.

GET /partner/v1/jobs/812
{"status": "queued", "position": 2, "eta_s": 4.0}  →  {"status": "done", "count": 2000, "codes": [ … ]}

Найти коды

GET /partner/v1/codes?customer_ref=45123468&status=unused&limit=100&offset=0 — статус: unused, redeemed или cancelled.

{"codes": [{"id": 9134, "hint": "FD2H", "customer_ref": "45•••68", "plan": "pro", "days": 30, "status": "redeemed",
            "created_at": "…", "expires_at": "…", "redeemed_at": "…"}]}

Отменить код

POST /partner/v1/codes/9134/cancel — только неиспользованные коды; место сразу освобождается.

Безопасность