# GetCourse API: Добавить ученика в группу после оплаты

Сценарий из mcp-everything. Актуально на 2026-10-24.

Оплата прошла на внешнем лендинге или в другой системе — ученик автоматически появляется в GetCourse и получает доступ к курсу через группу.

1. Создай ключ API в аккаунте школы («Профиль» → «Настройки аккаунта» → «АПИ»). Для импорта нужен ключ с правом записи и платный тариф.
2. Собери params: user.email (или phone), first_name, group_name — список групп, дающих доступ к курсу. Чтобы не получить ошибку на существующем пользователе, передай system.refresh_if_exists = 1.
3. Закодируй JSON params в base64 и отправь POST /users как form-data с полями action = add, key и params. Без form-data придёт ошибка «Пустой параметр action».
4. Проверь ответ: success верхнего уровня говорит только о том, что запрос принят. Итог по пользователю — в result: user_id, user_status и error_message.
5. UTM-метки передавай в params.session — они попадут в аналитику школы.

```python
import base64, json, requests

ACCOUNT, KEY = "myschool", "<секретный ключ>"
params = {
    "user": {"email": "student@example.ru", "first_name": "Анна", "group_name": ["Курс «Python с нуля» — поток 5"]},
    "system": {"refresh_if_exists": 1},
    "session": {"utm_source": "vk", "utm_campaign": "autumn"},
}
r = requests.post(f"https://{ACCOUNT}.getcourse.ru/pl/api/users", data={
    "action": "add",
    "key": KEY,
    "params": base64.b64encode(json.dumps(params, ensure_ascii=False).encode()).decode(),
}).json()
print(r["success"], r.get("result"))
```

## Базовые URL

- Боевой: `https://{account}.getcourse.ru/pl/api`

## Авторизация

Тип: API-ключ

Отдельной авторизации нет: секретный ключ аккаунта передаётся в каждом запросе — в импорте POST-параметром `key`, в экспорте параметром `key` в строке запроса. Ключ создаётся в аккаунте («Профиль» → «Настройки аккаунта» → «АПИ»); для импорта нужен ключ с правом записи.

## Методы сценария

### POST /users — Импорт пользователя

Тело — `form-data`: `action`, `key` и `params` (JSON, закодированный в base64).

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `action` | body | string | да | add — создать (или обновить при refresh_if_exists=1); update — задать полный список групп по user.id |
| `key` | body | string | да | Секретный ключ |
| `params` | body | string | да | JSON в base64 |
| `params.user.email` | body | string | нет | Email (нужен email или телефон) |
| `params.user.phone` | body | string | нет | Телефон |
| `params.user.first_name` | body | string | нет | Имя |
| `params.user.last_name` | body | string | нет | Фамилия |
| `params.user.city` | body | string | нет | Город |
| `params.user.country` | body | string | нет | Страна |
| `params.user.group_name` | body | array | нет | Группы (можно с датой добавления) |
| `params.user.addfields` | body | object | нет | Дополнительные поля |
| `params.system.refresh_if_exists` | body | integer | нет | 1 — обновить существующего пользователя |
| `params.system.partner_email` | body | string | нет | Email партнёра |
| `params.session` | body | object | нет | UTM-метки: utm_source, utm_medium, utm_content, utm_campaign, utm_group |

## Нюансы

- Импорт: POST с полями `action`, `key`, `params`; в base64 кодируется только `params`. Без POST/form-data будет ошибка «Пустой параметр action».
- Экспорт двухшаговый: запрос с фильтром → `export_id` → получение данных; экспорты выполняются последовательно, не параллельте их.
- Справочники доп. полей пользователей и заказов — `/account/fields` с `action=get`.
- Даты в импорте — `yyyy-mm-dd HH:MM:II`.
- Для оперативной передачи событий документация рекомендует процессы с операцией «Вызвать URL» вместо частого экспорта.

## Другие сценарии

- [Создать заказ и получить ссылку на оплату](https://mcp-everything.ru/integrations/getcourse/scenarios/sozdat-zakaz-i-poluchit-ssylku-na-oplatu.md)
- [Выгрузить заказы за период в аналитику](https://mcp-everything.ru/integrations/getcourse/scenarios/vygruzit-zakazy-za-period-v-analitiku.md)
- [Выгрузить учеников группы](https://mcp-everything.ru/integrations/getcourse/scenarios/vygruzit-uchenikov-gruppy.md)

---

Если этого недостаточно — официальная документация: https://getcourse.ru/help/api
Вся интеграция одним документом: https://mcp-everything.ru/integrations/getcourse.md
