Отрасль: Другое. Актуально на 2026-10-24.
API онлайн-школ на платформе GetCourse: импорт пользователей и заказов (создание, обновление, смена статуса заказа, добавление в группы) и экспорт пользователей, групп, заказов и платежей. Импорт доступен только на платных тарифах. Работает в аккаунте школы по секретному ключу.
Оплата прошла на внешнем лендинге или в другой системе — ученик автоматически появляется в GetCourse и получает доступ к курсу через группу.
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"))
Заказ из CRM или чат-бота: менеджер оформляет покупку, клиент получает ссылку на оплату GetCourse.
import base64, json, requests
def gc_import(entity, params):
payload = base64.b64encode(json.dumps(params, ensure_ascii=False).encode()).decode()
return requests.post(f"https://myschool.getcourse.ru/pl/api/{entity}",
data={"action": "add", "key": "<секретный ключ>", "params": payload}).json()
r = gc_import("deals", {
"user": {"email": "client@example.ru", "first_name": "Олег"},
"deal": {"offer_code": "python-start", "deal_cost": 14900, "deal_status": "new",
"manager_email": "sales@myschool.ru"},
"system": {"return_payment_link": 1, "return_deal_number": 1},
})
print(r["result"].get("payment_link"), r["result"].get("deal_number"))
# Позже, когда оплата подтверждена:
gc_import("deals", {"user": {"email": "client@example.ru"},
"deal": {"deal_number": r["result"]["deal_number"], "deal_status": "payed"}})
Продажи школы — в BI, Google-таблицу или сквозную аналитику.
import time, requests
BASE, KEY = "https://myschool.getcourse.ru/pl/api", "<секретный ключ>"
start = requests.get(f"{BASE}/account/deals", params={
"key": KEY, "created_at[from]": "2026-10-01", "created_at[to]": "2026-10-23"}).json()
export_id = start["info"]["export_id"]
for _ in range(10):
time.sleep(60)
res = requests.get(f"{BASE}/account/exports/{export_id}", params={"key": KEY}).json()
if res.get("success"):
fields, items = res["info"]["fields"], res["info"]["items"]
deals = [dict(zip(fields, row)) for row in items]
break
Список учеников потока — для рассылки, проверки доступа или переноса в другую систему.
KEY='<секретный ключ>'
curl -s -G "https://myschool.getcourse.ru/pl/api/account/groups" -d key=$KEY
EXPORT=$(curl -s -G "https://myschool.getcourse.ru/pl/api/account/groups/123456/users" \
-d key=$KEY -d 'added_at[from]=2026-09-01' | jq -r .info.export_id)
sleep 60
curl -s -G "https://myschool.getcourse.ru/pl/api/account/exports/$EXPORT" -d key=$KEY
https://{account}.getcourse.ru/pl/apiТип: API-ключ
Отдельной авторизации нет: секретный ключ аккаунта передаётся в каждом запросе — в импорте POST-параметром key, в экспорте параметром key в строке запроса. Ключ создаётся в аккаунте («Профиль» → «Настройки аккаунта» → «АПИ»); для импорта нужен ключ с правом записи.
Тело — 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 |
Создаёт заказ или обновляет существующий по deal_number; смена статуса — action=add с user.email, deal.deal_number и deal.deal_status. Минимум для создания: код или название предложения, сумма и email (либо offer_id и email).
В ответе: success, action, result (deal_id, deal_number, user_id, user_status, payment_link, error_message, error).
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
action |
body | string | да | add |
key |
body | string | да | Секретный ключ |
params |
body | string | да | JSON в base64 |
params.user.email |
body | string | да | Email покупателя |
params.deal.deal_number |
body | string | нет | Номер заказа (для обновления) |
params.deal.offer_code |
body | string | нет | Код предложения |
params.deal.offer_id |
body | string | нет | ID предложения |
params.deal.product_title |
body | string | нет | Название предложения |
params.deal.deal_cost |
body | string | нет | Сумма заказа |
params.deal.deal_status |
body | string | нет | Статус: new, payed, cancelled и др. |
params.deal.deal_is_paid |
body | integer | нет | Признак оплаты |
params.deal.payment_type |
body | string | нет | Способ оплаты |
params.deal.payment_status |
body | string | нет | Статус платежа |
params.deal.manager_email |
body | string | нет | Email менеджера |
params.deal.deal_comment |
body | string | нет | Комментарий |
params.system.multiple_offers |
body | integer | нет | 1 — несколько предложений в одном заказе (добавляются по одному) |
params.system.return_payment_link |
body | integer | нет | Вернуть ссылку на оплату |
params.system.return_deal_number |
body | integer | нет | Вернуть номер заказа |
Запускает экспорт и возвращает ключ экспорта; данные получают методом /account/exports/{export_id}.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
key |
query | string | да | Секретный ключ |
created_at[from] |
query | string | нет | Дата создания с, YYYY-MM-DD |
created_at[to] |
query | string | нет | Дата создания по |
status |
query | string | нет | active или in_base |
email |
query | string | нет | Email через запятую |
idgrouplist |
query | string | нет | Выгрузить ID групп (id или id_date — с датой добавления) |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
key |
query | string | да | Секретный ключ |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | integer | да | ID группы |
key |
query | string | да | Секретный ключ |
added_at[from] |
query | string | нет | Дата добавления в группу с |
added_at[to] |
query | string | нет | Дата добавления в группу по |
status |
query | string | нет | Статус пользователя |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
key |
query | string | да | Секретный ключ |
created_at[from] |
query | string | нет | Дата создания с |
created_at[to] |
query | string | нет | Дата создания по |
payed_at[from] |
query | string | нет | Дата оплаты с |
payed_at[to] |
query | string | нет | Дата оплаты по |
finished_at[from] |
query | string | нет | Дата завершения с |
status_changed_at[from] |
query | string | нет | Дата смены статуса с |
status |
query | string | нет | Статус заказа |
user_in_group |
query | integer | нет | ID группы пользователя |
user_id |
query | string | нет | ID пользователей через запятую |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
key |
query | string | да | Секретный ключ |
created_at[from] |
query | string | нет | Дата создания с |
created_at[to] |
query | string | нет | Дата создания по |
status |
query | string | нет | Статус платежа |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
export_id |
path | integer | да | ID экспорта из ответа метода экспорта |
key |
query | string | да | Секретный ключ |
action, key, params; в base64 кодируется только params. Без POST/form-data будет ошибка «Пустой параметр action».export_id → получение данных; экспорты выполняются последовательно, не параллельте их./account/fields с action=get.yyyy-mm-dd HH:MM:II.| Код | Описание |
|---|---|
903 |
Превышен лимит export API — дождитесь сброса |
Неавторизованное API-обращение |
Неверный аккаунт или ключ |
Действие запрещено |
Ключ только на чтение |
Пустой параметр action |
Данные переданы не в теле POST form-data |
Не указан ни эл. адрес, ни телефон |
Нет email или телефона в params |
Если этого недостаточно — официальная документация: https://getcourse.ru/help/api JSON: https://mcp-everything.ru/api/integrations/getcourse. MCP: https://mcp-everything.ru/mcp