GetCourse API API

Отрасль: Другое. Актуально на 2026-10-24.

API онлайн-школ на платформе GetCourse: импорт пользователей и заказов (создание, обновление, смена статуса заказа, добавление в группы) и экспорт пользователей, групп, заказов и платежей. Импорт доступен только на платных тарифах. Работает в аккаунте школы по секретному ключу.

Сценарии

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

Оплата прошла на внешнем лендинге или в другой системе — ученик автоматически появляется в 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 — они попадут в аналитику школы.
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.

  1. Отправь POST /deals как form-data с action = add, key и params (JSON в base64). Минимум для заказа — user.email, deal.offer_code (или product_title) и deal.deal_cost; либо email и deal.offer_id.
  2. Чтобы сразу получить ссылку на оплату и номер заказа, добавь system.return_payment_link = 1 и system.return_deal_number = 1. В ответе result: deal_id, deal_number, payment_link.
  3. Сохрани deal_number у себя: по нему заказ обновляется.
  4. Если оплата прошла вне GetCourse, смени статус тем же методом: action = add, user.email, deal.deal_number и deal.deal_status = payed.
  5. Импорт ограничен числом создаваемых объектов в месяц по тарифу; изменения существующих заказов в лимит не входят.
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-таблицу или сквозную аналитику.

  1. Запусти экспорт: GET /account/deals с key и фильтрами — created_at[from] и created_at[to] (YYYY-MM-DD) или payed_at[from] / payed_at[to] для оплаченных. В ответе — export_id.
  2. Через минуту-другую забери данные: GET /account/exports/{export_id} с key. Пока файл готовится, придёт ошибка — повтори запрос позже.
  3. Данные приходят таблицей: список полей и строки значений. Сопоставь их по позиции.
  4. Лимит Export API — 100 запросов за 2 часа на аккаунт, включая проверки статуса, и экспорты идут строго по одному. Ошибка 903 — лимит исчерпан, жди сброса. Не проверяй статус чаще раза в минуту.
  5. Платежи выгружаются так же: GET /account/payments с created_at[from] и created_at[to].
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

Выгрузить учеников группы

Список учеников потока — для рассылки, проверки доступа или переноса в другую систему.

  1. Найди ID группы: GET /account/groups с key.
  2. Запусти экспорт: GET /account/groups/{id}/users с key, при необходимости added_at[from] и added_at[to] — дата добавления в группу.
  3. Забери результат: GET /account/exports/{export_id} — как и для заказов, с паузой и с учётом общего лимита Export API.
  4. Для частых событий (новый ученик, оплата) экспорт не подходит: настрой в GetCourse процесс с операцией «Вызвать URL», и школа сама будет отправлять события в твою систему.
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

Базовые URL

Авторизация

Тип: 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 /deals — Импорт заказа

Создаёт заказ или обновляет существующий по 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 нет Вернуть номер заказа

GET /account/users — Экспорт пользователей

Запускает экспорт и возвращает ключ экспорта; данные получают методом /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 — с датой добавления)

GET /account/groups — Список групп

Параметр Где Тип Обяз. Описание
key query string да Секретный ключ

GET /account/groups/{id}/users — Экспорт пользователей группы

Параметр Где Тип Обяз. Описание
id path integer да ID группы
key query string да Секретный ключ
added_at[from] query string нет Дата добавления в группу с
added_at[to] query string нет Дата добавления в группу по
status query string нет Статус пользователя

GET /account/deals — Экспорт заказов

Параметр Где Тип Обяз. Описание
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 пользователей через запятую

GET /account/payments — Экспорт платежей

Параметр Где Тип Обяз. Описание
key query string да Секретный ключ
created_at[from] query string нет Дата создания с
created_at[to] query string нет Дата создания по
status query string нет Статус платежа

GET /account/exports/{export_id} — Результат экспорта

Параметр Где Тип Обяз. Описание
export_id path integer да ID экспорта из ответа метода экспорта
key query string да Секретный ключ

Нюансы

Ошибки

Код Описание
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