Документация
Партнёрский 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:
| Поле | Значение |
|---|---|
plan | pro или proplus |
months | 1, 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 — только неиспользованные коды; место сразу освобождается.
Безопасность
- Каждый вызов идёт по HTTPS; ключи сравниваются за постоянное время, хранится только их отпечаток с ключом.
- Мы пишем на ваш контактный адрес каждый раз, когда ключ создаётся или заменяется.
- Коды состоят из 16 символов из алфавита в 32 знака (80 бит), показываются один раз, хранятся только как отпечаток и при вводе ограничены 10 попытками в час на аккаунт.